## 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常见性能问题和解决方案