
Redis基本概述
- redis是一种内存型的nosql数据库,优点是快,通常用来做数据的缓存
- redis存储数据的方法是以key-value的形式
- redis的key通常都是字符串
- redis的value类型支持字符串、列表、哈希等多种类型
- redis下载地址 https://redis.io/download
1.Redis安装配置
1.关闭防火墙
systemctl stop firewalld; systemctl disable firewalld2.安装基础依赖包
yum install -y wget gcc gcc-c++ make tar openssl openssl-devel cmake3.源码编译redis
cd /usr/local/src wget 'http://download.redis.io/releases/redis-4.0.9.tar.gz' tar -zxf redis-4.0.9.tar.gz cd redis-4.0.9 make #make完后会生成可运行的二进制包,这些包直接拷贝就能够使用4.安装后基础优化
# redis安装在/usr/local/redis里面 mkdir -pv /usr/local/redis/conf /usr/local/redis/bin cp src/redis-* /usr/local/redis/bin/ #拷贝常用的二进制文件 \rm /usr/local/redis/bin/*.c /usr/local/redis/bin/*.o cp redis.conf /usr/local/redis/conf/ #拷贝配置文件 # 验证和软链接的建立 /usr/local/redis/bin/redis-server --version /usr/local/redis/bin/redis-cli --version ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/ #由于redis客户端经常使用,做个软链接 redis-cli --version5.调整redis相关配置信息
vim /usr/local/redis/conf/redis.conf bind 127.0.0.1 192.168.56.11 #监听地址更改,0.0.0.0代表监控所有网卡 port 6379 #监听端口,默认6379 daemonize yes #后台启用 pidfile /data/redis/redis.pid #pid存放目录 logfile "/data/redis/redis.log" #日志存放目录 dir /data/redis/ #数据目录6.redis服务器启动和关闭
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf #启动redis服务器 redis-cli SHUTDOWN #关闭redis服务器
2.Redis日志处理
由于系统没有进行初始化和优化,在安装并启动redis后,日志中会提示相应的警告信息,建议按如下方式进行调整,并后续出现类似的问题。
vim /etc/security/limits.conf * soft nofile 65535 * hard nofile 655353.允许内核分配所有的物理内存,而不管当前的内存状态如何
sysctl vm.overcommit_memory=14.每个tcp端口最大的监听队列的长度
sysctl net.core.somaxconn=10240# vi /etc/rc.local if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi5: 删除日志再启动一下redis,然后再观察redis服务器
\rm /data/redis/redis.log /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
3.Redis加密方式
1.修改Redis配置文件
vim /usr/local/redis/conf/redis.conf requirepass 'x86' systemctl restart redis-server加密redis的操作方法
- redis-cli 登录进去以后auth 'x86'
- redis-cli -a 'x86' info 非交互式的操作
2.无需重启redis加密方式
- auth 'x86' #加完密码后,需要使用auth去认证才能操作redis服务器
- config get requirepass #获取指定配置
- config set requirepass '' #无需重启redis服务器将密码置为空,平滑更新配置(临时)
- config rewrite #平常更新配置完后需要写入到配置文件,预防重启后配置失效(临时配置刷新)
- config set requirepass 'x86' #重新设置密码
4.Redis禁止危险命令
1: redis禁用命令
FLUSHALL和FLUSHDB会清除redis的数据,比较危险 KEYS在键过多的时候使用会阻塞业务请求 config会引起攻击2: redis禁用危险命令的配置如下,粘贴到配置文件里面,重启redis服务器。此配置无法平滑的更新
rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command KEYS ""3: 登录redis,运行禁止的命令,会提示失败
127.0.0.1:6379> FLUSHALL (error) ERR unknown command 'FLUSHALL'4.建议Redis监听在本地内网地址,同时增加密码,可大大的减少被攻击
5.Redis最大内存设置
redis可以设置最大内存和达到最大内存的删除算法。
清空redis的所有内容 FLUSHALL1: redis的键设置有效期,过期自动删除
set name x86 ttl name #默认不超期,值为-1 expire name 10 #10s后会被删除 ttl name2: 查看设置最大内存
config get maxmemory #默认无限制,值为0 config set maxmemory 1m #设置最大使用1m内存 config get maxmemory-policy #默认使用noeviction3: 可选择的删除算法
volatile-lru 使用LRU算法删除键(key需要设置过期时间) volatile-random 随机删除键(key需要设置过期时间) volatile-ttl 删除ttl最小的键(key需要设置过期时间) allkeys-lru 使用LRU算法删除键(所有key) allkeys-random 随机删除键(所有key) noeviction 不进行任何的操作,只返回错误,默认4: 模拟超过内存
for line in `seq -w 1000`;do redis-cli set key_${line} value__${line} done5: 设置删除算法
config set maxmemory-policy volatile-random #超过最大内存,设置了ttl的使用lru算法删除 redis-cli expire key_${line} 3600 #尝试一下设置key的过期时间 config set maxmemory-policy allkeys-random #随机删除,set不会出错,但会随机删除