基础知识
1 QPS:并发10万/s
基本数据机构
基本数据机构:string hash list set zset
一 string
单值缓存
set key value
get key对象缓存
- set user:1 value(json 格式)
-
MSET user:1:name zhuge user:1:balance 10000
MGET user:1:name user:1:balance
字符mset-mget.png
总结:以上两种方式区别:修改单个值用第二种方法更快而且更容易
分布式锁
解释:在多台机器下对同一个资源进行修改,需要保持数据安全
setnx key value(若key相同,则不会对该内容进行修改)
//执行业务操作
del key计数器
例如:文章的浏览量
INCR keyspring session+集群session共享
分布式实现全局序列号
incrby orderId 1000
二 哈希
-
对象缓存
hmset key field1 value field2 value
hmget key field1 field2
哈希hmset-hmget.png - 电商购物车
- 用户id为key
- 商品id 为field
- 商品数量为value
hset cart:1 10088 1
hincrby cart:1 10088 1 +增量
hlen cart:1 商品总数
hdel cart:1 field 删除商品
hgetall cart:1 获取所有商品
哈希优势
- 相比string 消耗内存和cpu小
- 相比string 内存节省空间
劣势 - 超时不能作用在field
- redis集群架构下不适合大规模使用
三 list
- 常用数据结构
- stack = lpush+lpop-》先进后出FILO
- Queue = lpush+rpop->先进先出 FIFO
- blocking queue = lpush+brpop
-
微信或者微博的消息流
lpush msg:userID msgId
lpush msg:userID msgId
查看最新微博消息
Lrange msg:userId start top
list消息流.png
四 集合SET
- 微信抽奖小程序
- 点击参与抽奖加入集合
sadd act:1000 user1
sadd act:1000 user2
sadd act:1000 user3 - 查看所有抽奖用户
smembers key
3.随机抽取几名中奖者
srandmember key count(用户不会在集合中删除)
spop key count(用户会在集合中删除)
- 微信微博点赞收藏标签
- 点赞
sadd like:1001 userid - 取消点赞
srem like:1001 userid
3.查看用户是否点过赞
sismember like:1001 userid - 获取点赞用户列表
smembers like:1001 - 获取点赞用户数
scard like:1001
- 微博微信关注模型
- 我和a共同关注
sinter meSet aSet(去交集) - 我关注的人也关注了a
sismember bSet a - 我可能认识的人
sdiff aSet meSet(基于他人与我关注的差集)
-
根据商品属性选择电商商品
sinter property1 property2(交集)
五 zset(有序集合)
- 排行榜
-
微博热搜
zincrby hotNews:20210626 1 protect hongkong 为某个属性增加1分
zrevrange hotNews:20210626 start top 排名前几
zunionstore destkey numkey key 取并集(取7天浏览量的并集)
Redis 的单线程和高性能
- 单线程性能高的原因:数据操作都在内存里,运算也在内存。同时单线程减少了上下文切换的开销
- redis 多路复用:利用epoll实现多路复用 maxclients(默认10000)