Redis基础
1. 数据类型及基本操作指令
- String
- Hash
- List
- Set
- Zset
String操作
基础指令
incr指令
用途:分布式ID、计数器
setnx 如果不存在则存入,否则存入失败
- 用途:锁(互斥标志)
- 问题:如果并发了怎么办?不会存在并发,因为命令执行是单线程,只要能保证抢标记
场景
- 缓存,存储session
- 分布式锁,单线程
- 计数器,分布式ID
- 问题:死锁(锁 必须得有 有效期)
// 伪代码 if(set) // 拿到锁 { .... // 系统挂了 // 设置过期时间 该处逻辑不会被执行 }
Hash操作
List 操作
- 基础指令
- 特点:有序的、元素可以重复的集合
- 场景:消息队列(比如:blpop),不建议使用,作为消息队列没有任何回应,Redis AP模式,数据可靠性不
说明:
AP模式:优先保证可用性
CP模式:优先保证数据一致性
一致性(Consistency) (等同于所有节点访问同一份最新的数据副本)
可用性(Availability)(每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据)
分区容错性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择)Set操作
- 基础指令
- 特点:无序的、元素不可以重复的集合
- 场景:
- 抽奖 随机弹出(移除[SPOP]和不移除奖池[SRANDMEMBER])
- 交集、差集、并集
- 点赞
ZSet操作
- 基础指令
- 特点:有序的、元素不可以重复的集合
- 排序:如果score相同,用key的ASCII码排序
- 场景:排行榜