1.数据结构及应用场景
1. String
- SET key value :存入字符串键值对
- MSET key value [key value …] :批量存储字符串键值对
- SETNX key value :只在键 key 不存在的情况下,将键 key 的值设置为 value 。若键 key 已经存在, 则 SETNX 命令不做任何动作。
- GET key :获取一个字符串键值
- MGET key [key …] :批量获取字符串键值
- DEL key [key …] :删除一个键
- EXPIRE key seconds :设置一个键的过期时间(秒)
1.1 常用操作
- INCR key :将key中储存的数字值加1
- DECR key :将key中储存的数字值减1
- INCRBY key increment :将key所储存的值加上increment
- DECRBY key decrement :将key所储存的值减去decrement
1.2 分布式锁
- SETNX Key true :返回 1 代表获取锁成功
- SETNX Key true :返回 0 代表获取锁失败
- DEL Key :执行完业务释放锁
- SET Key true ex 10 nx :设置时间,防止程序意外终止导致死锁
1.3 计数器
- INCR Key:key加一
- GET Key:获取key的计数的数量
1.4 spring session + redis实现session共享
1.5 分布式系统全局序列号
- INCRBY ID 500 : 批量成序列号提升性能
2.Hash
- HSET key field value : 存储一个哈希表key的键值
- HSETNX key field value:当且仅当域 field 尚未存在于哈希表的情况下, 将它的值设置为 value 。如果给定域已经存在于哈希表当中, 那么命令将放弃执行设置操作。如果哈希表 hash 不存在, 那么一个新的哈希表将被创建并执行 HSETNX 命令
- HMSET key field value [field value …] :在一个哈希表key中存储多个键值对
- HGET key field :获取哈希表key对应的field键值
- HMGET key field [field …] :批量获取哈希表key中多个field键值
- HDEL key field [field …] :删除哈希表key中的field键值
- HLEN key:返回哈希表key中field的数量
- HGETALL key :返回哈希表key中所有的键值
- HINCRBY key field increment :为哈希表key中field键的值加上增量increment
3.List
- LPUSH key value [value …]:将一个或多个值value插入到key列表的表头(最左边)
- RPUSH key value [value …]:将一个或多个值value插入到key列表的表尾(最右边)
- LPOP key:移除并返回key列表的头元素
- RPOP key:移除并返回key列表的尾元素
- LRANGE key start stop :返回列表key中指定区间内的元素,区间以偏移量start和stop指定
- BLPOP key [key …] timeout :从key列表表头弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待
- BRPOP key [key …] timeout :从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如timeout=0,一直阻塞等待
3.1 可以实现的数据结构
- Stack(栈) = LPUSH + LPOP
- Queue(队列)= LPUSH + RPOP
- Blocking MQ(阻塞队列)= LPUSH + BRPOP
3.2 适用场景
LRANGE key start stop 实现微博和微信公号消息流
例:小明关注大V,大V发消息后,该消息ID为001
以key为msgID:001,value为001消息内容进行操作
lpush msgID:小明 001
小明查看最新消息:
lrange msgID:小明 0 5
4.Set
- SADD key member [member …]:往集合key中存入元素,元素存在则忽略,若key不存在则新建
- SREM key member [member …] :从集合key中删除元素
- SMEMBERS key :获取集合key中所有元素
- SCARD key :获取集合key的元素个数
- SISMEMBER key member:判断member元素是否存在于集合key中
- SRANDMEMBER key [count]:从集合key中选出count个元素,元素不从key中删除
- SPOP key [count] :从集合key中选出count个元素,元素从key中删除
4.1 常用操作
- SINTER key [key …] :交集运算
- SINTERSTORE destination key [key …]:将交集结果存入新集合destination中
- SUNION key [key …] :并集运算
- SUNIONSTORE destination key [key …] :将并集结果存入新集合destination中
- SDIFF key [key …] :差集运算
- SDIFFSTORE destination key [key …] :将差集结果存入新集合destination中
4.2 应用场景
① 抽奖
参与抽奖:SADD key {userlD}
查看参与抽奖所有用户:SMEMBERS key
抽取count名中奖者:SRANDMEMBER key [count] / SPOP key [count]
② 点赞,收藏功能的实现
点赞:SADD 消息ID {用户ID}
取消点赞:SREM 消息ID {用户ID}
检查用户是否点过赞:SISMEMBER 消息ID {用户ID}
获取点赞的用户列表:SMEMBERS 消息ID
获取点赞用户数:SCARD 消息ID
③关注模型
小明关注的人:MingSet === {A,B}
小红关注的人:HongSet === {A,B,C,D}
小白关注的人:BaiSet === {A,C,E,F,G}
小明和小红关注的人:SINTER MingSet HongSet === {A,B}
小明可能认识的人:SDIFF HongSet MingSet === {C,D}
5. ZSet
- ZADD key score member [[score member]…] :往有序集合key中加入带分值元素
- ZREM key member [member …] :从有序集合key中删除元素
- ZSCORE key member :返回有序集合key中元素member的分值
- ZINCRBY key increment member:为有序集合key中元素member的分值加上increment
- ZCARD key :返回有序集合key中元素个数
- ZRANGE key start stop [WITHSCORES] : 正序获取有序集合key从start下标到stop下标的元素
- ZREVRANGE key start stop [WITHSCORES] :倒序获取有序集合key从start下标到stop下标的元素
5.1 常用操作
- ZUNIONSTORE destkey numkeys key [key …] :并集计算
- ZINTERSTORE destkey numkeys key [key …] :交集计算
5.2 适用场景
点击新闻:ZINCRBY NewId 1 News
展示当日排行前十:ZREVRANGE NewId 0 9 WITHSCORES
七日搜索榜单计算:ZUNIONSTORE NewId20190813-20190819 7 NewId20190813 NewId:20190814… NewId20190819
展示七日排行前十:ZREVRANGE NewId20190813-20190819 0 9 WITHSCORES