redis
  pNDzPQcMbnhQ 2023年11月02日 51 0

Redis

一、redis介绍

  1. Redis是一个缓存数据库,主要是做缓存。用户请求数据时,第一次先请求redis中的数据,redis中没有,再去请求后台数据库
  2. Redis是一种内存型的nosql数据库,一般是用来缓存加速的,并且能够支持数据持久化存储,可以将数据持久化到硬盘中
  3. Redis存储数据的方法是以key-value的形式
  4. Redis数据类型支持字符串、列表、哈希等多种类型

二、redis的编译安装

1、初始化服务器
  1. 关闭防火墙
  2. 关闭selinux
  3. 修改主机名
2、配置阿里源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo >/dev/null 2>&1
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo >/dev/null 2>&1
3. 编译安装redis
  1. 下载redis

    https://download.redis.io/releases/redis-6.2.12.tar.gz

  2. 安装编译安装依赖包
    yum install -y gcc gcc-c++ make openssl openssl-devel cmake
    
  3. 编译安装
    # 上传并解压安装包
    tar -zxvf redis-6.2.12.tar.gz -C /opt/
    
    # 进入redis目录
    cd /opt/redis-6.2.12/
    
    # 编译安装(大约2分钟)
    make && make install
    
  4. 检查安装是否正常
    [root@redis ~]# ll /usr/local/bin/redis-*
    -rwxr-xr-x. 1 root root 4830192 Jul  8 22:45 /usr/local/bin/redis-benchmark
    lrwxrwxrwx. 1 root root      12 Jul  8 22:45 /usr/local/bin/redis-check-aof -> redis-server
    lrwxrwxrwx. 1 root root      12 Jul  8 22:45 /usr/local/bin/redis-check-rdb -> redis-server
    -rwxr-xr-x. 1 root root 5004296 Jul  8 22:45 /usr/local/bin/redis-cli
    lrwxrwxrwx. 1 root root      12 Jul  8 22:45 /usr/local/bin/redis-sentinel -> redis-server
    -rwxr-xr-x. 1 root root 9547888 Jul  8 22:45 /usr/local/bin/redis-server
    
    [root@redis ~]# redis-server -v
    Redis server v=6.2.12 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=709dd565f2229663
    
  5. 拷贝配置文件
    # redis的默认配置文件,之后通过修改,使用配置文件启动redis
    [root@redis redis-6.2.12]# cp redis.conf /etc/
    

ps: 如果系统相同,没必要再每台机器上安装,再一台安装之后,只需将编译好的二进制文件(/usr/local/bin/redis-*)拷贝到其他服务器即可

三、redis的修改配置启动和参数调优

1、修改前拷贝配置文件
[root@redis ~]# cp /etc/redis.conf /etc/redis.conf.bak
2、修改配置文件
# 去除注释和空行
[root@redis ~]# sed -i '^#/d;/^$/d' /etc/redis.conf

# 修改配置文件
bind 0.0.0.0        # 监听地址
port 6379           # 端口号
daemonize yes       # 守护进程方式启动
pidfile "redis.pid" # 进程文件,存放在dir指定的目录中
logfile "redis.log" # 日志文件,存放在dir指定的目录中
dir /data/redis     # 持久化存储目录
requirepass Admin@123   # redis的登录密码
3、启动redis
# 创建dir中指定的目录
[root@redis ~]# mkdir -p /data/redis

# 使用/etc/redis.conf文件启动redis
[root@redis ~]# redis-server /etc/redis.conf
[root@redis ~]# ps -aux | grep redis | grep -v grep
root      23833  0.2  0.4 162516  9864 ?        Ssl  23:24   0:00 redis-server 0.0.0.0:6379
4、调整文件句柄数
# 修改文件句柄数为65535
[root@redis ~]# vim /etc/security/limits.conf 
* - nofile 65535

# 重新连接生效
[root@redis ~]# ulimit -n
65535
5、内核参数调整
# 修改内核参数
[root@redis ~]# vim /etc/sysctl.conf 
net.core.somaxconn = 10240
vm.overcommit_memory = 1

# 刷新生效
[root@redis ~]# sysctl -p
6、重启redis
[root@redis ~]# pkill redis 
[root@redis ~]# redis-server /etc/redis.conf
[root@redis ~]# ps -aux | grep redis | grep -v grep
root      23998  0.1  0.4 162516  9888 ?        Ssl  23:39   0:00 redis-server 0.0.0.0:6379
7、将redis加入到systemd中管理
# 编写systemd文件
vim /usr/lib/systemd/system/redis.service

[Unit]
Description=Redis server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

# 重新加载systemd服务
[root@redis ~]# systemctl daemon-reload

