Redis 数据库安装

[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++

1、系统环境

2、安装依赖

# yum install gcc gcc-c++ -y
复制代码

3、安装 Redis

解压
# 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

4、配置 Redis

一、redis 启动方法

  • 第一种方法: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
    复制代码

5、管理

一、交互方式

可使用两种方式链接 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:改变复制策略设置
复制代码

Redis 主从复制配置

一、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
复制代码
相关文章
相关标签/搜索