首页 > 其他 > 详细

redis学习汇总

时间:2020-02-16 21:29:02      阅读:59      评论:0      收藏:0      [点我收藏+]

20200216更新

一、redis是开源的,基于内存的键值数据存储,用作数据库(键值对数据库)、缓存、消息代理

性能:执行耗时久且结果不经常变动的sql,将结果放进缓存。

并发:redis缓存作为缓冲,支持高性能的主从复制的集群策略

分布式锁功能可用其他中间件替代(如zookeeper)

redis五种主要的数据类型:String、Hash、list、set、sortedSet有序集合

redis的架构模式

(1)单机版:多个客户端对应一个redis服务器,特点是简单,但是内存容量有限,处理能力有限,无法高可用;

(2)主从复制:多个从redis服务器从一个主redis服务器拷贝数据,多个客户端从从redis服务器get数据(也可从主redis服务器get)

  优点:用户从主redis服务器复制多个从redis服务器,两者数据相同,主服务器更新数据到从服务器,降低了主服务器的读压力,再转交从库

  缺点:未解决主服务器的写压力

(3)哨兵

(4)集群(proxy型)

二、使用redis有什么缺点?

1、缓存与DB双写一致性问题

  (1)有强一致性要求的数据,不能放缓存

  (2)采取正确更新策略,先更新DB再删缓存,删缓存失败可提供补偿,用消息队列

2、缓存雪崩:即缓存在同一时间大面积失效,这时来了一拨请求,全怼到DB上导致DB连接异常

  解决办法就是,给缓存的失效时间加一个随机值,避免集体失效

3、缓存穿透:即请求缓存中不存在的数据,导致所有请求到DB上,从而DB连接异常

三、单线程redis为什么这么快?

redis是单线程工作模型。快的原因是1 纯内存操作  2、单线程操作,避免经常的上下文切换  3、采用非阻塞I/O多路复用机制

四、redis的过期策略及内存淘汰机制

redis采用定期删除+惰性删除策略

 

 

阿里云redis开发规范解读

-------开始-----

1、key命名设计:可读性、可管理性、简洁性

  规范建议使用冒号进行分割拼接,因为很多redis客户端是根据冒号分类的:   apps:app:1、apps:app:2、apps:app:3

2、value设计:拒绝bigkey

  规范建议String类型的value控制在10kb范围内,因为redis随着value不断增长,在超过10kb后,性能明显下降

3、控制key的生命周期:设定过期时间

  尽可能对每个Key都设置过期时间

4、时间复杂度为O(n)的命令需要注意N的数量

  以list为例,元素数量越多,命令的性能越差,而redis 是单线程的,若出现一个慢命令,会导致之后的命令耗时增长。这也是jdk1.8对hashmap进行链条冲突优化:当entry数量不少于64时,如果冲突链表长度达到8,会将其转化为红黑树,因为链表长度越长,性能越差。

5、禁用命令:KEYS、FLUSHDB、FLUSHALL等

  这些命令在搭建redis环境的时候就应该禁用掉(在config配置文件中通过rename-command禁用)。

  FLUSHDB、FLUSHALL这两个命令是会删库数据的

6、推荐使用批量操作提升操作效率

  批量命令包括原生命令(mget、mset、hmget、hmset、LPUSH key value)、非原生命令(Pipeline)

7、monitor命令控制使用时间

  monitor命令一般是用来观察redis服务端都在执行哪些命令并实时输出。规范建议控制monitor命令的使用时间,是因为随着monitor命令的执行时间越长,越多数据积压在输出缓冲区,从而导致输出缓冲区占用内存越来越大

-----结束-----

 

redis学习汇总

原文:https://www.cnblogs.com/blackdd/p/12089184.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!