1. Redis 安装
1.1 yum安装
yum install redis -y
redis-server --version # 查看Redis版本
Redis server v=6.2.7 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=ec192bdd77ecd321
systemctl start redis # 启动Redis服务
systemctl enable redis # 配置Redis开机自启动
systemctl status redis # 验证Redis是否成功启动,如果Redis成功启动,将显示"active (running)"的状态
redis-cli # 连接到Redis服务器
127.0.0.1:6379> keys *
(empty array)
# Redis默认监听在本地回环地址(127.0.0.1)的默认端口(6379)。如果需要从其他主机访问Redis,需要修改Redis的配置文件。
vi /etc/redis/redis.conf
# 找到bind行,并将其注释掉(添加#符号)
# bind 127.0.0.1
# 重新启动Redis服务,使配置更改生效
systemctl restart redis
Bash1.2 源码安装
官网:https://redis.io/
最新稳定版下载地址:https://download.redis.io/redis-stable.tar.gz
其他版本下载地址:https://download.redis.io/releases/
# 下载Redis源码
wget https://download.redis.io/redis-stable.tar.gz
# 解压源码包
tar -xf redis-stable.tar.gz
# 安装编译依赖
yum groupinstall "Development Tools" -y
yum install jemalloc-devel -y
# 进入解压后的目录
cd redis-stable
# 编译
# make -j4 # 指定编译任务并发个数为4,一般指定为cpu核心数的两倍
# make -j # 尽可能多的运行并发任务
make PREFIX=/usr/local/redis install # 编译Redis并安装到指定的路径
# 将Redis添加到环境变量
vim /etc/profile.d/redis.sh
export PATH=/usr/local/redis/bin:$PATH
# 拷贝配置文件模版
mkdir /usr/local/redis/conf/
cp /root/redis-stable/redis.conf /usr/local/redis/conf/
# 修改配置文件
vim /usr/local/redis/conf/redis.conf
...
# 1、修改:以守护进程的方式运行
daemonize yes
# 2、修改:0.0.0.0意味着接受任意IP的连接请求。
bind 0.0.0.0
# 3、增加:设置redis的登录密码
requirepass 123
...
# 将Redis加入systemd管理
vim /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 重载使配置生效
systemctl daemon-reload
# 启动Redis服务并设置开机自启
systemctl start redis.service
systemctl enable redis.service
# 客户端登录
redis-cli -h 192.168.2.104 -p 6379 -a '123'
# 或者登录后再用AUTH认证
redis-cli -h 192.168.2.104 -p 6379
192.168.2.104:6379> keys *
(error) NOAUTH Authentication required.
192.168.2.104:6379> AUTH 123
OK
Bash2. Redis 基本操作
2.1. 键(Key)操作
# 查看所有,⽣产中禁⽤[可能键值对很多, redis会崩溃, 耗费资源, ⽽且获取不到信息]
keys *
# 设置键值对
SET key value # 示例:SET name "Alice"
# 获取键的值
GET key # 示例:GET name → "Alice"
# 删除键
DEL key # 示例:DEL name
# 检查键是否存在
EXISTS key # 示例:EXISTS name → 1(存在)/0(不存在)
# 设置过期时间(以秒为单位)
EXPIRE key seconds # 示例:EXPIRE temp_key 60,将键"temp_key"的过期时间设置为60秒。
# 查看剩余生存时间
TTL key # 示例:TTL temp_key,查询结果-1永不过期,-2已经过期,5代表剩余5秒过期。
Bash2.2. 数据结构操作
字符串(String):
# 设置键值对
SET counter 123
# 自增1 → "123" → "124"
INCR counter
# 增加 n
INCRBY counter 10
# 扩展命令(Redis 6.2+)支持浮点数加减
INCRBYFLOAT counter 1.5
INCRBYFLOAT counter -1.5
# 自减1
DECR counter
DECRBY counter 5 # 减5
# 设置键值对
SET msg hello
# 追加 → "hello world"
APPEND msg " world"
# 截取,表示获取从索引 0 到 4 的字符(包含两端),返回 "hello"
GETRANGE msg 0 4
Bash哈希(Hash):
# hash类型,类似字典结构
# 向哈希表 user 中设置多个字段
HSET user name "Bob" age 30
# 获取哈希表 user 中指定字段 name 的值。
HGET user name
# 获取哈希表 user 的所有字段和值。
HGETALL user
# 将哈希表 user 的 age 字段值增加 1,负数则减
HINCRBY user age 1
Bash列表(List):
# 从列表左侧(头部)插入元素,如果列表不存在,会自动创建
lpush namelist "Bob" "Tom" "Jack"
lrange namelist 0 -1
1) "Jack"
2) "Tom"
3) "Bob"
lpush namelist "lili"
lrange namelist 0 -1
1) "lili"
2) "Jack"
3) "Tom"
4) "Bob"
# 从列表 右侧(尾部) 弹出并返回一个元素。
RPOP namelist
"Bob"
lrange namelist 0 -1
1) "lili"
2) "Jack"
3) "Tom"
# 查看列表
lrange namelist 0 0 # start为 0,stop也为 0,代表取 0 号索引的元素
lrange namelist 0 -1 # 取出所有
LLEN namelist # 返回列表长度
Bash无序集合(Set):
# 无序集合元素不能重复
# 向集合 tags 中添加一个或多个元素(自动去重),如果集合 tags 不存在,会自动创建
SADD tags "redis" "db"
# 返回集合中的所有元素(无序)
SMEMBERS tags
# 检查元素 "db" 是否存在于集合 tags 中,返回 1 存在,0 不存在。
SISMEMBER tags "db"
# 返回多个集合的交集
SINTER tags1 tags2
Bash有序集合(ZSet):
# 语法:ZADD key score1 member1 [score2 member2] 会按照分数排序,分数大的往后排
# 向有序集合 leaderboard 中添加成员及其分数(score),如果集合不存在,会自动创建。
ZADD leaderboard 100 "Alice" 85 "Bob"
# 按分数升序返回指定排名范围的成员(WITHSCORES 会同时返回分数)
ZRANGE leaderboard 0 -1 WITHSCORES # 从0号索引到最后,即查看所有
1) "Bob"
2) "85"
3) "Alice"
4) "100"
ZRANGE leaderboard 0 -1
1) "Bob"
2) "Alice"
# 返回成员 "Alice" 的降序排名,升序排名用 ZRANK
ZREVRANK leaderboard "Alice"
ZRANK leaderboard "Alice"
Bash3. Redis 发布订阅功能
Redis 的发布订阅(Pub/Sub)是一种消息通信模式,允许发送者(发布者)将消息发送到频道,而订阅者可以接收这些频道上的消息。
基本概念:
- 频道(Channel):消息传输的通道。
- 发布者(Publisher):向频道发送消息的客户端。
- 订阅者(Subscriber):订阅频道并接收消息的客户端。
基本命令:
# 订阅频道,订阅一个或多个频道
SUBSCRIBE channel [channel ...]
# 使用通配符模式订阅多个频道
PSUBSCRIBE pattern [pattern ...]
# 发布消息,向指定频道发布消息
PUBLISH channel message
# 取消订阅
UNSUBSCRIBE [channel [channel ...]]
PUNSUBSCRIBE [pattern [pattern ...]]
Bash使用示例:
订阅者1:
# 订阅名为 news.sports 的频道
SUBSCRIBE news.sports
# 输出解析
1) "subscribe" # 响应类型:订阅操作成功
2) "news.sports" # 你订阅的频道名称
3) (integer) 1 # 当前客户端订阅的频道数量(这里是第一个订阅)
Bash订阅者2:
# 通过通配符订阅多个匹配的频道,订阅所有以 news. 开头的频道。
PSUBSCRIBE news.*
Bash发布者:
# 发布 Redis wins the benchmark! 到 news.sports 频道
PUBLISH news.sports "Redis wins the benchmark!"
Bash