study/java/redis.md

1.8 KiB
Raw Blame History

redis 复习

redis 特点

  1. 速度快因为数据存在内存中类似于HashMapHashMap的优势就是查找和操作的时间复杂度都是O(1)
  2. 支持丰富数据类型支持stringlistsetsorted sethash
  3. 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
  • Multi-开启一个事务
  • exec-负责触发并执行事务中的所有命令
  1. 丰富的特性可用于缓存消息按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常见性能问题和解决方案