跳到主要内容

Redis数据结构

· 阅读需 1 分钟
flankx
作者

5种基础数据结构

  • String字符串
  • List列表
  • Set集合
  • Hash散列
  • Zset有序集合

3种特殊数据结构

  • HyperLogLogs基数统计
  • Bitmap位存储
  • Geospatial地理位置

Redis 淘汰机制

· 阅读需 2 分钟
flankx
作者

Redis提供6种数据淘汰策略

  1. volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  2. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  3. volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  4. allkeys-lru(least recently used):当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)
  5. allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  6. no-eviction:禁止驱逐数据,也就是说当内存不足以容纳新写入数据时,新写入操作会报错。这个应该没人使用吧! 4.0 版本后增加以下两种:
  7. volatile-lfu(least frequently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰
  8. allkeys-lfu(least frequently used):当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的 key

Redis持久化机制

  1. RDB快照
  2. AOF只追加文件

锁的状态

· 阅读需 1 分钟
flankx
作者

锁状态:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级

Alt text

各种锁的比较

Alt text

synchronized & ReentrantLock 区别

· 阅读需 1 分钟
flankx
作者
类别synchronizedReentrantLock
存在层次Java的关键字,JVM层面是一个类
锁的释放1.以获取锁的线程执行同步代码,释放锁 2.线程执行发生一次,JVM会让线程释放锁在finally中必须释放锁,不然容易造成线程死锁
锁的获取加锁A线程获得锁,B线程等待,如果A阻塞,B线程会一直等待分情况而定,Lock有多种锁的获取方式 condition
锁状态无法判断可以判断
锁类型可重入,不可判断,非公平可重入,可判断,可公平
性能少量同步大量同步