Redis 部署与查询命令

Redis的安装部署

使用系统的包管理器来安装redis :

1
dnf install redis 

或者直接通过容器拉取redis容器 :

1
2
docker pull redis
docker run -d --name my-redis -p 6379:6379 redis:latest

Redis 文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@iZbp19tqlmjz1dmnm8w43uZ _posts]# whereis redis
redis: /usr/lib64/redis /etc/redis.conf

# 重要配置
bind 127.0.0.1 ::1
# 配置环回口监听, 如果需要从外部访问要改为 bind 0.0.0.0
port 6379
# 传输端口,默认6379
daemonize no
# 是否作为后台进程执行,默认是no 即前台运行
requirepass yourpassword
# 配置数据库密码
# 启动redis 服务器
redis-server path/your_redis.conf
# 需要使用自定义的配置文件启动,自定义配置才会生效

配置Redis作为服务在服务器上启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 设置.services文件
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/redis-server /etc/my_redis/redis.conf # 定义启动项
ExecStop=/usr/bin/redis-cli -a yourpassword shutdown # 定义结束过程
Restart=always
User=redis
Group=redis

# Optional: Make sure redis has permission to write to the PID/log/data files
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
#需要注意配置为linux服务时,要将daemonize设置为no
sudo systemctl daemon-reload
#重新加载守护进程配置
sudo systemctl enable redis
#配置redis开机启动
sudo systemctl start redis
#启动redis
redis-cli -p your_port -a your_password
#进入redis

Redis支持的数据结构与常用查询

通用命令

KEYS 查看符合模板的所有key

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 匹配符	含义
# * 匹配任意个字符
127.0.0.1:6380> keys *
1) "people"
2) "b"
3) "25"
4) "user"
# ? 匹配任意单个字符
127.0.0.1:6380> keys ?
1) "b"
# [abc] 匹配 a 或 b 或 c
127.0.0.1:6380> keys [eb]
1) "b"
2) "e"

DEL 删除一个指定的key

1
2
127.0.0.1:6380> del e
(integer) 1

EXISTS 判断key是否存在

1
2
3
4
127.0.0.1:6380> exists b
(integer) 1
127.0.0.1:6380> exists e
(integer) 0

EXPIRE 给一个key设置有效期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
EXPIRE  item  scends
TTL # 查询剩余有效期
127.0.0.1:6380> set a 5
OK
127.0.0.1:6380> expire a 10
(integer) 1
127.0.0.1:6380> ttl a
(integer) 8
127.0.0.1:6380> ttl a
(integer) 3
127.0.0.1:6380> ttl a
(integer) 0
127.0.0.1:6380> ttl a
(integer) -2
127.0.0.1:6380> get a
(nil)

字符串String

String

  • string
  • int
  • float

String

set/get 设置/获取 k-v 键值对

1
2
3
4
5
set key value
# 设置 k-v 键值对
get key
- value
# 获取对应key的值

mset/mget 同时设置/获取多组键值对

1
2
3
4
5
6
7
127.0.0.1:6380> mset z 15 y 12 x 18
OK
127.0.0.1:6380> mget z y x
1) "15"
2) "12"
3) "18"

incr 指定对应键的值自增

1
2
127.0.0.1:6380> incr z
(integer) 16

incrby 自增自定义步长

1
2
127.0.0.1:6380> incrby z 8
(integer) 24

incrbyfloat 增加浮点数数值步长

1
2
127.0.0.1:6380> incrbyfloat z 0.5
"24.5"

setnx 设置值,如果该key已经存在数值,则不会修改原值

1
2
3
4
127.0.0.1:6380> setnx z 12
(integer) 0
127.0.0.1:6380> get z
"24.5"

setex 设置k-v 并设置超时时间

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6380> setex z 10 18
OK
127.0.0.1:6380> ttl z
(integer) 8
127.0.0.1:6380> ttl z
(integer) 1
127.0.0.1:6380> ttl z
(integer) -2
127.0.0.1:6380> get z
(nil)

Hash 哈希表(散列表)

hset/hget 向哈希表中设置/读取k-v

1
2
3
4
127.0.0.1:6380> hset m name luccy
(integer) 1
127.0.0.1:6380> hget m name
"luccy"

hmset/hmget 向哈希表中一次性设置多对k-v

1
2
3
4
5
127.0.0.1:6380> hmset o age 12 name joi
OK
127.0.0.1:6380> hmget o age name
1) "12"
2) "joi"

hgetall 获取hask中的所有键值

1
2
3
4
5
127.0.0.1:6380> hgetall o
1) "age"
2) "12"
3) "name"
4) "joi"

hkeys/hvals获取所有键/值

1
2
3
4
5
6
127.0.0.1:6380> hkeys o
1) "age"
2) "name"
127.0.0.1:6380> hvals o
1) "12"
2) "joi"

