本文最后更新于 2025年9月9日 晚上
Redis的安装部署 使用系统的包管理器来安装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.confbind 127.0.0.1 ::1 port 6379 daemonize no requirepass yourpassword 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 [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 RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.targetsudo systemctl daemon-reloadsudo systemctl enable redissudo systemctl start redis redis-cli -p your_port -a your_password
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" 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)
TYPE 查看key对应值的数据类型
1 2 3 4 127.0.0.1:6380> type mystring string 127.0.0.1:6380> type mylist list
RENAME 重命名key
1 2 127.0.0.1:6380> rename oldkey newkey OK
字符串String String类型支持三种数据格式:
string 字符串
int 整数
float 浮点数
基本操作 SET/GET 设置/获取字符串值
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 SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET] 127.0.0.1:6380> set name "Alice" OK 127.0.0.1:6380> get name"Alice" 127.0.0.1:6380> set session:123 "user_data" EX 3600 OK 127.0.0.1:6380> set lock:resource "locked" NX OK 127.0.0.1:6380> set config:timeout "30" XX OK 127.0.0.1:6380> set counter 5 GET (nil) 127.0.0.1:6380> set counter 10 GET"5"
MSET/MGET 批量设置/获取多个键值对
1 2 3 4 5 6 127.0.0.1:6380> mset name "Bob" age 25 city "Beijing" OK 127.0.0.1:6380> mget name age city 1) "Bob" 2) "25" 3) "Beijing"
字符串操作 STRLEN 获取字符串长度
1 2 3 4 127.0.0.1:6380> set message "Hello Redis" OK 127.0.0.1:6380> strlen message (integer ) 11
GETRANGE 截取字符串
1 2 3 4 127.0.0.1:6380> getrange message 0 4"Hello" 127.0.0.1:6380> getrange message 6 -1"Redis"
SETRANGE 替换字符串的部分内容
1 2 3 4 127.0.0.1:6380> setrange message 6 "World" (integer ) 11 127.0.0.1:6380> get message"Hello World"
APPEND 向字符串末尾追加内容
1 2 3 4 127.0.0.1:6380> append message "!!!" (integer ) 14 127.0.0.1:6380> get message"Hello World!!!"
数值操作 INCR/DECR 自增/自减
1 2 3 4 5 6 127.0.0.1:6380> set counter 10 OK 127.0.0.1:6380> incr counter (integer ) 11 127.0.0.1:6380> decr counter (integer ) 10
INCRBY/DECRBY 按指定步长自增/自减
1 2 3 4 127.0.0.1:6380> incrby counter 5 (integer ) 15 127.0.0.1:6380> decrby counter 3 (integer ) 12
INCRBYFLOAT 浮点数自增
1 2 3 4 127.0.0.1:6380> set price 19.99 OK 127.0.0.1:6380> incrbyfloat price 0.01"20"
条件设置 SETNX 仅在键不存在时设置值
1 2 3 4 127.0.0.1:6380> setnx lock:user:123 "processing" (integer ) 1 127.0.0.1:6380> setnx lock:user:123 "processing" (integer ) 0
SETEX 设置值并指定过期时间
1 2 3 4 127.0.0.1:6380> setex session:abc123 3600 "user_session_data" OK 127.0.0.1:6380> ttl session:abc123 (integer ) 3599
Hash 哈希表(散列表) Hash类型用于存储对象,相当于一个小型的key-value数据库。
基本操作 HSET/HGET 设置/获取哈希表中的字段
1 2 3 4 127.0.0.1:6380> hset user:1001 name "Alice" age 25 email "alice@example.com" (integer ) 3 127.0.0.1:6380> hget user:1001 name"Alice"
HMSET/HMGET 批量设置/获取多个字段
1 2 3 4 5 6 127.0.0.1:6380> hmset product:123 name "Laptop" price 999.99 stock 50 OK 127.0.0.1:6380> hmget product:123 name price stock 1) "Laptop" 2) "999.99" 3) "50"
HGETALL 获取哈希表中所有字段和值
1 2 3 4 5 6 7 127.0.0.1:6380> hgetall user:1001 1) "name" 2) "Alice" 3) "age" 4) "25" 5) "email" 6) "alice@example.com"
字段操作 HKEYS/HVALS 获取所有字段名/字段值
1 2 3 4 5 6 7 8 127.0.0.1:6380> hkeys user:1001 1) "name" 2) "age" 3) "email" 127.0.0.1:6380> hvals user:1001 1) "Alice" 2) "25" 3) "alice@example.com"
HDEL 删除指定字段
1 2 127.0.0.1:6380> hdel user:1001 email (integer ) 1
HEXISTS 判断字段是否存在
1 2 3 4 127.0.0.1:6380> hexists user:1001 name (integer ) 1 127.0.0.1:6380> hexists user:1001 email (integer ) 0
HLEN 获取字段数量
1 2 127.0.0.1:6380> hlen user:1001 (integer ) 2
HSTRLEN 获取字段值的长度
1 2 127.0.0.1:6380> hstrlen user:1001 name (integer ) 5
数值操作和条件设置 HINCRBY 对字段值进行数值自增
1 2 3 4 127.0.0.1:6380> hincrby user:1001 age 1 (integer ) 26 127.0.0.1:6380> hincrby product:123 stock -5 (integer ) 45
HSETNX 仅在字段不存在时设置值
1 2 3 4 127.0.0.1:6380> hsetnx user:1001 created_at "2025-01-01" (integer ) 1 127.0.0.1:6380> hsetnx user:1001 created_at "2025-01-02" (integer ) 0
HRANDFIELD 随机获取字段
1 2 3 127.0.0.1:6380> hrandfield user:1001 2 1) "name" 2) "age"
List 列表(双向链表) List是一个有序的字符串列表,支持从两端进行插入和删除操作。
插入操作 LPUSH/RPUSH 从左/右侧插入元素
1 2 3 4 127.0.0.1:6380> lpush tasks "task3" "task2" "task1" (integer ) 3 127.0.0.1:6380> rpush tasks "task4" "task5" (integer ) 5
LPUSHX/RPUSHX 仅在列表存在时从左/右侧插入
1 2 3 4 127.0.0.1:6380> lpushx tasks "task0" (integer ) 6 127.0.0.1:6380> lpushx nonexist "task" (integer ) 0
LINSERT 在指定元素前/后插入新元素
1 2 3 4 127.0.0.1:6380> linsert tasks BEFORE "task3" "task2.5" (integer ) 7 127.0.0.1:6380> linsert tasks AFTER "task1" "task1.5" (integer ) 8
查询操作 LRANGE 查询指定范围的元素
1 2 3 4 5 6 7 8 9 127.0.0.1:6380> lrange tasks 0 -1 1) "task0" 2) "task1" 3) "task1.5" 4) "task2" 5) "task2.5" 6) "task3" 7) "task4" 8) "task5"
LINDEX 获取指定位置的元素
1 2 3 4 127.0.0.1:6380> lindex tasks 0"task0" 127.0.0.1:6380> lindex tasks -1"task5"
LPOS 查找元素的位置
1 2 3 4 5 6 127.0.0.1:6380> lpos tasks "task3" (integer ) 5 127.0.0.1:6380> lpos tasks "task" COUNT 2 MAXLEN 10 1) (integer ) 0 2) (integer ) 1
LLEN 获取列表长度
1 2 127.0.0.1:6380> llen tasks (integer ) 8
删除和弹出操作 LPOP/RPOP 从左/右侧弹出元素
1 2 3 4 5 127.0.0.1:6380> lpop tasks 2 1) "task0" 2) "task1" 127.0.0.1:6380> rpop tasks 1 1) "task5"
LREM 删除指定数量的指定元素
1 2 3 4 5 6 127.0.0.1:6380> lrem tasks 1 "task1.5" (integer ) 1
LTRIM 保留指定范围的元素,删除其他元素
1 2 127.0.0.1:6380> ltrim tasks 1 -2 OK
阻塞操作 BLPOP/BRPOP 阻塞式弹出元素
1 2 3 4 5 6 7 8 9 127.0.0.1:6380> blpop empty_list 5 (nil) (5.06s) 127.0.0.1:6380> blpop tasks 5 1) "tasks" 2) "task2"
Set 集合 Set是一个无序的、不重复的字符串集合。
基本操作 SADD 向集合添加元素
1 2 3 127.0.0.1:6380> sadd languages "Python" "Java" "Go" "Python" (integer ) 3
SMEMBERS 获取集合的所有成员
1 2 3 4 127.0.0.1:6380> smembers languages 1) "Go" 2) "Java" 3) "Python"
SREM 从集合中移除元素
1 2 127.0.0.1:6380> srem languages "Java" (integer ) 1
SPOP 随机移除并返回元素
1 2 127.0.0.1:6380> spop languages 1 1) "Go"
查询操作 SCARD 获取集合元素个数
1 2 127.0.0.1:6380> scard languages (integer ) 1
SISMEMBER 判断元素是否存在于集合中
1 2 3 4 127.0.0.1:6380> sismember languages "Python" (integer ) 1 127.0.0.1:6380> sismember languages "C++" (integer ) 0
SRANDMEMBER 随机获取元素(不删除)
1 2 127.0.0.1:6380> srandmember languages 2 1) "Python"
集合运算 SINTER 求多个集合的交集
1 2 3 4 5 6 127.0.0.1:6380> sadd backend "Python" "Java" "Go" (integer ) 3 127.0.0.1:6380> sadd frontend "JavaScript" "TypeScript" "Python" (integer ) 3 127.0.0.1:6380> sinter backend frontend 1) "Python"
SDIFF 求多个集合的差集
1 2 3 4 5 6 127.0.0.1:6380> sdiff backend frontend 1) "Java" 2) "Go" 127.0.0.1:6380> sdiff frontend backend 1) "JavaScript" 2) "TypeScript"
SUNION 求多个集合的并集
1 2 3 4 5 6 127.0.0.1:6380> sunion backend frontend 1) "Go" 2) "Java" 3) "JavaScript" 4) "Python" 5) "TypeScript"
SMOVE 将元素从一个集合移动到另一个集合
1 2 127.0.0.1:6380> smove backend frontend "Java" (integer ) 1
Sorted Set 有序集合 Sorted Set是一个有序的、不重复的字符串集合,每个元素都关联一个分数用于排序。
基本操作 ZADD 添加元素及其分数
1 2 3 4 5 127.0.0.1:6380> zadd leaderboard 100 "Alice" 85 "Bob" 92 "Charlie" (integer ) 3 127.0.0.1:6380> zadd leaderboard NX 95 "David" (integer ) 1
ZRANGE 按排名范围获取元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 127.0.0.1:6380> zrange leaderboard 0 -1 1) "Bob" 2) "Charlie" 3) "David" 4) "Alice" 127.0.0.1:6380> zrevrange leaderboard 0 2 1) "Alice" 2) "David" 3) "Charlie" 127.0.0.1:6380> zrange leaderboard 0 -1 WITHSCORES 1) "Bob" 2) "85" 3) "Charlie" 4) "92" 5) "David" 6) "95" 7) "Alice" 8) "100"
ZRANGEBYSCORE 按分数范围获取元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 127.0.0.1:6380> zrangebyscore leaderboard 90 100 WITHSCORES 1) "Charlie" 2) "92" 3) "David" 4) "95" 5) "Alice" 6) "100" 127.0.0.1:6380> zrangebyscore leaderboard (90 +inf 1) "Charlie" 2) "David" 3) "Alice"
ZRANGEBYLEX 按字典序范围获取元素
1 2 3 4 127.0.0.1:6380> zrangebylex leaderboard [A [D 1) "Alice" 2) "Bob" 3) "Charlie"
查询操作 ZRANK/ZREVRANK 获取元素的排名
1 2 3 4 127.0.0.1:6380> zrank leaderboard "Alice" (integer ) 3 127.0.0.1:6380> zrevrank leaderboard "Alice" (integer ) 0
ZSCORE 获取元素的分数
1 2 127.0.0.1:6380> zscore leaderboard "Alice" "100"
ZMSCORE 获取多个元素的分数
1 2 3 4 127.0.0.1:6380> zmscore leaderboard "Alice" "Bob" "Charlie" 1) "100" 2) "85" 3) "92"
ZCARD 获取集合中元素的数量
1 2 127.0.0.1:6380> zcard leaderboard (integer ) 4
ZCOUNT 统计分数范围内的元素数量
1 2 127.0.0.1:6380> zcount leaderboard 90 100 (integer ) 3
修改操作 ZINCRBY 增加元素的分数
1 2 127.0.0.1:6380> zincrby leaderboard 5 "Bob" "90"
ZREM 删除元素
1 2 127.0.0.1:6380> zrem leaderboard "Bob" (integer ) 1
ZREMRANGEBYSCORE 按分数范围删除元素
1 2 127.0.0.1:6380> zremrangebyscore leaderboard -inf 90 (integer ) 0
ZREMRANGEBYLEX 按字典序范围删除元素
1 2 127.0.0.1:6380> zremrangebylex leaderboard [A [B (integer ) 1
ZREMRANGEBYRANK 按排名范围删除元素
1 2 127.0.0.1:6380> zremrangebyrank leaderboard 0 0 (integer ) 1
ZPOPMAX/ZPOPMIN 弹出分数最高/最低的元素
1 2 3 4 5 6 127.0.0.1:6380> zpopmax leaderboard 1 1) "Alice" 2) "100" 127.0.0.1:6380> zpopmin leaderboard 1 1) "Charlie" 2) "92"
集合运算 ZDIFF 计算多个有序集合的差集
1 2 3 4 5 6 7 127.0.0.1:6380> zadd set1 1 "a" 2 "b" 3 "c" (integer ) 3 127.0.0.1:6380> zadd set2 2 "b" 4 "d" (integer ) 2 127.0.0.1:6380> zdiff 2 set1 set2 1) "a" 2) "c"
ZINTER 计算多个有序集合的交集
1 2 3 4 5 6 7 8 127.0.0.1:6380> zinter 2 set1 set2 1) "b" 127.0.0.1:6380> zinter 2 set1 set2 WEIGHTS 1 2 AGGREGATE SUM WITHSCORES 1) "b" 2) "6"
ZUNION 计算多个有序集合的并集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 127.0.0.1:6380> zunion 2 set1 set2 WITHSCORES 1) "a" 2) "1" 3) "c" 4) "3" 5) "d" 6) "4" 7) "b" 8) "2" 127.0.0.1:6380> zunion 2 set1 set2 WEIGHTS 2 1 AGGREGATE MAX 1) "a" 2) "b" 3) "d" 4) "c"