Redis总结

Reids的数据结构

数据类型 存储的值 常见操作
STRING 字符串、整数、浮点数 GET,SET
LIST 一个链表,每个节点一个字符串 RPUSH/LPUSH,LRANGE,LINDEX,LPOP/RPOP
SET 包含字符串的无序收集器 SADD,SMEMBERS,SISMEMBER,SREM
HASH 无序散列表,并不支持嵌套 HSET,HGET,HGETALL,HDEL
ZSET member和score之间的有序映射,排列顺序由分值决定 ZADD,ZRANGE,ZRANG,ZREM

下面介绍每种数据类型的操作:

STRING操作

操作 参数 解释
INCR key-name 加一,注意这是原子操作
DECR key-name 减一,这也是原子操作
INCRBY key-name amount 加上整数amount
DECRBY key-name amount 减去整数amount
INCRBYFLOAT key-name amount 加上浮点数amount

其中还有字串和位处理的方法:

操作 参数 解释
APPEND key-name value 将value追加到存储的值的末尾
GETRANGE key-name start 获取由偏移量[start,end]的字串
SETRANGE key-name offset value 将offset偏移量开始的字串设定为指定值
GETBIT key-name offset 返回偏移量为offset的二进制位的值
SETBIT key-name offset value 将偏移量为offset的二进制位设为value
BITCOUNT key-name [start end] 返回[start end]范围内二进制值为1的数量
BITOP [AND OR XOR NOT] dest-key key-name [key-names ..] 对key-names进行位操作

LIST操作

操作 参数 解释
RPUSH key-name value [value…] 将一个或多个值推入右端
LPUSH key-name value [value…] 将一个或多个值推入左端
RPOP key-name 移除并返回最右端元素
LPOP key-name 移除并返回最左端元素
LINDEX key-name offset 返回偏移量为offset的元素
LRANGE key-name start end 返回[start,end]
LTRIM key-name start end 对列表进行修建,返回[start,end]

LIST还提供了阻塞式的弹出命令:

操作 参数 解释
BLPOP key-name [key-names…] timeout 弹出最左边的元素,或者阻塞timeout的时间用于等待
BRPOP key-name [key-names…] timeout 从第一个非空列表中弹出位于最右端的元素,或者等待timeout
RPOPLPUSH source-key dest-key 从source-key弹出最右端的元素,并推入dest-key最左端,并返回这个元素
BRPOPLPUSH source-key dest-key timeout 从source-key弹出最右端的元素,并推入dest-key最左端,并返回这个元素,如果不存在将等待timeout时间

集合

操作 参数 解释
SADD key-name item [items…] 将一个或者多个元素加入集合,返回本来不在集合中的元素
SREM key-name item [items…] 移除一个或者多个元素,并返回被移除元素数量
SISMEMBER key-name item 检查该元素是否位于集合
SMEMBERS key-name 返回包含的所有元素
SCARD key-name 返回该集合数量
SRANDMEMBER key-name [count] 随机返回count数量的元素,如果count为负数,那么返回的元素可能重复
SPOP key-name 随机的移除一个元素
SMOVE source-key dest-key item 如果集合source-key包含元素item,那么从source-key移除该元素,并添加至dest-key

用于处理多个集合的操作

操作 参数 解释
SDIFF key-name [key-names…] key-name出现,但key-names未出现的元素
SDIFFSTORE dest-key key-name [key-names…] 相当于将上面的结果存入dest-key中
SINTER key-name [key-names…] 返回存在于所有集合中的元素(交集运算)
SINTERSTORE dest-key key-name [key-names…] 将交集的结果存入dest-key中
SUNION key-name [key-names…] 求并集
SUNION dest-key key-name [key-names…] 求并集,并将结果存于dest-key中

其他常用命令:

散列

操作 参数 解释
HMEGT key-name key [keys…] 获取一个或者多个键的值
HMSET key-name key value [key value] 设置一个或者多对键值
HDEL key-name key [keys…] 删除散列中多个键值对
HLEN key-name 返回包含的键值对数量
HEXISTS key-name key 检查给定键是否存在于散列中
HKEYS key-name 所有包含的键
HVALS key-name 所有包含的值
HGETALL key-name 包含的所有键值对
HINCRBY key-name key increment 将key存储的值加上increment
HINCRBYFLOAT key-name key increment 将key存储的值加上浮点数increment

有序集合

操作 参数 解释
ZADD key-name score member[score member…] 添加给定分值的成员进入有序集合
ZREM key-name member [members…] 从有序集合里移除给定成员
ZCARD key-name 返回有序集合包含的成员数量
ZINCRBY key-name increment member 在member成员的分值上加上increment
ZCOUNT key-name min max 分值介于min和max的成员数
ZRANK key-name member 返回成员member在有序集合中的排名
ZREVRANK key-name member 返回有序集合里成员member的排名,逆序返回
ZRANGE key-name start stop [WITHSCORES] 返回[start,stop]之间的成员,如果指定了withscore,那么会将成员分支一并返回
ZREVRANGE key-name start stop [WITHSCORES] 返回有序集合给定排名范围内的成员,逆序返回
ZSCORE key-name member 返回成员member的分值

