Redis安装配置

redis

Redis配置

Redis安装

yum install gcc automake autoconf libtool make -y && mkdir -p /apps/redis/{etc,bin,data,logs,run}
cd /usr/local/src/ && wget https://repo.huaweicloud.com/redis/redis-6.2.2.tar.gz
tar -xf redis-6.2.2.tar.gz 
cd redis-6.2.2
make PREFIX=/apps/redis install 
cp redis.conf /apps/redis/etc/
useradd -s /sbin/nologin redis
ln -s /apps/redis/bin/redis-* /usr/bin/
chown -R redis.redis /apps/redis

编辑service文件

cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s TERM \$MAINPID
LimitNOFILE=100000
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
EOF

编辑配置文件

bind 0.0.0.0
port 6379
tcp-backlog 511
timeout 30
tcp-keepalive 300
daemonize yes
pidfile /apps/redis/run/redis_6379.pid
loglevel notice
logfile "/apps/redis/logs/redis.log"
databases 16
always-show-logo no

dir /apps/redis/data
dbfilename dump.rdb
rdbcompression yes
rdbchecksum yes
stop-writes-on-bgsave-error no

save 900 1
save 300 10
save 60 1000


maxclients 10000
maxmemory  1073741824

修改内核参数

vm.overcommit_memory = 1
net.core.somaxconn = 512

启动Redis

systemctl start redis

Redis持久化配置

  • 配置RDB持久化

    cat >> /data/6379/redis.conf << EOF
    dir "/data/6379"             # 数据存放目录 
    dbfilename "dump.rdb"        # 数据文件名称
    rdbcompression yes           # 是否压缩,默认为yes 采用LZF压缩 设置为no可以节省CPU,但是会使文件变得巨大
    rdbchrcksum yes              # 是否进行RDB数据校验(校验在读写时均进行),设置为no可以节省10%时间消耗,但是存储的数据有损坏风险
    stop-write-on-bgsave-err yes # 后台持久化过程中如果出现错误现象,是否停止保存操作。
    save 900 1                   # 900s内有1次更改则进行一次保存
    save 300 10                  # 300s内有10次更改则进行一次保存
    save 60  10000               # 60s内有10000次更改则进行一次保存
    EOF
    
    • 特点:可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)
    • 优点:
      1. RDB是一个紧凑压缩的二进制文件,存储效率高
      2. RDB内部存储的是Redis在某个时间点的数据快照,非常适合数据备份,全量复制等场景
      3. RDB恢复数据的速度比AOF快很多
    • 缺点:
      1. 无法做到实时持久化,具有较大的可能性丢失数据
      2. bgsave指令每次运行需要执行fork()函数创建子进程,需要牺牲一些性能
      3. Redis的众多版本中未进行RDB文件格式的版本同一,有可能出现个版本服务之间数据格式无法兼容的现象
    • 应用:
      1. 服务器每隔一段时间执行bgsave备份,并将RDB文件拷贝到远程机器中用于灾难恢复。
  • 配置AOF持久化

    cat >> /data/6379/redis.conf << EOF
    appendonly yes  
    # appendfsync always       # 每次操作执行落盘
    appendfsync everysec       # 每秒执行落盘
    # appendfsync no           # 交由系统执行落盘
    EOF
    
    • AOF重写规则

      1. 进程内已经超时的数据不再写入
      2. 忽略无效指令,重写时使用进程内数据直接生成,新的AOF文件值保留最终数据写入的命令
      3. 对同一数据的多条命令合并为一条命令(为防止数据量过大造成客户端缓冲区溢出,对list、set、hash、zset等类型,每条指令最多写入64个元素)
      • 手动重写bgrewriteaof
      • 自动重写
        1. 自动重写参数
          auto-aof-rewrite-min-size size
          auth-aof-rewrite-percentage percentage%
          
        2. 自动重写参数对比条件
          aof_current_size   
          aof_base_size
          
        3. 自动重写触发条件
          1. aof_current_size > auto-aof-rewrite-min-size
          2. aof_base_size/(aof_current_size-aof_base_size) >= auth-aof-rewrite-percentage
    • 特点:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾

    • 优点:可以最大程度保证数据不丢

    • 缺点:日志记录量级比较大

  • 两种持久化方式的区别

    • RDB:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能
    • AOF:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog
  • RDB与AOF如何选择

    1. 对数据非常敏感,优先使用AOF everysec持久化策略,在该策略下Redis仍然可以保持很好的性能,出现问题时最多丢失1s的数据(AOF文件较大,恢复较慢)
    2. 数据呈现阶段有效性,优先使用RDB持久化策略,在该策略下Redis可以做到阶段性数据持久化,且恢复速度较快
    • 综合
      1. RDB与AOF各有利弊
      2. AOF数据相对于RDB更加安全
      3. RDB相对于AOF在大数据集恢复时速度更快
      4. 灾难恢复选择RDB
      5. 可以同时开启RDB与AOF,重启后优先使用AOF来恢复数据,降低丢失的数据量