HINCRBY 向hash中的某个键指定步长自增

1
2
127.0.0.1:6380> hincrby o age 3
(integer) 15

HSETNX 向hash中的某个键设置值,如果已经存在值,则保留原值

1
2
3
4
127.0.0.1:6380> hsetnx o age 18
(integer) 0
127.0.0.1:6380> hget o age
"15"

List 列表(实现为一个双向链表)

LPUSH/LPOP 从左侧插入/弹出值

1
2
3
4
5
127.0.0.1:6380> lpush q 28 29 30
(integer) 3
127.0.0.1:6380> lpop q 1
1) "30"
# 插入多个值时,是依次从左侧插入值,所以30处于链表头部

RPUSH/RPOP 从右侧插入/弹出值

1
2
3
4
5
127.0.0.1:6380> rpush q 18 19 20
(integer) 5
127.0.0.1:6380> rpop q 1
1) "20"
# 右侧插入多个值时,每个新插入的值插入在尾部,所以20处于尾部

LRANGE key start end 查询给出范围内的值

1
2
3
4
5
127.0.0.1:6380> lrange q 0 4
1) "29"
2) "28"
3) "18"
4) "19"

BLPOP 设置阻塞时间的右侧弹出

1
2
3
4
127.0.0.1:6380> blpop q 5
(nil)
(5.07s)
# 注意这里弹出超过list长度的值会弹出最右侧的值

Set 集合

SADD 向set中添加元素

1
2
127.0.0.1:6380> sadd p 1 2 3 4 5
(integer) 5

SREM 移除set中的元素

1
2
3
4
5
6
7
127.0.0.1:6380> srem p 1
(integer) 1
127.0.0.1:6380> sinter p
1) "2"
2) "3"
3) "4"
4) "5"

SCARD 返回set中元素的个数

1
2
127.0.0.1:6380> scard p
(integer) 4

SISMEMBER key member 判断是否存在于set中

1
2
3
4
127.0.0.1:6380> sismember p 5
(integer) 1
127.0.0.1:6380> sismember p 6
(integer) 0

SMEMBERS 获取所有成员

1
2
3
4
5
127.0.0.1:6380> smembers p
1) "2"
2) "3"
3) "4"
4) "5"

SINTER key1 key2 求key1 与key2的交集

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6380> smembers p
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6380> sadd j 2 5 8 9 12
(integer) 5
127.0.0.1:6380> sinter p j
1) "2"
2) "5"

SDIFF 差集

1
2
3
4
5
6
7
8
127.0.0.1:6380> sdiff p j
1) "3"
2) "4"
127.0.0.1:6380> sdiff j p
1) "8"
2) "9"
3) "12"
# 左并联

SUNION 求key1 key2 的并集

1
2
3
4
5
6
7
8
127.0.0.1:6380> sunion p j
1) "2"
2) "3"
3) "4"
4) "5"
5) "8"
6) "9"
7) "12"

Sortedset 有序集合

ZADD key score member 设置权重并添加成员

1
2
3
127.0.0.1:6380> zadd r 24 48
(integer) 1
127.0.0.1:6380> zadd r 17 56 19 62 4 77

ZREM key member

1
2
127.0.0.1:6380> zrem r 48
(integer) 1

ZSCORE key member 获取成员权重

1
2
127.0.0.1:6380> zscore r 77
"4"

ZRANK key member 获取成员序号

1
2
127.0.0.1:6380> zrank r 62
(integer) 3

ZCARD key 获取元素个数

1
2
127.0.0.1:6380> zcard r
(integer) 4

ZCOUNT key min max 根据权重获取数据的个数

1
2
127.0.0.1:6380> zcard r
(integer) 4

ZINCRBY 根据成员,向其权重自增

1
2
127.0.0.1:6380> zincrby r 2 62
"21"

ZRANGE 根据排序筛选范围内的值

1
2
3
4
5
127.0.0.1:6380> zrange r 2 90
1) "36"
2) "56"
3) "62"

ZRANGEBYSCORE根据权重筛选范围内的值

1
2
3
4
5
6
127.0.0.1:6380> zrangebyscore r 2 90
1) "52"
2) "77"
3) "36"
4) "56"
5) "62"

ZDIFF 取多个有序集合的差集

1
2
3
4
127.0.0.1:6380> zdiff 2 s r
1) "82"
2) "63"
3) "48"

ZINTER 取多个有序集合的交集

1
2
127.0.0.1:6380> zinter 3 s r t
1) "56"

ZUNION 取多个有序集合的并集

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6380> zunion 3 s r t
1) "52"
2) "76"
3) "77"
4) "36"
5) "82"
6) "62"
7) "63"
8) "48"
9) "56"

Redis 部署与查询命令
http://gadoid.io/2025/04/10/Redis-部署与查询命令/
作者
Codfish
发布于
2025年4月10日
许可协议