redis
2021-03-17 20:58:33 8 举报
AI智能生成
redis脑图
作者其他创作
大纲/内容
优点
nosql,非关系型数据库
丰富的数据类型
内存数据库
可以持久化
持久化
AOP(append only file),执行写命令时,将执行的写命令复制到硬盘
配置
创建办法,配置文件
BGREWRITEAOF命令,会移除AOF文件中的冗余命令来重写AOF文件,也是创建一个子进程
快照(snapshotting),将存在于某一时刻的所有数据都写入硬盘里面
配置
创建办法
BGSAVE命令,redis调用fork来创建一个子进程,子进程来将快照写入磁盘
SAVE命令创建快照,收到SAVE命令后redis服务器在快照创建完毕之前不在响应其他命令
配置文件中设置save 60 1000,表从示redis最近一次创建快照其,当"60秒内有1000次写入"这个条件被满足时,redis就会触发一次BGSAVE命令
当redis通过shutdown命令接收到关闭服务器的请求时,或者接收到标准的term信号时,会执行一个SAVE命令
连接另一个redis服务器时,向对方发送SYNC命令开始复制时,如果主服务器没有在执行BGSAVE,或者主服务器并非刚执行完BGSAVE操作,那么主服务器就会执行BGSAVE命令
如果系统崩溃,用户将丢失最近一次生成快照之后更改的所有数据。适用于那些即使丢失一部分数据也不会造成问题的程序
事务
指令
MULTI
WATCH
WATCH命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。 监控一直持续到EXEC命令执行结束。 WATCH需要在 MULTI命令前声明
UNWATCH
unwatch,命令用于取消watch命令对所有 key 的监视。
EXEC
DISCARD
取消事务,放弃执行事务块内的所有命令
如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH
如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH
redis基本事务需要泳道multi和exec命令,可以让一个客户端在不被其他客户端打断的情况下执行多个命令,redis接收到multi命令时,会将客户端之后发送来的指令放入一个队列中,知道客户端发送exec命令,然后客户端就在不被打断的情况下,一条接一条的执行存储在队列中命令
其他指令
发布与订阅
subscribe channel [channel],订阅给定的一个或多个频道
unsubscribe [channel [channel ...]],退订给定的一个或者多个频道,如果没有给定频道,则退订所有频道
publish channel message,给频道channel发送消息message
psubscribe pattern [pattern ...],订阅与给定模式相匹配的所有频道
punsubscribe [pattern [pattern ...]],退订给定的模式,如果pattern为空,则退订所有模式
pubsub channels,查看存在的所有频道
排序
sort source-key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...] [ASC|DESC] [ALPHA] [STORE dest-key]],根据给定的选项,对输入列表,集合或者有序集合进行排序,然后返回或存储排序的结果
用例
构建支持程序
统计
日志
查找IP所属城市和国家
构建应用程序组件
分布式锁
setnx
setex
数据类型
字符串(STRING)
操作指令
set key value,设置key的值为value
从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:
EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。
PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value 。
XX : 只在键已经存在时, 才对键进行设置操作。
EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。
PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value 。
XX : 只在键已经存在时, 才对键进行设置操作。
get key value,获取key的值value
del key,删除key键和其value值
incr key,将key的值加上1
value值不存在或者为空字符串:value当做1来处理
value值为字符串:redis返回错误"ERR value is not an integer or out of range"
value值为十进制整数或者浮点数:value加1
decr key,将key的值减1
incrby key amount,将key的值加上整数amount
decrby key amount,将key的值减去整数amount
incrbyfloat key amount,将key的值加上浮点数amount,redis版本2.6及以上版本可以使用
append key value,将值value追加给key的值末尾
getrange key start end,获取从start开始到end结束范围内所有字符串,包括start和end
setrange key offset value,将从offset偏移开始的字串设置为value,将offset的值往后移
getbit key offset,将字节串看做二进制位串,并返回位串中偏移量位offset的二进制值
setbit key offset value,将字节串看做二进制位串,并将位串中偏移量位offset的二进制的值设置为value
bitcount key [start end],统计二进制串值为1的二进制数量,如果给定了可选得start和end偏移量,那么只对偏移量范围内的二进制进行统计
bitop operation dest-key key1 [key2 ...] 对一个或者多个二进制串执行包括并(AND),或(OR),异或(XOR),非(NOT)在内的任意一种按位运算操作并将结果保存在dest-key中
setnx key value,将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作
setex key seconds value,将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。
如果 key 已经存在, setex 命令将覆写旧值
如果 key 已经存在, setex 命令将覆写旧值
字符串,整数,浮点数
集合(SET)
不含重复元素
无序
操作指令
sadd key item [item ...],将一个或者多个元素添加到集合里面,并返回添加元素中原本并不存在于集合中的元素数量
srem key item [item ...],从集合里面移除一个或者多个元素,并返回被移除的元素数量
sismember key item,检查元素item是否存在于集合key里面
scard key,返回集合key中包含的元素数量
smembers key ,返回集合key中包含的所有元素
srandmember key [count],从集合中随机返回一个或者多个元素,当count为正数时,返回的随机元素不会重复,当为负数时,可能会重复,返回数量为count的绝对值
spop key,随机的移除集合中的一个元素,返回被移除的元素
smove source-key dest-key item ,如果集合source-key包含元素item,那么从集合source-key里面移除元素,并将元素item添加到集合dest-key中,如果item被成功移除,那么命令返回1,否则返回0
sdiff key [key1 ...],返回存在于第一个集合,但不存在在其他集合的元素(差集)
sdiffstore dest-key key1 [key2 ...],将存在于key1但不存在于其他集合的元素存储在dest-key里面
sinter key1 [key2 ...],返回所有集合的交集元素
sinterstore dest-key key1 [key2 ...],返回所有集合的交集元素并存储到dest-key中
sunion key1 [key2 ...],返回所有存在集合的并集
sunionstore dest-key key1 [key2 ...],返回所有存在集合的并集,并存储到dest-key中
可组合和关联多个集合
散列(HASH)
操作指令
hset key key1 value,设置散列key,键值对为key1-vlaue,返回1表示散列key中不存在该键值对,返回0表示已存在该键值对
hget key key1,从散列key中获取key1的value值
hgetall key,返回散列key中所以键值对
hdel key key1 [key2 ...],删除散列key中的一个或者多个键值对。返回正整数表示删除的键值对数量,返回0表示该键值对不存在散列中
hmset key key1 [key2 ..],从散列key中获取一个或者多个key的值
hmset key key1 value1 [key2 value2 ...],为散列key添加一个或者多个键值对
hlen key,返回散列包含的键值对数量
hexists key1 key,检查给定的key1键是否存在散列中
hkeys key,获取散列所有键
hvals key,获取散列所有值
hgetall,获取散列所有键值对
hincrby key key1 increment,将键key存储的值加上整数increment
hincrbyfloat key key1 increment,将键key存储的值加上浮点数increment
键值对
有序集合(ZSET)
值能带权值的集合
操作指令
zadd key score member [score member ...],将带有给定分值得成员添加到有序集合中
zrem key member [member ...],从有序集合里面移除给定的成员,并返回被移除成员的数量
zcard key,返回有序集合的成员数量
zincrby key increment member,将member的成员分值加上increment
zcount key min max,返回分值介于min和max之间的成员数量
zrank key member,返回成员member在有序集合中排名
zscore, key member,返回成员member的分值
zrange key start stop [WITHSCORES],返回有序集合中排名介于start和stop之间的成员,如果设置了withscores=true,则将成员的分值一起返回
...
列表(LIST)
可以包含重复元素
操作指令
rpush key value [value ...],将一个或者多个值推入列表的右端
lpush key value [value ...],将一个或者多个值推入列表的左端
rpop key,移除并返回元素最右端的元素
lpop key,移除并返回元素最左端的元素
lindex key offset,返回列表中偏移量为offset的元素
lrange key start end,返回列表从start偏移量道end偏移量范围内所有元素,包含start和end在内的元素,end可以为负数,表示从list的最右端开始的偏移量
ltrim key start end,对列表修剪,只保留从start到end范围内的元素
blpop key [key1 ... ] timeout,从第一个非空列表中弹出最左端的元素,或者在timeout秒之内阻塞并且等待可弹得元素出现
brpop key [key1 ]timeout,从第一个非空列表中弹出最右端的元素,或者在timeout秒之内阻塞并且等待可弹得元素出现
rpoplpush source-key dest-key,从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并返回这个元素
lpoprpush source-key dest-key,从source-key列表中弹出位于最左端的元素,然后将这个元素推入dest-key列表的最右端,并返回这个元素
过期时间
redis可以给键设定一个生存时间(time to live),或者过期时间(expire),redis会在键到达这个时间点时,会删除这个键
操作指令
复制
当服务器连接主服务器时,主服务器会执行BGSAVE操作,为了正确使用复制性,用户需要保证主服务器已经正确设置了dir和dbfilename选项,且都是可写的
开启从服务器选项只有slaveof,如果redis启动时配置文件包含slaveof host port选项的,就会根据该选项的ip地址和端口号来连接主服务器,对于一个正在运行的redis服务器,用户可以通过发送slaveof no one命令来让服务器终止复制操作,不在接受主服务器的数据更新。
不支持主主复制
最好让主服务器只使用50%~65%的内存,留下30%~45%的内存用于执行BGSAVE命令和创建记录写命令的缓冲区
0 条评论
下一页