Redis配置
Redis
的配置文件位于Redis
安装目录下,文件名为 redis.conf
(Windows 名为redis.windows.conf
)。你可以通过config
命令查看或设置配置项。
⚠️不推荐对原始的redis.conf文件进行修改,推荐重新建一个配置文件进行修改,然后运行自己创建的配置文件
查看配置
语法
1 | 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME |
示例
1 | 127.0.0.1:6379> config get dbfilename #获取某个配置项 |
修改配置
你可以通过修改redis.conf
文件或使用config set
命令来修改配置。
语法
1 | 127.0.0.1:6379> config set CONFIG_SETTING_NAME NEW_CONFIG_VALUE |
示例
1 | 127.0.0.1:6379> config set loglevel "notice" |
参数说明
redis.conf 配置项说明如下:
类型 | 配置项 | 说明 |
---|---|---|
基本 | daemonize no | 是否以守护进程的方式运行,默认为 no,使用yes启用守护进程 |
基本 | databases 16 | 设置数据库的数量,默认数据库为0,可以使用SELECT |
基本 | stop-writes-on-bgsave-error yes | 后台存储错误停止写,默认为 yes |
基本 | save <seconds> <changes> | 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合。Redis默认配置文件中提供了三个条件:save 900 1 、 save 300 10 、save 60 10000 |
基本 | rdbcompression yes | 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大。 |
基本 | rdbchecksum yes | 存储和加载rdb文件时校验,默认为 yes |
基本 | dbfilename dump.rdb | 指定本地数据库文件名,默认值为dump.rdb |
基本 | dir ./ | 指定本地数据库存放目录,默认为当前安装目录 |
主从 | slaveof <masterip> <masterport> | 设置当本机为slave服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步 |
主从 | masterauth <master-password> | 当master服务设置了密码保护时,slav服务连接master的密码 |
主从 | slave-serve-stale-data yes | 当主从断开或正在复制中,从服务器是否应答,默认为 yes |
主从 | repl-disable-tcp-nodelay no | 主端是否合并数据,大块发送给slave |
主从 | slave-priority 100 | 如果master不能再正常工作,那么会在多个slave中,选择优先值最小的一个slave提升为master,优先值为0表示不能提升为master。 |
主从 | slave-read-only yes | 从服务器只读,默认为 yes |
主从 | repl-ping-slave-period 10 | 从ping主的时间间隔,秒为单位 |
主从 | repl-timeout 60 | 主从超时时间(超时认为断线了),要比period大 |
安全 | requirepass foobared | 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH |
安全 | rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 | 如果公共环境,可以重命名部分敏感命令,如config |
限制 | maxclients 128 | 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached 错误信息 |
限制 | maxmemory <bytes> | 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区 |
限制 | maxmemory-policy volatile-lru | 内存到极限后的处理 1. volatile-lru -> LRU 算法删除过期key 2. allkeys-lru -> LRU算法删除key(不区分过不过期) 3. volatile-random -> 随机删除过期key 4. allkeys-random -> 随机删除key(不区分过不过期) 5. volatile-ttl -> 删除快过期的key 6. noeviction -> 不删除,返回错误信息 |
日志模式 | appendonly no | 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no |
日志模式 | appendfilename appendonly.aof | 指定更新日志文件名,默认为appendonly.aof |
日志模式 | appendfsync everysec | 指定更新日志条件,共有3个可选值: no:表示等操作系统进行数据缓存同步到磁盘(快) always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) everysec:表示每秒同步一次(折衷,默认值) |
日志模式 | no-appendfsync-on-rewrite no | 为yes,则其他线程的数据放内存里,合并写入(速度快,容易丢失的多) |
日志模式 | auto-AOF-rewrite-percentage 100 | aof文件增长比例,指当前aof文件比上次重写的增长比例大小。aof重写即在aof文件在一定大小之后,重新将整个内存写到aof文件当中,以反映最新的状态(相当于bgsave)。这样就避免了,aof文件过大而实际内存数据小的问题(频繁修改数据问题)。 |
日志模式 | auto-AOF-rewrite-min-size 64mb | aof文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小),此变量仅初始化启动redis有效。如果是redis恢复时,则lastSize等于初始aof文件大小。 |
日志模式 | aof-load-truncated yes | 指redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败。 |
日志 | loglevel verbose | 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose |
日志 | logfile stdout | 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null |
连接 | auth 密码 | 密码登陆(如果有密码) |
连接 | ping | 测试服务器是否可用 |
连接 | echo "some content" | 测试服务器是否正常交互 |
连接 | select 0/1/2… | 选择数据库 |
连接 | quit | 退出连接 |
服务端 | shutdown [save/nosave] | 关闭服务器,保存数据,修改AOF(如果设置) |
服务端 | flushdb | 清空当前数据库的所有数据 |
服务端 | flushall | 清空所有数据库的所有数据(误用了怎么办?) |
服务端 | config get 选项(支持*通配) config set 选项 值 config rewrite config restart | 获取配置项 修改配置项 把值写到配置文件 更新info命令的信息 |
服务端 | time dbsize bgrewriteaof bgsave save lastsave | 1. 返回时间戳+微秒 2. 返回key的数量 3.重写aof 4. 在后台异步保存当前数据库的数据到磁盘 5. 执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘 6.返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示 |
服务端 | monitor | 打开控制台,观察命令(调试用) |
服务端 | client list client kill client getname client setname "名称" | 1. 列出所有连接 2. 杀死某个连接 CLIENT KILL 127.0.0.1:43501 3. 获取连接的名称 默认nil 4. 设置连接名称,便于调试 |
慢查询 | slowlog get | 获取慢查询日志 |
慢查询 | slowlog len | 获取慢查询日志条数 |
慢查询 | slowlog reset | 清空慢查询 |
慢查询 | slowlog-log-slower-than 10000 | 记录响应时间大于10000微秒的慢查询。 |
慢查询 | slowlog-max-len 128 | 最多记录128条 |
Redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String
- string 是
Redis
最基本的类型,你可以理解成与Memcached
一模一样的类型,一个 key 对应一个 value。 - string 类型是二进制安全的。意思是
Redis
的 string 可以包含任何数据。比如jpg图片或者序列化的对象。 - string 类型是
Redis
最基本的数据类型,string 类型的值最大能存储 512MB。
1 | 127.0.0.1:6379> set name "redis" |
Hash
- Redis hash 是一个键值(key=>value)对集合。
- Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
- 每个 hash 可以存储 2^32-1 键值对(40多亿)
- 存储、读取、修改用户属性
1 | 127.0.0.1:6379> del name # 用于删除前面测试用过的 key,不然会报错:(error) WRONGTYPE Operation against a key holding the wrong kind of value |
List
- Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- 列表最多可存储 2^32-1 元素 (4294967295, 每个列表可存储40多亿)。
实例
1 | 127.0.0.1:6379> del name |
Set
Redis
的Set是string类型的无序集合,提供了求交集、并集、差集等操作。- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
- 集合中最大的成员数为 2^32-1(4294967295, 每个集合可存储40多亿个成员)。
- sadd 命令:添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。
- 共同好友、利用唯一性,统计访问网站的所有独立ip、好友推荐时,根据tag求交集,大于某个阈值就可以推荐
1
2
3
4
5
6
7
8
9
10
11
12
13127.0.0.1:6379> del name
127.0.0.1:6379> sadd name redis
(integer) 1
127.0.0.1:6379> sadd name mongodb
(integer) 1
127.0.0.1:6379> sadd name mongodb
(integer) 0
127.0.0.1:6379> sadd name mysql
(integer) 1
127.0.0.1:6379> smembers name
1) "redis"
2) "rabitmq"
3) "mongodb"
zset
Redis
zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。- 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
- zset的成员是唯一的,但分数(score)却可以重复。
- zadd 命令:添加元素到集合,元素在集合中存在则更新对应score
- 排行榜、带权重的消息队列
格式:zadd key score member
1 | 127.0.0.1:6379> del name |