Redis
一、redis介绍
- Redis是一个缓存数据库,主要是做缓存。用户请求数据时,第一次先请求redis中的数据,redis中没有,再去请求后台数据库
- Redis是一种内存型的nosql数据库,一般是用来缓存加速的,并且能够支持数据持久化存储,可以将数据持久化到硬盘中
- Redis存储数据的方法是以key-value的形式
- Redis数据类型支持字符串、列表、哈希等多种类型
二、redis的编译安装
1、初始化服务器
- 关闭防火墙
- 关闭selinux
- 修改主机名
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
- 下载redis
https://download.redis.io/releases/redis-6.2.12.tar.gz
- 安装编译安装依赖包
yum install -y gcc gcc-c++ make openssl openssl-devel cmake
- 编译安装
# 上传并解压安装包 tar -zxvf redis-6.2.12.tar.gz -C /opt/ # 进入redis目录 cd /opt/redis-6.2.12/ # 编译安装(大约2分钟) make && make install
- 检查安装是否正常
[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
- 拷贝配置文件
# 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客户端登录和认证
- 没有密码的redis
redis-cli # 默认127.0.0.1:6379 redis-cli -h IP redis-cli -h IP -p PORT
- 设置密码时
[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的常用数据类型
- 字符串
- 列表、集合
- 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运维监控命令
-
查看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
-
监控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"
-
查看redis的详细信息
# 查看全部模块的详细信息 redis-cli -a Admin@123 info # 查看单独模块的信息 redis-cli -a Admin@123 info cluster
六、redis配置动态更新
redis有两种更新配置文件的方法
- 修改配置文件,重启redis服务才能生效
- 实时更新,不需要重启服务
[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、创建用户
-
查看权限列表
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"
-
创建用户
# 创建普通用户并授予get权限 127.0.0.1:6379> acl setuser t1 on >123456 ~* +get OK # 参数说明: t1 --- 用户名 123456 --- 密码 ~* --- 所有数据 +get --- 添加get权限
-
使用普通用户登录
[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、慢日志
- 查看慢日志的配置
127.0.0.1:6379> config get slow* 1) "slowlog-max-len" 2) "128" # 最多记录条数 3) "slowlog-log-slower-than" 4) "10000" # 当命令执行时间超过10S将会记录一条慢日志