特点
非可靠的非关系型数据库
提供数据结构服务
使用方法
Key的设置
incr NUM:count:pv:bac.com/a/123:2019:07:01
key最好可视性好
NUM 数据类
count 技术
pv 干什么的
2019:07:01 时间
对象存储
hmset H:cache:userinfo:105 username qer nicnamne error404 sex 1 age 18
undefined
hgetall H:cache:userinfo:105
Redis的集合
-
set
-
zset
-
消息队列,只能发送字符消息,
案例
PV的统计
incr NUM:count:pv:bac.com/a/123:2019:07:01
key最好可视性好
NUM 数据类
count 技术
pv 干什么的
2019:07:01 时间
在Web入口使用
设置实时关注的东西比较适合redis,
但最好每天取出数据进行校准和持久化
月活
一个软件中每个用户一个月使用的天数
undefined
incr NUM:count:pv:bac.com/a/123:2019:07:01
undefined
bitcount BIT:count:MAU:guid:105:2019:07
订票(电影订票问题)
通过位图来表示座位
通过不同位图的组合表示座位的状态
当天销售额的统计也可以通过redis来做
缓存-触发式更新机制
一旦有数据更新,优先插入数据库,生效后放入redis
先查redis再查数据库
秒杀场景
-
消息队列->并行转串行,大部分电商解决方案,先排队,后处理,处理结果通过SSE提示,需要搭建SSE,消息中间件
-
低成本redis的list形式,将秒杀的货物放入list中(lpush),有人秒杀,则pop,pop失败则表示秒杀失败
解决高插入场景的分页查询问题
在分页查询时,点击下一页后,插入数据,查询结果可能还是包含旧结果或是引发逻辑混乱
解决方案
-
先进行查询,再进行查询前先把插入数据数据offset(需要先count)移动一下(但在count时可能还有数据插入,所以在大量插入时还是可能出现这个问题)(BAD)
-
查询加入时间戳(BAD)
- 但毫秒级的时间戳还是可能存在大量数据插入也无法解决
-
采用缓存为每个用户存储其查询数据,再在查询结果中进行分页(OK)
-
倒序查找(逆序输出)分页处理(关系型数据库的解决)(OK)
-
利用Redis存储要查询数据的ID【以Redis作为索引,没有ES或mongodb的情况下】,查询出的数据放入Redis,rpush加入数据,Lrange取出对应数据。lrang key llen-x llen(OK)