一、Redis
1、介绍
- REmote DIctionary Server:数据结构服务器,k/v,数据结构;
- Redis 是一个开源(BSD许可)的,内存存储、数据结构存储系统,它可以用作数据库、缓存和消息中间件(消息队列)。
- 它支持的数据结构:字符串、列表(数组)、hashes(关联数组)、集合、有序集合、bitmaps、hyperloglogs、空间索引;
- 内建的复制功能、Lua scripting(著名的脚本编程语言,容易内嵌入其他语言)、LRU、事务、持久存储、高可用(Sentinel,Redis Cluster)
2、redis程序
- 最新版程序,可以选择官网下载,编译安装。
- 也可以使用yum epel仓库,
yum install redis
- 配置文件:/etc/redis.conf
- 服务端-主程序:/usr/bin/redis-server 默认端口 TCP:6379
- 客户端:/usr/bin/redis-cli
- Unit File:/usr/lib/systemd/system/redis.service
- 数据目录:/var/lib/redis
- Redis性能测试工具:redis-benchmark
- AOF文件修复工具:redis-check-aof
- RDB文件检查工具:redis-check-rdb
- Sentinel服务器:redis-sentinel
3、配置
- Redis.conf 配置文件分为:通用基本配置项、网络配置项、持久化相关配置、复制相关的配置、安全相关配置、Limit相关的配置、SlowLog相关的配置、INCLUDES、Advanced配置
-
通用配置
- daemonize yes 启用后台守护进程运行模式
- pidfile /PATH/redis.pid redis启动后的进程ID保存文件
- loglevel notice 指定记录服务器信息等级
- logfile “” 指定日志文件,默认是使用系统的标准输出
- databases 16 设置数据库的数量,默认启动时使用0 号数据库
- 网络配置
- port 指定使用端口号,默认6379
- bind 0.0.0.0 监听指定IP地址 默认本地回环地址
- timeout N 客户端空闲N秒后断开连接,参数0表示不启用
- tcp-backlog 511 后援队列,达到最大并发连接数后,服务器还要留住多少访问请求
- protected-mode yes 保护模式,默认启用。指定了bind,就可以关闭保护模式。如果关闭bind,就必须启用保护模式,不然没法登陆redis。
- tcp-keepalive 300 tcp保持连接300秒
- 安全配置
- requirepass PASSWORD
- rename-command <COMMAND> <NEW_CMND_NAME> 命令重命名,在AOF或Replication环境中,不推荐使用;
- Limits
- maxmemory <bytes> 设置给redis使用的最大内存,单位为字节
- maxmemory-policy noeviction 选择淘汰策略
- 如果内存使用量耗尽,淘汰策略:
volatile-lru # 对设置了过期时间的keys,使用 LRU最近最少使用算法去淘汰。 allkeys-lru # 所有keys,使用LRU最近最少使用算法去淘汰。 volatile-random # 对设置了过期时间的keys,随机淘汰。 allkeys-random # 所有keys中,退机淘汰 volatile-ttl # 对过期时间中剩余时间多少,淘汰快到期的。 noeviction # 默认策略,不淘汰,如果内存已满,添加数据是报错。
- maxmemory-samples 5 淘汰算法运行时的采样样本数
- SlowLog相关配置
- slowlog-log-slower-than 10000 单位微秒=0.01秒
- sowlog-max-len 128 最终只保存128条日志;
- ADVANCED配置
- hash-max-ziplist-entries 512 哈希编码最大键值对 512个键值对
- hash-max-ziplist-value 64 这些键值对里的值,最大长度64字节。
- client-output-buffer-limit <class><hard limit><soft limit><soft seconds>
- class:客户端种类,normal本机客户端,slave从节点客户端,pubsub消息队列客户端。
- hard limit 硬限制,最大多少空间。
- soft limit 软限制,可以在短时间内超过。
- soft seconds 超出软限制时,超出的那部分可使用时长。
client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60
二、Redis命令
1、分组命令
- @strings 只处理值为字符串的命令组
- SET:设置一个key的value值
- GET:返回key的value值,key不存在则返回nil(空);
- EXISTS:查询key是否存在;返回1 key存在,0 key不存在
- INCR:对key中的数值执行加1操作。
- DECR:返回一个数字,减少之后的value值
- SETNX:当key不存在是,设置一个键的值,当key存在时,则不做动作。
- SETEX:设置 key 对应的 value 的过期时间
- INCRBYFLOAT:指定key为浮点数值,并增长浮点数值
- MGET:获取多个key的值
- MSET:设置多个key的值
- @lists 处理列表的命令组
- LPUSH:从列表左边开始插入元素
- RPUSH:从列表右边开始插入元素
- LPOP:从左边弹出元素
- RPOP:从右边弹出元素
- LPUSHX:判断列表是否存在,存在则从左边插入元素
- RPUSHX:判断列表是否存在,存在则从右边插入元素
- LRANGE:返回指定下标的key的值
- LINDEX:返回数组列表中,指定的下标的元素值。0为第一个元素
- LSET:设置列表里一个元素的值
- Server相关命令
- CLIENT GETNAME:获取客户端连接的名字
- CLIENT SETNAME:设置客户端连接的名字
- CLIENT LIST:列出所有客户端连接
- CLIENT KILL:关闭指定连接,根据这些条件关闭;[ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]
- CLIENT PAUSE:暂停某个客户端连接,也可以设着暂停时间
- SHUTDOWN NOSAVE强制关闭,类似直接关电源;SAVE内存数据同步到磁盘上,安全关闭
- INFO:服务器状态信息查看;分为多个secion;
- 在程序中修改参数
- CONFIG GET 查看指定配置项的参数
- CONFIG RESETSTAT INFO中的计数器全部重置,重新开始计数
- CONFIG REWRITE 重写配置文件,保存在配置文件中
- CONFIG SET 修改配置项参数;重启redis,不保存
更多命令组,命令介绍可到官网查询Redis官网
2、redis-cli命令
- Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h HOST, 127.0.0.1
-p PORT, 6379/tcp
-a PASSWORD
-n DBID 0-15 - 与Connection相关命令:
help @connection
AUTH <password>
ECHO <message>
PING
QUIT
SELECT dbid - 清空数据库:
FLUSHDB:Remove all keys from the current database 清空当前数据库;
FLUSHALL:Remove all keys from all databases 清空所有数据库;
三、Redis持久化
- RDB
- snapshotting, 二进制格式;按事先定制的策略,周期性地将数据从内存同步至磁盘;数据文件默认为dump.rdb;
- 客户端显式使用SAVE或BGSAVE命令来手动启动快照保存机制;
- SAVE:同步,即在主线程中保存快照,此时会阻塞所有客户端请求;
- BGSAVE:异步;backgroud
- RDB相关的snapshotting配置:
*save <seconds> <changes>
save 900 1
save 300 10
save 60 10000
save 5 200000 - 表示:三个策略满足其中任意一个均会触发SNAPSHOTTING操作;
- 900s内至少有一个key有变化
- 300s内至少有10个key有变化
- 60s内至少有1W个key发生变化
- 5s内至少变化20W个key发生变化
- stop-writes-on-bgsave-error yes
- dump快照操作出现错误时,是否禁止新的写入操作请求;
- rdbcompression yes 是否对快照进行压缩,只要服务器有闲余性能,就可以压缩,节省磁盘空间
- rdbchecksum yes 压缩完是否校验,检查文件是否完整;占用CPU
- dbfilename dump.rdb:指定rdb文件名
- *dir /var/lib/redis:rdb文件的存储路径
- AOF:Append Only File, fsync
- 记录每次写操作至指定的文件尾部实现的持久化;当redis重启时,可通过重新执行文件中的命令在内存中重建出数据库;
- BGREWRITEAOF:AOF文件重写;
- 不会读取正在使用AOF文件,而是通过将内存中的数据以命令的方式保存至临时文件中,完成之后替换原来的AOF文件;
- AOF相关的配置
- *appendonly no:默认不启用AOF的
- appendfilename "appendonly.aof" :文件名
- *appendfsync:追加同步的三种模式
- no:redis不执行主动同步操作,而是OS进行;
- everysec:每秒一次;
- always:每语句一次;
- no-appendfsync-on-rewrite no
- 是否在后台执行aof重写期间不调用fsync,默认为no,表示调用;
- auto-aof-rewrite-percentage 100:变化的内容所占空间的增长量超过100%
- auto-aof-rewrite-min-size 64mb 增长量不能超过64mb
- 上述两个条件同时满足时,方会触发重写AOF;与上次aof文件大小相比,其增长量超过100%,且大小不少于64MB;
- aof-load-truncated yes:修剪文件,Redis启动加载aof文件,如果发现末尾命令不完整则自动截掉,成功加载前面正确的数据。如果设置为no,遇到此类情况,Redis启动失败,用redis-check-aof 工具手工修复。
- 注意:持久机制本身不能取代备份;应该制订备份策略,对redis库定期备份;
- RDB与AOF同时启用:
(1) BGSAVE和BGREWRITEAOF不会同时进行;
(2) Redis服务器启动时用持久化的数据文件恢复数据,会优先使用AOF;
原文地址:http://blog.51cto.com/13120511/2090014
时间: 2024-10-12 14:03:58