Redis数据类型

String数据类型的操作

操作 描述
set 添加/修改数据
get 获取数据
del 删除数据
mset 添加/修改多个数据
mget 获取多个数据
strlen 获取数据字符个数(字符串长度)
append 追加信息到原始信息的尾部(如果不存在则新建)返回长度
incr 设置数值数据增加1
incrby 设置数值数据增加指定的值(整数)
incrbyfloat 设置数值数据增加指定的值(浮点数)
decr 设置数值数据减少1
incrby 设置数值数据减少指定的值(整数)
setex 设置数据有指定的生命周期(s)
psetex 设置数据有指定的生命周期(ms)

String数据类型注意事项

  • nil代表空值
  • 单个value最大512MB
  • 数值计算最大范围9223372036854775807
  • key命名规则 表名:主键名:主键值:属性名 = value

Hash数据类型的操作

操作 描述
hset 添加/修改数据
hget 获取数据
hmset 添加/修改多个数据
hmget 获取多个数据
hdel 删除数据
hlen 获取哈希表中字段的数量
hexists 获取哈希表中是否存在指定的字段
hkeys 获取哈希表中所有的字段名
hvalues 获取哈希表中所有的字段值
hincrby 设置指定字段的数值数据增加指定的值(整数)
hincrbyfloat 设置指定字段的数值数据增加指定的值(浮点数)
hsetnx 如果字段内有值则不操作

Hash数据类型注意事项

  • Hash 类型下的vlaue只能存储字符串,不允许存储其他数据类型,不存在嵌套,如果入局未找到对应的值为nil
  • 每个Hash可以存储2^32 - 1 个键值对
  • hgetall操作可以获取全部属性,如果内部字段过多,遍历整体数据效率会很低,可能会成为数据访问的瓶颈

List数据类型的操作(双向链表)

操作 描述
lpush 添加/修改数据(左进)
rpush 添加/修改数据(右进)
lrange 根据范围获取数据
lindex 根据index获取数据
llen 获取长度
lpop 获取并移除数据(左出)
rpop 获取并移除数据(右出)
blpop 获取并移除数据,如果列表内没有数据则等待指定时间(左出)
brpop 获取并移除数据,如果列表内没有数据则等待指定时间(右出)
lrem 移除指定数据

List数据类型注意事项

  • List中保存的数据都是string类型
  • 每个List可以存储2^32 - 1 个元素
  • List具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以入栈的形式进行入栈出栈操作

Set数据类型的操作

操作 描述
sadd 添加数据
smembers 获取全部数据
srem 删除数据
scard 获取集合的数据总量
sismember 判断集合中是否包含指定数据
srandemember 随机获取集合中指定数量的数据
spop 随机获取集合中的某个数据并将该数据移出集合
sinter 取出集合的交集
sunion 取出集合的并集
sdiif 取出集合的差集
sinterstore 取出集合的交集并存储到指定的集合中
sunionstore 取出集合的并集并存储到指定的集合中
sdiifstore 取出集合的差集并存储到指定的集合中
smove 将指定数据从原始集合移动到目标集合中

Sorted_Set数据类型的操作

操作 描述
zadd 添加数据
zrange 获取全部数据(正序)
zrevrange 获取全部数据(倒序)
zrem 删除数据
zrangebyscore 按照条件获取数据(正序)
zrevrangebyscore 按照条件获取数据(倒序)
zremrangebyrank 按照索引删除数据
zremrangebyscore 按照条件删除数据
zcard 获取集合数据总量
zcount 根据条件获取集合数据总量
zinterstore 交集操作
zunionstore 并集操作
zrank 获取数据对应的索引(正序)
zrevrank 获取数据对应的索引(倒序)
zscore 获取score值
zincrby 修改score值

通用命令

Key通用命令

操作 描述
del 删除指定key
exists 判断key是否存在
type 获取key的类型
expire 为key设置有效期(s)
pexpire 为key设置有效期(ms)
expireat 为key设置有效期(s),使用timestamp
pexpireat 为key设置有效期(ms),使用timestamp
ttl 获取key的有效期(s)
pttl 获取key的有效期(ms)
persist 切换key的时效性转为永久性
keys 查询key(支持通配符)
rename 修改key名称
renamenx 如果目标名称存在则失败
sort 对所有key排序
help @generic 其他key通用操作

数据库通用命令

