Redis数据结构
· 阅读需 1 分钟
Redis提供6种数据淘汰策略volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰allkeys-lru(least recently used):当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰no-eviction:禁止驱逐数据,也就是说当内存不足以容纳新写入数据时,新写入操作会报错。这个应该没人使用吧!
4.0 版本后增加以下两种:volatile-lfu(least frequently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰allkeys-lfu(least frequently used):当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的 keyRedis 缓存击穿、穿透、雪崩等场景的处理方式| 类别 | synchronized | ReentrantLock |
|---|---|---|
| 存在层次 | Java的关键字,JVM层面 | 是一个类 |
| 锁的释放 | 1.以获取锁的线程执行同步代码,释放锁 2.线程执行发生一次,JVM会让线程释放锁 | 在finally中必须释放锁,不然容易造成线程死锁 |
| 锁的获取 | 加锁A线程获得锁,B线程等待,如果A阻塞,B线程会一直等待 | 分情况而定,Lock有多种锁的获取方式 condition |
| 锁状态 | 无法判断 | 可以判断 |
| 锁类型 | 可重入,不可判断,非公平 | 可重入,可判断,可公平 |
| 性能 | 少量同步 | 大量同步 |