- string
1.单值缓存
2.分布式(不推荐)
3.计数器 - hash
key value(key:value)结构
1.对象缓存
2.电商购物车
优于string,但分布式不适合大量使用 - list
左右push(加) 和pop(取)
stack =lpush+lpop=fifo
queue=lpush=rpop
bkmq=lp+bp(阻塞拿)
1.微博和微信公众号信息流
方式一(push): 不用排序
用户的list集合中塞信息LRANGE msg:{userid} 0 4 查看最新微博信息
问题:
大V 很多粉丝 可能问题比较大,粉少的可用
可优化,先给在线的用户发送,再给离线的用户发送(或者在线再发送)
方式二(pull):要再排序
大V专门一个队列,其它用户上线从其中拿,后面排序
-
set
1.交并差集计算
2.微信抽奖小程序
3.微信微博点赞,收藏,标签
4.集合操作实现微博微信关注模型
5.电商商品筛选 -
zset (有序集合)
1.跟set一样的操作之类
2.排行榜
redis的高性能:
Redis是单线程吗?
不是,单线程指对redis网络IO和键值对读写(命令)是由一个线程来执行,其它由额外线程执行。
为什么那么快?
数据在内存中
Redis单线程如何处理多并发客户端?
keys:all(不建议使用)
scan:渐进式(不一定)
持久化
一.RDB快照
当达到策略条件时,将数据持久化到rdb文件里面。
save 控制
dir rdb文件的地址 文件名:dump.rdb
bgsave的写时复制(COW)机制
save:同步
bgsave:异步
体积小,恢复快
问题:可能会丢数据
二.AOF
当进行操作时,记录修改的命令
appendonly yes (开启)
appendfsync everysec:每秒fsync一次(推荐)
体积大,恢复慢,安全性高
问题:执行时间很长,命令很大,恢复很难
优化;
AOF重写,根据内存生成AOF文件
三.AOF And RDB
两种都开启的话默认使用AOF恢复
开启混合持久化
4.0版本后
先开启AOF持久化后
aof-use-rdb-preamble yes
会两种方式混合保存