master禁用数据持久化,只在slave上配置数据持久化
物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉
当Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了,就开始做swap,内存碎片大
当达到最大内存时,会清空带有过期时间的key,即使key未到过期时间。
redis优化
1.redis安全
①为redis客户端设置外部链接密码
警告:
因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在1秒内进行上万次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。
方法一: vim /usr/local/redis/conf/redis.conf #修改redis配置文件,添加密码 requirepass 123456 #重启redis redis-cli shutdown redis-server /usr/local/redis/conf/redis.conf 方法二: #交互式登陆redis设置密码 redis-cli #登录redis config set requirepass 123456 #设置密码 config rewrite #将配置重写进行保存 特别提示: redis没有用户的概念,只能设置连接密码,并且redis的连接速度非常快。因此密码需要设置的很复杂才安全。
②将危险的命令改名 Redis禁用屏蔽危险命令
FLUSHALL和FLUSHDB会清除redis的数据,比较危险
KEYS在键过多的时候使用会阻塞业务请求
#修改配置文件 vim /usr/local/redis/conf/redis.conf rename-command set "sset" #将set修改为sset rename-command keys "" #屏蔽掉keys命令不使用rename-command FLUSHALL "" #将命令改名成空
rename-command FLUSHDB "" #将命令改名成空
系统参数优化调整
(1)调整系统文件描述符
echo "* - nofile 10240" >> /etc/security/limits.conf #设置系统文件描述符
bash #刷新 ulimit -n #查看系统文件描述符
(2)调整系统的TCP连接数
echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf #修改配置文件设置TCP连接数 sysctl -p #查看tcp连接数 net.core.somaxconn = 10240
(3)调整系统内存分配策略
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf #调整内存分配策略当redis定义内存将要满时,抢占系统内存 sysctl -p
(4)关闭系统内核的巨大内存页支持
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local #设为开机自启动 echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
Redis最大内存设置和删除算法
#默认对内存无限制 set maxmemory 1M #限制1M get maxmemory #查看
可选择的删除算法
volatile-lru: 使用LRU算法删除键(key需要设置过期时间) volatile-random: 随机删除键(key需要设置过期时间) volatile-ttl: 删除ttl最小的键(key需要设置过期时间) allkeys-lru: 使用LRU算法删除键(所有key) allkeys-random: 随机删除键(所有key) noeviction: 不进行任何的操作,只返回错误,默认
redis-cli config get maxmemory-policy #查看内存清理算法 1) "maxmemory-policy" 2) "noeviction" #默认noeviction