与Score有关系的获取、删除、并与交

操作 参数 解释
ZRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count] 返回分值介于min和max之间的所有成员
ZREVRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count] 返回分值介于min和max之间的所有成员,逆序返回
ZREMRANGEBYRANK key-name start stop 返回介于start和stop之间的所有成员
ZREMRANGEBYSCORE ke-name min max 介于min和max之间的所有成员
ZINTERSTORE dest-key key-count key [keys…] [WEIGHTS weight[weight…]] [AGGREGATE SUM|MIN|MAX] 类似于集合的交集运算
ZUNIONSTORE dest-key key-count key [keys…] [WEIGHTS weight[weight…]] [AGGREGATE SUM|MIN|MAX] 类似于集合的并集运算

其他常用命令

命令 用例 描述
EXPIRE key-name timestamp 用于设置过期时间
SORT source-key 排序
TTL key-name 查看还有多久过期

发布与订阅

命令 用例 描述
SUBSCRIBE SUBSCRIBE channel [channel…] 订阅给定的一个或者多个频道
UNSUBSCRIBE UNSUBSCRIBE channel [channel…] 退订指定频道
PUBLISH PUBLISH channel message 向给定频道发送消息
PSUBSCRIBE PSUBSCRIBE pattern [pattern…] 订阅模式匹配的所有频道
PUNSUBSCRIBE PUBSUBSCRIBE pattern [pattern…] 退订给定模式

主从复制

通过SLAVEOF host port命令,可以让服务器开始复制一个新的主服务器,他们的过程如下

步骤 主服务器操作 从服务器操作
1 (等待命令进入) 连接(或者重连接)主服务器,发送SYNC命令
2 开始执行BGSAVE,并使用缓冲器记录BGSAVE之后执行的所有写命令 根据配置选项决定使用现有数据,还是相发送请求的客户端返回错误
3 BGSAVE执行完毕,向服务器发送快照文件,并在发送期间继续使用缓冲区记录被执行的写命令 丢弃所有旧数据,开始载入主服务器发来的快照文件
4 快照文件发送完毕,开始向从服务器发送存储在缓冲区里面的写命令 完成对快照文件的解释操作,之后开始接受命令请求
5 缓冲区的写命令发送完毕,从现在每执行一个写命令,就向服务器发送相同的写命令 执行主服务器发送来的所有存储在缓冲区的写命令;从现在开始,接受并执行主服务器传来的每一个写命令

需要注意的是Redis不支持主主复制
当多个从服务器连接主服务器时,如果步骤3尚未执行,那么所有的从服务器都会接收到相同的快照文件和相同的缓冲区写命令,否则将对每一个从服务器进行步骤1-5的连接

Redis持久化方式

两种:快照、只追加文件(AOF)
快照:通过快照可以得到内存里里面的数据在某个时间点上的副本,一般通过BGSAVE命令来创建一个快照
AOF:AOF持久化会将被执行的写命令写到AOF文件的末尾,以此来记录发生的变化,主要用于数据恢复,通过appendonly yes配置来打开

批量操作

通过”流水线方式“

事务支持

由MULTI命令和EXEC命令支持,作用是移除竞争条件和提高性能,其中提高性能的原因是通过一次发送所有消息,来减少通信时的网络延迟。其中可以通过使用watch对某个数据结构进行监听,如果发生了改变,就会报错,watch这种方法属于典型的乐观锁

分布式锁

SETNX命令天生就适合用于实现锁的功能,锁所要做的就是将一个随机生成的128位UUID设置为键的值,为了放置程序崩溃之后锁能够被自动释放,应该通过EXPIRE命令对锁设置过期时间。

降低内存占用

降低内存占用有诸多好处,除了存储更多的数据之外还可以:

  • 减少创建快照和加载快照所需要的时间
  • 提升载入AOF和重写AOF文件的效率
  • 缩短从服务器同步所需要的时间

压缩列表:对于列表来说,就是通过将双向链表的数据结构,转化为一个值表示前一个字符串的长度,一个值表示当前字符串长度,然后还有当前字符串
集合的整数集合编码:该编码有三个前提:1.整数包含的所有成员都可以被解释为十进制整数、2.所有整数都处于有符号整数范围之内、3.集合成员数量小于配置的数量。整数集合降低内存占用的代价就是每一次插入数据都有可能对数据进行移动。

你可能感兴趣的:(Redis实战)