Redis--基础篇
Redis简介
Redis 是一个开源(BSD 许可)、内存中数据结构存储,用作数据库、缓存和消息代理。它支持数据结构,如字符串、哈希、列表、集、带范围查询的排序集、位图、超日志、具有半径查询的地理空间索引和流。Redis 具有内置复制、Lua 脚本、LRU 逐出、事务和不同级别的磁盘持久性,并且通过 Redis Sentinel 和 Redis 群集自动分区提供高可用性。(官网详解)
Redis安装
[root@app1 ~]# wget http://download.redis.io/releases/redis-5.0.9.tar.gz
[root@app1 ~]# tar -zxvf redis-5.0.9.tar.gz
[root@app1 ~]# mv redis-5.0.9 /home/redis
[root@app1 ~]# cd /home/redis/
[root@app1 redis]# yum install -y gcc
make 或 make MALLOC=libc
启动后日志报错,处理方法:
16290:M 24 Sep 2020 09:57:18.316 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
###TCP backlog设置值511没有成功,因为/proc/sys/net/core/somaxconn这个设置的是更小的128
16290:M 24 Sep 2020 09:57:18.316 # Server initialized
16290:M 24 Sep 2020 09:57:18.316 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
###overcommit_memory参数设置为0!在内存不足的情况下,后台程序save可能失败。建议在文件 /etc/sysctl.conf 中将overcommit_memory修改为1
[root@app1 ~]# vim /etc/sysctl.conf
net.core.somaxconn=1024
vm.overcommit_memory=1
[root@app1 ~]# sysctl -p
16314:M 24 Sep 2020 09:58:44.540 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
###你使用的是透明大页,可能导致redis延迟和内存使用问题,执行 echo never > /sys/kernel/mm/transparent_hugepage/enabled 修复该问题
[root@app1 ~]# vim /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@app1 ~]# source /etc/rc.local
重新启动Redis:
3408:C 30 Sep 2020 12:47:00.818 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3408:C 30 Sep 2020 12:47:00.818 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=3408, just started
3408:C 30 Sep 2020 12:47:00.818 # Configuration loaded
3409:M 30 Sep 2020 12:47:00.820 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.9 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 7000
| `-._ `._ / _.-' | PID: 3409
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
3409:M 30 Sep 2020 12:47:00.821 # Server initialized
3409:M 30 Sep 2020 12:47:00.821 * DB loaded from disk: 0.000 seconds
3409:M 30 Sep 2020 12:47:00.821 * Ready to accept connections
Redis配置文件详解
| 配置文件 | 详解 |
|---|---|
| daemonize no | Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 |
| pidfile /home/redis/redis.pid | Redis默认会把pid写入/var/run/redis.pid(默认)文件,可以通过pidfile指定 |
| port 6379 | 指定Redis监听端口,默认端口为6379 |
| bind 127.0.0.1 | 指定Redis只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求 |
| timeout 300 | 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能(默认是0) |
| loglevel verboes | 指定日志记录级别 |
| logfile "/home/redis/redis.log" | 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null,可以指定发送到某个日志文件 |
| database 16 | 设置数据库的数量,默认数据库为0(0-15),可以使用SELECT |
| save |
指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合, Redis默认配置文件中提供了三个条件:save 900 1、save 300 10、save 60 10000 |
| rdbcompression | 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的特别大 |
| dbfilename dump.rdb | 指定本地数据库文件名,默认值为dump.rdb |
| dir ./ | 指定本地数据库存放目录 |
| slaveof |
设置当本机为slave服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步 |
| slave-read-only yes|no | slave服务只读设置,当开启时,slave服务不能写入数据,只能同步master数据 |
| masterauth |
当master设置密码是,slave服务连接master的密码 |
| requirepass passwd | 设置redis连接密码,设置后redis客户端连接需要认证 auth passwd |
| maxclients 128 | 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息 |
| maxmemory |
指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区 |
| appendonly yes|no | 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no |
| appendfilename appendonly.aof | 指定更新日志文件名,默认为src/appendonly.aof |
| appendfsync everysec | 指定更新日志条件,共有3个可选值:no表示等操作系统进行数据缓存同步到磁盘(快)、always表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)、everysec表示每秒同步一次(折中,默认值) |
| cluster-enabled yes | 开启集群功能 |
| cluster-config-file nodes-7001.conf | 集群信息配置文件自动生成 默认位置src/nodes_6379.conf |
| cluster-node-timeout 15000 | cluster节点通信时间 |
| aof-use-rdb-preamble | 混合持久化(RDB持久化以及AOF持久化混合写入AOF文件,这样做的好处是可以结合 rdb 和 aof 的优点, 快速加载同时避免丢失过多的数据,缺点是 aof 里面的 rdb 部分就是压缩格式不再是 aof 格式,可读性差) |
| repl-disable-tcp-nodelay | 禁用 TCP_NODELAY:no ,不禁用,双重否定等于肯定,即启用 ,TCP_NODELAY=on; 禁用 TCP_NODELAY:yes,就是禁用, TCP_NODELAY=off。 启用 TCP_NODELAY 时,无网络延迟,主服务器的命令无论大小都会及时发送给从节点,此时会增加网络带宽的消耗。适合主从网络环境良好的场景。 禁用 TCP_NODELAY 时,主从节点的通信会受到网络拥塞控制,Linux 内核会做出一定的优化,如合并较小的 TCP 数据包从而节省带宽。默认发送时间间隔取决 Linux 内核,一般默认为 40 毫秒。适合垮机房部署的情况。 |
| slave-priority 100 | 适用Sentinel模块(unstable,M-S集群管理和监控),需要额外的配置文件支持。slave的权重值,默认100.当master失效后,Sentinel将会从slave列表中找到权重值最低(>0)的slave,并提升为master。如果权重值为0,表示此slave为"观察者",不参与master选举 |
###开启redis
[root@app1 src]# ./redis-server ../redis.conf
###关闭redis
[root@app1 src]# ./redis-cli -h 127.0.0.1 -p 6379 -a qwer shutdown
h:host p:port a:auth
Redis修改配置
修改配置文件方法(在不重启实例情况下):修改日志等级
Redis默认的设置为verbose,开发测试阶段可以用debug,生产模式一般选用notice
- debug:会打印出很多信息,适用于开发和测试阶段
- verbose(冗长的):包含很多不太有用的信息
- notice:适用于生产模式
- warning : 警告信息
10.224.192.209:7000> CONFIG GET loglevel
1) "loglevel"
2) "verbose"
10.224.192.209:7000> CONFIG SET loglevel notice
OK
10.224.192.209:7000> CONFIG GET loglevel
1) "loglevel"
2) "notice"

浙公网安备 33010602011771号