redis
redis的配置详解,常见问题,常见优化,常见用法
文章目录
一、redis基本概念
单线程、内存操作、epoll模型
tips: 为何采用单线程的模式?redis本身操作非常快,多线程的上下文切换代价大于单线程依序执行。如果想让redis更好的利用cpu的多核,可以采用多实例。下面会详细说。
二、redis基本配置
提前说明,因为配置非常多,但是很多都会使用默认的配置,这里只讲线上环境需要调整的参数。
bind 127.0.0.1 192.168.0.1 #绑定,可以指定多个 空格分开,未绑定表示所有主机都可以访问该服务
protected-mode yes # 如果没有设置bind和密码,则只能进行本地访问。
loglevel notice # 类似与php apache等的错误调试日志等级,有四个等级,debug,verbose,notice,warging
logfile "/www/..." # 日志地址
######################################快照################################
## 两种方式
## 1.rdb: 只保存数据,写磁盘,效率,但是容易丢失数据
save 900 1
save 300 10
save 60 10000
## 2、aof: 保存执行的命令,数据安全,但是持久化文件冗余大
appendonly yes
######################################数据同步################################
######################################安全相关################################
requirepass 123456 #设置密码
################################### 内存管理 ####################################
maxmemory 3072mb # 最大的内存,超过之后会启动内存回收策略
1、volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据。
2、volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。
3、volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。
4、allkeys-lru:使用LRU算法从所有数据集合中淘汰数据。
5、allkeys-random:从数据集合中任意选择数据淘汰
6、no-enviction:禁止淘汰数据
# lru算法:最近最少算法。
#总结来说 :一般都是选择 2 和 1, 原因下面详解
maxmemory-policy volatile-ttl
三、redis优化
1、redis内存策略的选择
1、redis中的数据不是关键数据,关键代码中有一层保障,即redis数据失效后,会从数据库查找。
比较关键的是需要设置redis中key的过期时间,这样有利于内存的回收。
这里一般可以设置redis中的内存为服务器内存的45%,因为需要预留一半的内存用来复制数据(打开快照的情况下.),一般设置volatile-ttl。
如果设置了redis的内存为服务器内存的90%,一般设置allkeys-lru,当然前提是需要设置过期时间。
具体设置多少百分比,还是看应用的规模以及服务器的使用。如果一台服务器不是完全给redis用的,那么比例会更少。
2、info memory 查看redis的运行情况
used_memory_human: 占用内存
used_memory_rss_human: redis进程占用的内存
used_memory_peak_human: 峰值内存
mem_fragmentation_ratio: 碎片率,其实就是redis中的数据实际占用的内存 和 操作系统分配给redis的内存的占比。 理解下就知道,如果 < 1, 说明内存不够用,要发生磁盘交换了,需要优化;> 1,是正常的。> 1.5,理论上说是有问题,原因就是redis本身(不包括内存数据)占用的内存是不多的,所以也需要优化。
碎片率过大的原因: 数据频繁更新,因为数据被删除后,占用的内存不会马上被系统回收,所以会一直占用着。
四、redis的集群
简单做个了解,项目中暂时没有用到。因为单纯的一台服务器已经够用。
1.主从
单服务器多实例的集群
好处:读写分离,类似于mysql,理论上对于单线程的redis提升很大。
客户端连接一般的框架也支持。
还有一个好处是服务的可靠性。
方式:一是单纯的主从(一主多从)和 哨兵模式的主从(服务故障自动转移)
一般都是选择哨兵模式。
主写从读。因为一般读是比较多的,而从服务器又比较多。
2、集群
五、有用的经验
- hypelogLog 数据结构
可以去重统计数量。
比如不同用户点击商品的数量,网页的uv(去重统计点击数)。最大空间为12k。大约可以存储2^64 个数据。但是只存储数量。和set数据结构的区别,set也可以统计,但是它会存储所有的数据,每个数据大约15byte(字节),对于大数据量的set比如统计在线用户数,1000个人就是15k,一百万就是15M,而用hypelogLog只需要12k大小就够了。