Redis个人学习总结
Redis学习
Redis(缓存、分布式锁、支持高并发、限流、过滤、集群)
1. redis是单线程结构、支持高并发;
(1) 优点:基于内存操作,多路IO复用(IO:可高校处理多链接请求,支持高并发,减少网络IO的消耗时间)
(2) 缺点:无法发挥多核CPU性能(解决:通过在单机开多个redis实例完善)
2. Redis五种数据结构;
(1) String
(2) List
(3) Hash
(4) Set(集合)
(5) Zset(有序集合)
注释:字符串最大长度512MB,(list、hash、set、zset属于容器型数据结构),采用预分配冗余空间方式来减少内存频繁分配
3. 布隆过滤器;
(1) 高并发去重、节省空间
(2) 注意:initial_size 设置过大,浪费空间。设置过小,影响准确率
4. 持久化(主节点不进行持久化,从节点备份)
(1) 快照(全量备份;通过开启子程序进行,遍历整个内存,大块写入磁盘,加重系统负载;缺点:耗资源)
(2) AOF日志(连续增量备份,只记录对内存进行修改的指令记录;fsync耗时的IO操作,降低redis性能,增加系统IO负担)
(3) 混合持久化(4.0特性)
5. 限流
(1) 漏斗限流(Redis_Cell模块,漏斗算法
6. GeoHash(地理位置,附近)
7. 内存回收机制(默认策略:noeviction策略;maxmemory-policy volatile-lru)
(1) volatile-lru -> 根据LRU算法删除设置了超时属性(expire)的键,直到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略。
(2) allkeys-lru -> 根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。
(3) volatile-lfu -> 根据LFU算法删除设置了超时属性(expire)的键,直到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略。
(4) allkeys-lfu -> 根据LFU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。
(5) volatile-random -> 随机删除过期键,直到腾出足够空间为止。
(6) allkeys-random -> 随机删除所有键,直到腾出足够空间为止。
(7) volatile-ttl -> 根据键值对象的ttl属性,删除最近将要过期数据。如果没有,回退到noeviction策略。
(8) noeviction -> 不会删除任何数据,拒绝所有写入操作并返回客户端错误信息,此时Redis只响应读操作。
8. 集群
(1) 主从机制(主从同步、从从同步)
(2) Sentinel哨兵模式(实现自动故障切换。提供稳定的服务)