# 启动服务
[root@redis ~]# systemctl enable redis --now
[root@redis ~]# systemctl status redis
● redis.service - Redis server
   Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2023-07-08 23:46:38 CST; 2min 11s ago
 Main PID: 24161 (redis-server)
   CGroup: /system.slice/redis.service
           └─24161 /usr/local/bin/redis-server 0.0.0.0:6379

Jul 08 23:46:38 redis systemd[1]: Starting Redis server...
Jul 08 23:46:38 redis systemd[1]: Started Redis server.

四、redis常用数据类型的基本操作

1、redis-cli客户端登录和认证
  1. 没有密码的redis
    redis-cli       # 默认127.0.0.1:6379
    redis-cli -h IP
    redis-cli -h IP -p PORT
    
  2. 设置密码时
    [root@redis ~]# redis-cli 
    127.0.0.1:6379> AUTH Admin@123
    OK
    127.0.0.1:6379> ping
    PONG
    
    # 或者在连接时指定密码
    [root@redis ~]# redis-cli -a Admin@123
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    127.0.0.1:6379> ping
    PONG
    
2、Redis的常用数据类型
  1. 字符串
  2. 列表、集合
  3. hash哈希、发布和订阅
3、Redis字符串操作
# 增
127.0.0.1:6379> set user test
OK

# 查
127.0.0.1:6379> get user
"test"

# 改
127.0.0.1:6379> set user test1
OK

# 查
127.0.0.1:6379> get user
"test1"

# 查所有
127.0.0.1:6379> keys *
1) "user"

# 删
127.0.0.1:6379> del user
(integer) 1

ps:命令不区分大小写,但是设置的key:value区分大小写

4、非交互式操作
[root@redis ~]# redis-cli -a Admin@123 set username test
OK
[root@redis ~]# redis-cli -a Admin@123 get username
"test"
[root@redis ~]# redis-cli -a Admin@123 del username
(integer) 1

五、redis的不同库切换和运维监控命令

redis默认有16个数据库,配置文件中的默认配置

1、切换数据库
[root@redis ~]# redis-cli 
127.0.0.1:6379> AUTH Admin@123
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> SELECT 1    # 通过select切换不同的数据库
OK

ps1:数据库从0开始编号,所以select 16会切换不成功
ps2:热痛的数据库数据是独立的
2、redis运维监控命令
  1. 查看key

    # 随机获取一个key
    127.0.0.1:6379> RANDOMKEY
    
    # 查看多有的key
    127.0.0.1:6379> KEYS *
    
    # 每次获取11个key,可以循环获取,职到获取所有key
    127.0.0.1:6379> SCAN 0
    
  2. 监控redis的状态

    # 监控redis状态
    [root@redis ~]# redis-cli -a Admin@123 --stat
    ------- data ------ --------------------- load -------------------- - child -
    keys       mem      clients blocked requests            connections          
    0          855.36K  1       0       21 (+0)             8           
    0          855.36K  1       0       22 (+1)             8           
    0          855.36K  1       0       23 (+1)             8           
    0          855.36K  1       0       24 (+1)             8  
    
    # 监控数据操作
    [root@redis ~]# redis-cli -a Admin@123 monitor
    OK
    1688833553.023944 [0 127.0.0.1:33526] "AUTH" "(redacted)"
    1688833553.024352 [0 127.0.0.1:33526] "set" "username" "test"
    
  3. 查看redis的详细信息

    # 查看全部模块的详细信息
    redis-cli -a Admin@123 info
    
    # 查看单独模块的信息
    redis-cli -a Admin@123 info cluster
    

六、redis配置动态更新

redis有两种更新配置文件的方法

  1. 修改配置文件,重启redis服务才能生效
  2. 实时更新,不需要重启服务
    [root@redis ~]# redis-cli -a Admin@123
    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) "Admin@123"
    127.0.0.1:6379> config set requirepass admin    # 修改临时生效,重启后失效
    OK
    127.0.0.1:6379> config rewrite          # 使配置写入配置文件,重启仍然有效
    OK
    

七、redis的多用户管理

redis6之后加入了用户管理,默认的超级管理员用户 default

1、查看用户
127.0.0.1:6379> acl list    # 查看用户列表
1) "user default on #8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 ~* &* +@all"
127.0.0.1:6379> acl getuser default # 查看具体用户的详细信息
 1) "flags"
 2) 1) "on"
    2) "allkeys"
    3) "allchannels"
    4) "allcommands"
 3) "passwords"
 4) 1) "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"
 5) "commands"
 6) "+@all"
 7) "keys"
 8) 1) "*"
 9) "channels"
