五种常用的数据结构:string、hash、list、set、zset,以及三种不常用的:hyperloglog、geospatial、streams。
1、String键
String keyStr ‘hello’
Number keyNum 54321
Bits keyBit 10110
字符串键常见操作
针对字符串操作
SET key value -存入字符串键
MSET key value [key value] -批量存字符串键
SETNX key value -存入一个不存在的字符串,若存在存储不成功
GET key -获取一个字符串键
MGET key [key] -批量获取字符串键
DEL key [key …](可以不止字符串键) -删除一个键
EXPIRE key seconds(不止字符串键) -设置一个key的过期时间(秒)
PEXPIRE key millseconds(不止字符串键) -设置一个key的过期时间(毫秒)
针对数字操作:
INCRBY key increment -对数字key进行(increment)的增加
DECRBY key decrement -对数字key进行(increment)的减少
INCR key -对数字key自增1
DECR key -对数字key自减1
字符串键的使用场景:分布式锁、计数器、分布式全局序列ID
2、Hash键
针对HASH操作
HSET key field value -存储一个散列键
HSETNX key field value -存储一个不存在的散列键
HMSET key field value [field value …] -在一个key中存储多个field
HGET key field -获取key field的散列键值
HMGET key field [field …] -批量获取key中多个field的值
HDEL key field [field …] -删除散列键key中的field的值
针对数字操作:
HINCRBY key field increment -对key散列中field进行数字操作(increment)
存在的最主要的意义就是:减少内存的占用,原因在于比如对key的过期时间的扫描,只需要扫描第一层key即可
3、List键
LPUSH key value [value …] -往key的列表左边放入一个元素, key不存在则新建
RPUSH key value [value …] -往key的列表右边放入一个元素,key不存在则新建
LPOP key -从key的列表最左边弹出一个元素
RPOP key -从key的列表最右边弹出一个元素
LRANGE key start stop -获取列表从start下标到stop下标的元素
BLPOP key [key …] timeout -阻塞的从key的列表最左边弹出一个元素,若列表中不存在元素,则阻塞等待timeout秒, 若timeout=0,一直阻塞
BRPOP key [key …] timeout -阻塞的从key的列表最右边弹出一个元素,若列表中不存在元素,则阻塞等待timeout秒, 若timeout=0,一直阻塞
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中删除
集合运算操作:
SINTER key [key …] -交集运算
SUNION key [key …] -并集运算
SDIFF key [key] -差集运算
案例基于集合键,实现直播刷礼物、转发参加抽奖活动
SADD key {userID} 刷礼物、转发微博加入到集合中
SMEMBERS key 获取所有用户, 大转盘转起来
SPOP key [count] / SRANDMEMBER key [count] 抽取count名中奖者
可以对用户{userID_*}添加后缀,用来控制用户刷多次礼物
基于集合实现点赞、签到、like等功能
点赞–>SADD like::8001 1001
取消点赞–>SREM like::8001 1001
检查用户是否点过赞–>SISMEMBER like::8001 1001
获取点赞的用户列表–>SMEMBERS like::8001
获取点赞的用户数–> SCARD like::8001
基于集合运算API,实现关注模型(可能认识的人)
seven关注的人: sevenSub–>{‘qing’,’mic’,’james’}
qing关注的人: qingSub–>{‘seven’,’jack’,’mic’,’james’}
mic关注的人: micSub–>{‘seven’,’james’,’qing’,’jack’,’tom’}
seven和qing共同关注的人:SINTER sevenSub qingSub->>{mic,james}
seven关注的人也关注seven: SISMEMBER micSub seven、SISMEMBER jamesSub seven
seven可能关注的人:SDIFF qingSub sevenSub–> {seven,jack}
基于集合运算API,实现电商商品筛选
每个商品入库的时候都会建立它的静态标签,如品牌、尺寸、处理器、内存
SADD brand::lenovo 拯救者y7000P-001 ThinkPad-T480
SADD screensize::15.6 拯救者y7000P-001 机械革命22AIR
SADD processor::i7 拯救者y7000P-001 机械革命X8TIPLUS
SADD memory:8G 拯救者y7000P-001 ThinkPad-T480 机械革命X8TIPLUS 机械革命22AIR
SINTER brand::lenovo screensize::15.7 processor::i7 memory::8G–>拯救者y7000P-001
5、ZSET有序集合,根据元素的ASCII码比较
常见操作:
ZADD key score element […] -让有序集合key中放入元素,若不存在则新建
ZREM key element [element …] -从有序集合key中删除元素
ZSCORE key element -获取有序集合key中element元素的score值
ZINCRBY key increment element -给有序集合key中element元素进行score值操作
若key不存在则新建,element元素不存在则新建后进行score值操作
ZCARD key -获取有序集合key中元素个数
ZRANGE key start stop [WITHSCORES] -正序获取有序集合key从start到stop的元素
ZREVRANGE key start stop [WITHSCORES] -倒序获取有序集合key从start到stop的元素
集合运算:
ZUNIONSTORE destkey numkeys key [key …] -并集计算
ZINTERSTORE destkey numkeys key [key …] -交集计算
基于有序集合ZSET实现单日排行榜
点击新闻
ZINCRBY hotNews::20190128 1 海底捞厕所偷拍
展示排行:
ZREVRANGE hotNews::20190128 0 10 WITHSCORES //倒序取10条,并携带score值,score值作为
搜索值。