Redis 知识

Redis与Memcached的区别

  1. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  2. Redis支持数据的备份,即master-slave模式的数据备份。
  3. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
在Redis中,并不是所有的数据都一直存储在内存中的。
这是和Memcached相比一个最大的区别。
Redis只会缓存所有的 key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。
然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。
这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。
同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改。

参考

事件循环:

before sleep(集群检查相关操作)->epollwait->处理请求->定时事件(更新服务器各类信息,比如内存时间、过期key清理、关闭失效链接,rdb和aof)
减少大key,减少耗时命令

逐出:

但内存达到上限,会对key逐出,每次写入前判断,阻塞请求,不是精准逐出

  1. allkey 全部key
  2. 过期key
  3. lru 最近最少
  4. random 随机
  5. ttl 最快过期

关注逐出qps,影响处理性能

过期:

惰性删除(访问前)
定期删除(redis定时任务)

打散key过期时间,避免同时过期

持久化:

  1. rdb(一个时间点写),二进制格式,fork出子进程
  2. aof(持续写),先写buff,再持久化,达到一个阈值,压缩减少文件大小

主从复制

  1. 主从都可以有从节点
  2. 最终一致性

全量同步和部分同步

  1. 主挂了(全量同步)
  2. 从挂了(部分同步)

pipeline和mget的区别:

  1. pipeline在proxy处理完就返回
  2. mget再proxy是全部处理完才返回,取决于最后一次,缺点,proxy内存占用高,key延时高

rc:

  1. 一致性hash,扩容不会迁移key,水平扩容会穿透到db
  2. redis cluster (gossip),两两之间进行同步,如果节点数量非常大,会导致整个集群同步不一致。

缓存型:

延迟删除:多次删除,解决cache和db数据不一致,db主从同步慢,导致cache和db不一致,如果key没有过期时间,就永远不一致了,第二次删除间隔大于主从延迟。
双机房延迟删除:依靠db一致达到cache一致,为了保持两边cache一致。

你可能感兴趣的:(高速缓存)