String
场景:用的太多
set/get
mset/mget(批量设置值)
List(双向列表)
场景:微博/公众号 消息流 用阻塞队列
栈 (lpush lpop): 左进左出
队列(lpush rpop):先进先出
阻塞队列(lpush ,BRPOP)
lpush key: 左进 rpush key: 右进: lpop key 左出 rpop key: 右出
lrange key strat end 按下标取集合
Hash
场景:购物车
eg:
添加商品( hset key filed value ): hset cart:uid goodsId goodNum
增加商品数量( hincrby key filed value ): hincrby cart:uid goodsId 1
增加商品数量(hlen key): hlen cart:uid
删除商品(hdel key filed): hdel cart:uid goodsId
获取所有商品 (hgetall key): hgetall cart:uid
优点:数据归类,方便管理
相比string消耗内存和cpu较小,比string节省空间
缺点:过期功能不能使用在filed,只能在key 上
redis 集群上不太适合使用
Set
场景:
抽奖小程序:
eg: 参与抽奖(sadd key member) : sadd 抽奖key userId
查看抽奖人员列表( smembers key): smembers 抽奖key
抽取n个中奖人数(srandmember key count ): smember抽奖key 2
抽取n个中奖人数,并剔除抽中的人(stop key count ): stop 抽奖key 2
动态点赞,收藏:
eg: 点赞(sadd key filed) : sadd 动态key userId
取消点赞(srem key filed ):srem 动态key userId
是否点赞(sismember):sismember 动态key userId
获取点赞人(smembers key) smembers 动态key
获取点赞人数(scard key ):scard key
关注关系(微博,交集,差集,合集,差集)
eg: 共同关注的人,交集(sinter set1 set2 set3 ....)
合集 : sunion set 1 set2
可能认识的人差集: sdiff set 1 set2 set 3
我关注的人怎样关注他: sismember set1 key
zset
场景: 排行榜
点击新闻加1: zincrby 排行榜 key 1
展示当日排行 前十: zrevrange key 0 ,10
七日排行前十: zrevrange key
setnx
场景: 分布式锁
setnx+ expire
incry
场景:计数器
BitMap
(位图)
位图的key必须是数值类型,修改value 的 二进制数据 setbit key 1000(index) 1,位图长度可以自动扩容
场景:
布隆过滤器 解决缓存 穿透问题
缺点:能删除,需要定时重建布隆过滤器