目录
一.string类型
- 单值缓存 set key value get key value
- 对象缓存
1. set key value(json 数据格式)
2.批量set mset user_1_name zhuge user_1_balance 1888
mget user_1_name user_1_balance
3.分布式锁
setnx product_1 true //返回1代表加锁成功
set product_1 true // 返回0代表加锁失败
del product_1 //释放锁
更好的写法: set product_1 true ex 10 nx //防止意外导致死锁 加过期时间
4.计数器
比如文章的阅读量
incr article_readcount_文章id
get article_readcount_文章id
5.分布式系统(分库分表)数据库主键id
incrby orderid 100
二.hash 类型
1.对象缓存
hmset user name_1 zhuge balance_1 1888 name_2 yangguo
2.购物车场景
以用户id 为key 比如 cart_1001 这个用户的购物车 以商品id 为field 数量为value
添加耳机(商品id为121) hmset cart_1001 121 1
添加电脑(商品id为122) hmset cart_1001 122 1
给某个商品加数量,比如电脑数量加5 hincrby cart_1001 122 5
获取购物车商品数量 hlen cart_1001
删除购物车某个商品,比如删除耳机这个商品 hdel cart_1001 121
删除购物车全部商品 直接删除这个key del cart_1001
获取购物车全部商品 hgetall cart_1001
三.list 类型
1.常用的数据结构
stack(栈 先进后出) lpush+lpop
queue (队列 先进先出) lpush+rpop
blocking mq(阻塞队列) lpush+brpop 有元素就拿,没有元素一直阻塞等待直到拿出元素
2.微博和微信公众号消息流
时间倒序 最新的消息在最上面
一个用户对应一个list 向这个list lpush消息id
比如一个大V发表了一个微博,向这个大V的粉丝的list 都push 这个消息的id(优化:可以先给在线的用户推送)
四.set类型
1.微信抽奖小程序
参与抽奖:就把用户id加入集合 sadd key userId
参看全部的抽奖用户:smembers key
开奖(抽取count名中奖者):srandmember key count (随机)
开奖的另一种情况(抽取一等奖一名 二等奖二名 三等奖三名): spop key count (与上面的区别是抽出来后会把这个用户id 在集合删掉)
2.微信微博点赞 如果有顺序的话可以用zset
点赞:sadd like_msgId userId
取消点赞:srem like_msgId userId
检查用户是否点过赞:sismember like_msgId userId
获取点赞的用户列表:smembers like_msgId
获取点赞的用户数:scard like_msgId
3.集合操作实现微博微信的关注模型
五.zset 类型 (排序)
1.排行榜 热搜