操作 描述
select 切换数据库
echo 打印消息
ping 打印消息
move 移动数据到指定DB
dbsize 获取keys数量
flushdb 清除当前数据库的数据
flushall 清除所有数据库的数据
info 查询信息
client list 列出客户端
client kill 踢出客户端
config get * 查询配置项
config resetstat 重置统计
config set 动态修改
config rewrite 保存修改到配置文件
monitor 监控实时指令
shutdown 关闭服务器
save 前台写入数据到磁盘
bgsave 后台调用fork()函数开启子线程写入数据到磁盘

Redis事务(乐观锁)

事务的基本操作

  • 开启事务(设定事务的开启位置,后续的所有指令加入到事务中)
    multi 
    
  • 执行事务(设定事务的结束位置并执行队列中的所有指令,与multi成对出现)
    exec
    
  • 取消事务(取消当前事务的定义并取消所有在队列中的指令)
    discard 
    

Redis主从复制

RedisSlave需要开启持久化并设置和MASTER相同的密码,在Slave更换MASTER之后会删除之前的所有数据,重新从新的MASTER同步数据。但当断开同步关系之后不会删除当前已经同步过的数据。

配置主从复制在5.0版本之后命令发生变化,使用replicaof masterIP port,在5.0之前的版本用的命令是slaveof命令,配置文件内也使用此选项。

config set masterauth password

将配置保存到redis配置文件

echo -e "replicaof ip port\nasterauth password" >> /apps/redis/etc/redis.conf

查看slave状态可以使用info replication

# Replication
role:slave  # 当前redis的角色
master_host:172.20.1.101 
master_port:6379
master_link_status:up  # master 连接状态
master_last_io_seconds_ago:2   # 检测master状态倒计时 repl-ping-replica-period选项定义,默认10
master_sync_in_progress:0    # 同步状态
slave_repl_offset:545   
slave_priority:100   # 优先级
slave_read_only:1   # 只读
replica_announced:1
connected_slaves:0    # 已连接的从节点数
master_failover_state:no-failover
master_replid:dd2749f5a4e443ba9cf5203d5386e34043db11aa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:545
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:545

redis-Cluster配置

  1. 创建集群之前需要修改配置文件打开cluster-enabled yes cluster-config-file filename
redis-cli -a 123456 --cluster create --cluster-replicas 1 172.20.1.1:6379 172.20.1.2:6379 172.20.1.3:6379 172.20.1.4:6379 172.20.1.5:6379 172.20.1.6:6379

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.20.1.5:6379 to 172.20.1.1:6379
Adding replica 172.20.1.6:6379 to 172.20.1.2:6379
Adding replica 172.20.1.4:6379 to 172.20.1.3:6379
M: cb6ed6788013b82422dde56426b49c458c8443f4 172.20.1.1:6379
   slots:[0-5460] (5461 slots) master
M: 7662cfc1db4c64e8d55e58f8587c587756741b8e 172.20.1.2:6379
   slots:[5461-10922] (5462 slots) master
M: ab658b879f482b1840aa4af9e64ed65dee687c06 172.20.1.3:6379
   slots:[10923-16383] (5461 slots) master
S: 1b97b4a960fb82a4c14b00fe69181364e34dc11f 172.20.1.4:6379
   replicates ab658b879f482b1840aa4af9e64ed65dee687c06
S: cddafbed60a366bb525e4d76f94c5126108cddd1 172.20.1.5:6379
   replicates cb6ed6788013b82422dde56426b49c458c8443f4
S: 925c64a13537e2403922de354ce7db5468401462 172.20.1.6:6379
   replicates 7662cfc1db4c64e8d55e58f8587c587756741b8e
Can I set the above configuration? (type ‘yes‘ to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 172.20.1.1:6379)
M: cb6ed6788013b82422dde56426b49c458c8443f4 172.20.1.1:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: cddafbed60a366bb525e4d76f94c5126108cddd1 172.20.1.5:6379
   slots: (0 slots) slave
   replicates cb6ed6788013b82422dde56426b49c458c8443f4
M: 7662cfc1db4c64e8d55e58f8587c587756741b8e 172.20.1.2:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 925c64a13537e2403922de354ce7db5468401462 172.20.1.6:6379
   slots: (0 slots) slave
   replicates 7662cfc1db4c64e8d55e58f8587c587756741b8e
S: 1b97b4a960fb82a4c14b00fe69181364e34dc11f 172.20.1.4:6379
   slots: (0 slots) slave
   replicates ab658b879f482b1840aa4af9e64ed65dee687c06
M: ab658b879f482b1840aa4af9e64ed65dee687c06 172.20.1.3:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
  1. 为slave配置masterauth
redis-cli 
auth 123456
info replication
config set masterauth 123456
  1. 修改配置文件添加masterauth选项
masterauth 123456

Redis安装配置

上一篇:Kentico selectall


下一篇:react中嵌入高德地图并Marker标点