10) 1) "*"
2、创建用户
  1. 查看权限列表

    127.0.0.1:6379> acl cat
    1) "keyspace"
    2) "read"
    3) "write"
    4) "set"
    5) "sortedset"
    6) "list"
    7) "hash"
    8) "string"
    9) "bitmap"
    10) "hyperloglog"
    11) "geo"
    12) "stream"
    13) "pubsub"
    14) "admin"
    15) "fast"
    16) "slow"
    17) "blocking"
    18) "dangerous"
    19) "connection"
    20) "transaction"
    21) "scripting"
    
  2. 创建用户

    # 创建普通用户并授予get权限
    127.0.0.1:6379> acl setuser t1 on >123456 ~* +get
    OK
    
    # 参数说明:
    t1      --- 用户名
    123456  --- 密码
    ~*      --- 所有数据
    +get    --- 添加get权限
    
  3. 使用普通用户登录

    [root@redis ~]# redis-cli --user t1 -a 123456
    
3、删除用户
127.0.0.1:6379> acl deluser t1
(integer) 1

ps:如果需要保存创建的用户需要使用config rewrite进行保存

八、redis的慢日志和key的有效期

1、慢日志(查询慢时,才会出现慢日志)
  1. 查看慢日志的配置
    127.0.0.1:6379> config get slow*
    1) "slowlog-max-len"
    2) "128"            # 最多记录条数
    3) "slowlog-log-slower-than"
    4) "10000"          # 当命令执行时间超过10S将会记录一条慢日志
    
  2. 慢日志的操作
    slowlog get     # 默认获取最近10条慢日志
    slowlog get 5   # 获取5条
    slowlog len     # 查看慢日志的条数
    slowlog reset   # 清空慢日志
    
2、key的有效期
  1. 查看key的有效期
    127.0.0.1:6379> ttl k1
    (integer) -1
    
    # 结果说明
    -1:表示永久有效
    -2:表示已经删除
    
  2. 设置key的有效期
    127.0.0.1:6379> expire k1 3
    (integer) 1
    
    # 参数说明:
    k1  --- key名
    3   --- 有效期时间,默认秒(s)
    
    # 创建key时设置有效期
    127.0.0.1:6379> set k4 n4 ex 3
    OK
    

九、redis禁用危险命令和压测工具

1、redis中禁用危险命令
  1. redis中的危险命令
    127.0.0.1:6379> flushall    # 清除redis中所有的数据
    127.0.0.1:6379> flushdb     # 清除当前数据库中的说有数据
    127.0.0.1:6379> keys *      # 查询所有的key,当key较多时,会产生慢日志,使得redis变慢
    
  2. 禁用危险命令
    # 编辑配置文件,然后添加一下行,完成后重启redis
    vim /etc/redis.conf
    
    rename-command flushall ""
    rename-command flushdb ""
    rename-command keys ""
    
2. redis压测工具
redis-benchmark -a admin | tee /tmp/a.log

# 参数说明:
-c <client>     --- 默认的并发是50
-n <requests>   --- 默认有10万个请求

十、redis的两种持久化方式存储

1、redis的持久化存储方式
  1. RDB:RDB存储时redis实现的一种存储方式(默认开启)
  2. AOF:AOF的存储方式,直接把操作的命令记录下来,保存到一个文件中,类似于mysql中的binlog日志(默认关闭)
2、RDB存储方式的配置
127.0.0.1:6379> config get dir      # 查看存储设置的路径
1) "dir"
2) "/data/redis"
127.0.0.1:6379> config get dbfilename   # 查看rdb存储的文件名,默认时dump.rdb
1) "dbfilename"
2) "dump.rdb"
127.0.0.1:6379> config get save     # 查看rdb默认的存储机制配置
1) "save"
2) "3600 1 300 100 60 10000"
3、AOF存储方式配置
  1. 关闭RDB存储
    # 开启AOF之前先关闭RDB(持久化存储使用其中一种就可以了,可以同时配置,同时配置AOF会优先生效)
    vim /etc/redis.conf
    # 添加一行
    save ""     
    # 注释一下行
    # save 3600 1
    # save 300 100
    # save 60 10000
    
  2. 开启AOF存储
    127.0.0.1:6379> config get append*      # 查看AOF状态,默认时关闭的
    1) "appendonly"
    2) "no"
    3) "appendfilename"
    4) "appendonly.aof"
    5) "appendfsync"
    6) "everysec"
    
    127.0.0.1:6379> config set appendonly yes   # 开启AOF存储
    127.0.0.1:6379> config rewrite              # 写入配置文件
    
    

十一、redis的主从复制

1、主从复制的概念

Redis的主从复制就是多台redis数据一致,主服务器可用来写入和读取,从服务器仅用来读取,可以通过读写分离,降低写服务的压力

