[TOC]html
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统。node
Redis 是一个开源的使用 ANSI C 语言编写、遵照 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。它一般被称为数据结构服务器,由于值(value)能够是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等类型。从 2010 年 3 月 15 日起,Redis 的开发工做由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。mysql
Redis 默认端口linux
Redis 默认端口为 6379,sentinel.conf 配置器端口为 26379c++
# yum install gcc gcc-c++ -y
复制代码
解压
# tar xvf redis-4.0.10.tar.gz
进入 redis 目录
# cd redis-4.0.10
编译
# make PREFIX=/usr/local/redis MALLOC=libc(能够不加,默认是 jemalloc) install
安装
# make install
注意:Redis 并无本身实现内存池,没有在标准的系统内存分配器上再加上本身的东西。
redis-2.4 以上自带 jemalloc,你不须要加任何参数,经过 zmalloc.c 源码中咱们能够看到,Redis 在编译时,会先判断是否使用 tcmalloc,若是是,会用 tcmalloc 对应的函数替换掉标准的 libc 中的函数实现。其次会判断jemalloc 是否使得,最后若是都没有使用才会用标准的 libc 中的内存管理函数。因此用 tcmalloc 优化请谨慎使用,这两着分配器碎片率相差不大,建议用自带 jemalloc。
复制代码
redis 安装后,在 /usr/local/redis/bin
下有几个以 redis 开头的可执行文件,称为 redis shell,这些可执行文件能够作不少事情。redis
文件名称 | 做用 |
---|---|
redis-server | 启动 redis |
redis-cli | redis 命令行工具 |
redis-benchmark | 基准测试工具 |
redis-check-aof | AOF 持久化文件检测工具和修复工具 |
redis-check-rdb | RDB 持久化文件检测工具和修复工具 |
redis-sentinel | 启动 redis-sentinel |
第一种方法:sql
# redis-server # 前台启动
# redis-server & # 后台启动
复制代码
第二种方法:shell
修改 redis.conf 配置文件,从源码目录复制过来修改
# cp /usr/local/src/redis-4.0.10/redis.conf /usr/local/redis/
daemonize yes # 之后台启动 redis
requirepass redis123 # 设置 redis 登录密码
# bind 127.0.0.1 # 注释此行
protected-mode no # 设置为 no
logfile "/usr/local/redis/logs/redis.log" # 设置日志文件
dir ./ # 数据目录路径
启动服务
redis-server /usr/local/redis/redis.conf
复制代码
配置文件详解:数据库
# 指定 redis 只接收来自于该 IP 地址的请求,若是不进行设置,那么将处理全部请求,在生产环境中最好设置该项,若是只绑定 127.0.0.1 的话,就只有本机可使用,外部没法访问;实际上,应该 bind 的是 redis所在服务器网卡的 ip。也就是说,若是你的 redis 服务器有两张网卡,一张是 ip-1,另外一张是 ip-2,若是你 bind ip-1.那么只有请求 ip-1 的请求会被受理。
bind 127.0.0.1 172.18.223.15
# redis 的一种安全机制,在这个机制开启状况下 protected-mode yes,若是你 bind 127.0.0.1 客户端也是链接不上的。
# 在这个机制关闭状况下 protected-mode no,若是你 bind 127.0.0.1 客户端也是链接不上的,这个 bind 127.0.0.1 限定了 redis 只是监听本地回环的网络请求。
# 若是是这样的配置 bind 127.0.0.1 192.168.0.5 和 protected-mode no 局域网能够链接;
# 若是是这样的配置 bind 127.0.0.1 192.168.0.5 和 protected-mode yes 配置, 局域网也能够链接;
# 综上感受 protected-mode 参数配置感受没什么用。因此保留为默认配置 protected-mode yes
protected-mode yes
# 监听端口
port 63790
# TCP 最大链接数(这里我改成和 linux 内核相同的值了,若是大型应用须要将内核的值修改到 2048 左右以应对更多的链接),默认是 511。
# 在 高请求/秒 的环境中,为了不客户端链接问题的缓慢,您须要大量的积压。
# 请注意,Linux 内核将会悄悄地将其截断为 /proc/sys/net/core/somaxconn 的值,所以要确保提升somaxconn 和 tcpmaxsynbacklog 的值,以得到预期的效果。
tcp-backlog 128
# 设置最大客户端链接数
maxclients 10000
# 表示客户端空闲多长时间后关闭链接,如指定 0,表示该超时机制关闭。
timeout 0
tcp-keepalive 300
# 说明 redis 进程是后台运行仍是前台运行,yes 表示后台运行,no 表示前台运行
daemonize yes
# 设置访问 redis 的口令
requirepass sfm@redis
supervised no
pidfile /mydata/redis/6379.pid
# 指定日志记录级别,指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning,默认为 notice
loglevel notice
logfile "/mydata/redis/logs/redis.log"
# redis 数据库个数(默认 16 个)
databases 16
always-show-logo yes
# 900秒(15分钟) 内有 1 条数据发生了变化,将数据 dump 到磁盘
save 900 1
# 300秒(5分钟) 内有 10 条数据发生了变化,将数据 dump 到磁盘
save 300 10
# 69秒(1分钟) 内有 10000 条数据发生了变化,将数据 dump 到磁盘
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
# 设置 RDB 持久化保存的文件名
dbfilename 6379.rdb
# 设置 RDB 持久化保存的路径
dir /mydata/redis/
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory-policy allkeys-lru
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
# 启用 Append Only Mode 持久化文件
appendonly yes
# 设置 AOF 持久化文件名
appendfilename "6379.aof"
# fsync 持久化策略
appendfsync everysec
# AOF 重写期间是否禁止 fsync;若是开启该选项,能够减轻文件重写时 CPU 和硬盘的负载(尤为是硬盘),可是可能会丢失 AOF 重写期间的数据;须要在负载和安全性之间进行平衡
no-appendfsync-on-rewrite no
# AOF 文件重写触发条件之一
auto-aof-rewrite-percentage 100
# AOF 文件重写触发条件之一
auto-aof-rewrite-min-size 64mb
# 若是 AOF 文件结尾损坏,Redis 启动时是否仍载入 AOF 文件
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
复制代码
以 systemd 的方法来管理 redis 服务安全
新建 redis 用户,不要以 root 用户启动 redis
# useradd -M -s /sbin/nologin redis
复制代码
在 /usr/lib/systemd/system/ 目录下新建 redis.service 文件,文件内容以下:
[Unit]
Description=Redis-4.0.10
# Documentation=man:mysqld(8)
# Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=redis
Group=redis
Type=forking
Restart=always
ExecStart=/usr/local/redis-4.0.10/bin/redis-server /usr/local/redis-4.0.10/redis.conf
ExecStop=/usr/local/redis-4.0.10/bin/redis-cli -h 127.0.0.1 -p 6379 -a redis123 shutdown
LimitNOFILE=65535
复制代码
这样就可使用 systemctl start | stop | status | restart redis.service 命令来管理 redis 服务了
注意:redis 使用的 data 目录及 logs 目录须要给 redis 权限
redis 的默认持久化策略是快照的方式
RDB 持久化配置
Redis 会将数据集的快照 dump 到 dump.rdb 文件中。此外,咱们也能够经过配置文件来修改 Redis 服务器 dump 快照的频率,在打开 redis.conf 文件以后,咱们搜索 save,能够看到下面的配置信息:
save 900 1 # 在 900 秒(15分钟)以后,若是至少有 1 个 key 发生变化,则 dump 内存快照。
save 300 10 # 在 300 秒(5分钟)以后,若是至少有 10 个 key 发生变化,则 dump 内存快照。
save 60 10000 # 在 60 秒(1分钟)以后,若是至少有 10000 个 key 发生变化,则 dump 内存快照。
复制代码
默认 RDB 方式保存的是dump.rdb
文件,恢复也是识别的是dump.rdb
保存目录也在配置文件中可配置,默认当前位置
# Note that you must specify a directory here, not a file name.
dir ./ # 默认 dump.rdb 文件保存位置
复制代码
AOF 方式持久化配置
若是把
appendonly no 修改成
appendonly yes
复制代码
则表示启用 AOF 方式持久化(这种机制安全,保存的数据最为健全,但要牺牲部分性能)
配置生成的 aof 文件名
appendfilename "appendonly.aof"
appendfsync everysec | always | no
# no 表示不执行 fsync,由操做系统保证数据同步到磁盘,速度最快。
# always 表示每次写入都执行 fsync,以保证数据同步到磁盘。
# everysec 表示每秒执行一次 fsync,可能会致使丢失这 1 秒的数据。
appendfsync no
复制代码
可使用两种方式链接 redis 服务器。
第一种:交互式方式
# redis-cli -h {host} -p {port} ## 以这种方式链接,而后全部的操做都是在交互的方式实现,不须要再执行 redis-cli 了。
复制代码
第二种:命令方式
# redis-cli -h {host} -p {port} {command} ## 直接获得命令的返回结果。
复制代码
命令方式经常使用参数:
参数 | 做用 | 用例 |
---|---|---|
-r | 表明将命令重复执行屡次 | $ redis-cli -r 3 ping # ping 命令可用于检测 redis 实例是否存活,若是存活则显示 PONG |
-i | 每隔几秒(若是想用 ms,如 10ms 则写成 0.01)执行一次命令,必须与 -r 一块儿使用 |
$ redis-cli -r 10 -i 1 info | grep used_memory_human # 每隔 1 秒输出内存的使用量,一共输出 10 次。 |
-x | 表明从标准输入读取数据做为该命令的最后一个参数。 | $ echo "world" |redis-cli -x set hello |
-c | 链接集群结点时使用,此选项可防止 moved 和 ask 异常。 | |
-a | 如配置了密码,可用 a 选项。 | $ redis-cli -a 123456 -r 10 -i 1 info | grep used_memory_human |
--rdb | 会请求 redis 实例生成并发送 RDB 持久化文件,保存在本地。可作按期备份。 |
一、查看服务器的信息和统计:info
2. 删除全部数据库内容:flushall
3. 刷新数据库:flushdb
4. 看全部键:KEYS *,使用 select num 能够查看键值数据。
5. 设置变量:set test "who am i"
6. config set dir dirpath 设置路径等配置
7. config get dir/dbfilename 获取路径及数据库配置信息
8. save 保存
9. get 变量,查看变量名称
10. time:返回当前服务器时间
11. client list: 返回全部链接到服务器的客户端信息和统计数据 参见http://redisdoc.com/server/client_list.html
12. client kill ip:port:关闭地址为 ip:port 的客户端
13. save:将数据同步保存到磁盘
14. bgsave:将数据异步保存到磁盘
15. lastsave:返回上次成功将数据保存到磁盘的Unix时戳
16. shundown:将数据同步保存到磁盘,而后关闭服务
17. config resetstat:重置info命令中的某些统计数据
18. config get:获取配置文件信息
19. config set:动态地调整 Redis 服务器的配置(configuration)而无须重启,能够修改的配置参数可使用命令 CONFIG GET * 来列出
20. config rewrite:Redis 服务器时所指定的 redis.conf 文件进行改写
21. monitor:实时转储收到的请求
22. slaveof:改变复制策略设置
复制代码
一、master 的 redis 配置文件只须要设置好 bind、requirepass 等便可
二、slave 的 redis 配置文件中添加如下行:
slaveof x.x.x.x 6379 # Master 的 IP 地址及端口号
masterauth redis123 # 若是 Master 上设置有密码的话,这里须要设置跟 Master 上同样的密码
或者动态修改设置:
经过 redis-cli 链接到从节点服务器,执行下面命令便可。
slaveof x.x.x.x 6379
复制代码