32 lines
1.8 KiB
Markdown
32 lines
1.8 KiB
Markdown
|
## redis 复习
|
|||
|
|
|||
|
### redis 特点
|
|||
|
1. 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
|
|||
|
2. 支持丰富数据类型,支持string,list,set,sorted set,hash
|
|||
|
3. 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
|
|||
|
- Multi-开启一个事务
|
|||
|
- exec-负责触发并执行事务中的所有命令
|
|||
|
4. 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
|
|||
|
|
|||
|
### redis 提供 6种数据淘汰策略
|
|||
|
- voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
|
|||
|
- volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
|
|||
|
- volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
|
|||
|
- allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
|
|||
|
- allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
|
|||
|
- no-enviction(驱逐):禁止驱逐数据
|
|||
|
|
|||
|
### Redis是单进程单线程的
|
|||
|
redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销
|
|||
|
|
|||
|
### redis的并发竞争问题如何解决
|
|||
|
1. 客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。
|
|||
|
2. 服务器角度,利用setnx实现锁
|
|||
|
- setnx(lockkey, 1) 如果返回0,则说明占位失败;如果返回1,则说明占位成功
|
|||
|
- expire()命令对lockkey设置超时时间,为的是避免死锁问题。
|
|||
|
- 执行完业务代码后,可以通过delete命令删除key
|
|||
|
|
|||
|
### redis常见性能问题和解决方案
|
|||
|
|
|||
|
|