2、redis主从配置
  1. 准备slave节点

    # 不需要重新编译安装redis,只需将编译好的二进制文件以及配置文件拷贝即可
    [root@slave ~]# scp -r 10.0.0.11:/usr/local/bin/redis-* /usr/local/bin/ 
    root@10.0.0.11's password: 
    redis-benchmark                    100% 4717KB  31.4MB/s   00:00    
    redis-check-aof                    100% 9324KB  40.6MB/s   00:00    
    redis-check-rdb                    100% 9324KB  47.7MB/s   00:00    
    redis-cli                          100% 4887KB  57.3MB/s   00:00    
    redis-sentinel                     100% 9324KB  63.9MB/s   00:00    
    redis-server                       100% 9324KB  60.2MB/s   00:00
    
    [root@slave ~]# scp 10.0.0.11:/etc/redis.conf /etc/
    root@10.0.0.11's password: 
    redis.conf                         100% 1868   966.3KB/s   00:00  
    
    [root@slave ~]# redis-cli -v
    redis-cli 6.2.12
    
  2. 主机点配置文件

    bind 0.0.0.0        # 监听地址
    port 6379           # 端口号
    daemonize yes       # 守护进程方式启动
    pidfile "redis.pid" # 进程文件,存放在dir指定的目录中
    logfile "redis.log" # 日志文件,存放在dir指定的目录中
    dir /data/redis     # 持久化存储目录
    requirepass Admin@123   # redis的登录密码
    
  3. 从节点配置文件

    bind 0.0.0.0        # 监听地址
    port 6379           # 端口号
    daemonize yes       # 守护进程方式启动
    pidfile "redis.pid" # 进程文件,存放在dir指定的目录中
    logfile "redis.log" # 日志文件,存放在dir指定的目录中
    dir /data/redis     # 持久化存储目录
    requirepass Admin@123   # redis的登录密码
    
    添加一下配置
    replicaof 10.0.0.11 6379        # 将节点设置为从节点,并指定主节点的ip和port
    masterauth admin                # 主节点的密码
    
    ps:在很长一段时间里,redis一直使用slaveof作为复制命令,但是从5.0版本开始,redis正式将slaveof名命为replicaof命令并逐渐废弃原来的slaveof命令
    

十二、redis哨兵实现主从自动切换

1、哨兵Sentinel实现主从自动切换

Redis主从配置之后,当主挂掉后,业务会有异常 Redsi提供Sentinel工具实现主从自动切换,实现redis的高可用 哨兵的作用:主挂掉之后,从节点自动提升为主几点,,主库恢复后,自动转为从库,预防来回切换

2、哨兵高可用模式搭建(一主两从三哨兵)

为了防止哨兵的单节点故障,一般哨兵也做高可用形式,即多个哨兵同时监控redis的状态 为了方便哨兵的选举,一般哨兵设置为奇数个

  • 规划
    主机 redis角色 哨兵
    10.0.0.11 主redis 哨兵1
    10.0.0.31 从1redis 哨兵2
    10.0.0.32 从2redis 哨兵3
3、部署哨兵模式
  1. 配置一主两从(文中已经添加过从节点,此处不再赘述)
  2. 配置三哨兵
    # 哨兵配饰文件
    vim /etc/sentinel.config
    
    bind 0.0.0.0
    daemonize yes
    port 26379
    dir "/tmp"
    logfile "sentinel.log"
    sentinel monitor mymaster 10.0.0.11 6379 2
    sentinel auth-pass mymaster admin
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 18000
    
    # 启动redis
    redis-sentinel /etc/sentinel.config
    [root@slave2 ~]# ps -aux | grep redis
    root       2071  3.0  0.4 165076  9884 ?        Rsl  18:16   0:20 /usr/local/bin/redis-server 0.0.0.0:6379
    root       2105  0.6  0.4 162516 10012 ?        Ssl  18:24   0:01 redis-sentinel 0.0.0.0:26379 [sentinel]
    root       2122  0.0  0.0 112808   968 pts/0    R+   18:27   0:00 grep --color=auto redis
    
    
    ps:配置哨兵模式之后要在主配置文件中加一行`masterauth "admin"`,因为在哨兵模式下,主节点也随时会成为从节点,恢复后作为从节点,需要和新的主节点通信
    
  3. 验证自动切换主从

    停止主节点上的redis,观察其他两个节点的redis角色 恢复主节点再此查看各个几点的redis角色 停止任意一台哨兵,然后再停止主节点,观察主节点是否能被正常选举

十三、redis cluster集群

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  eHipUjOuzYYH   2023年12月07日   24   0   0 数据乐观锁redis
  P3nxyT0LRuwj   2023年11月24日   63   0   0 缓存redis配置文件
  9JCEeX0Eg8g4   2023年11月22日   22   0   0 数据redis持久化
  9JCEeX0Eg8g4   2023年12月11日   23   0   0 mysql配置文件