首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Redis-数据增删改查(CRUD)

Redis-数据增删改查(CRUD)

作者头像
运维小路
发布2026-01-26 12:56:12
发布2026-01-26 12:56:12
1270
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL

PostgreSQL

MongoDB

Redis(本章节)

Etcd

上个小节介绍了Redis的数据类型,今天这个小节我们就来介绍数据的增改查,其他数据我们介绍的时候都是从库表数据3个方面介绍的,但是Redis比较特殊,虽然有库的概念,但是我们不并需要手工去创建,系统默认给我们16个库(0-15),默认是0库,我们直接向库里面写入数据即可,没有表的概念。

1. 字符串(String)

增(Create)

代码语言:javascript
复制
# 设置单个键值
SET name "张三"
# 设置并指定过期时间(秒)
SETEX token 3600 "abc123"
# 仅当键不存在时设置
SETNX counter 1
# 批量设置
MSET key1 "value1" key2 "value2"
# 追加值
APPEND name "先生"  # 结果:"张三先生"

删(Delete)

代码语言:javascript
复制
# 删除键
DEL name
# 设置过期时间(创建时就过期)
SET key "temp" EX 10
# 设置值并获取旧值
GETSET name "李四"  # 返回旧值"张三"

改(Update)

代码语言:javascript
复制
# 修改值
SET name "王五"

# 数字增减
INCR counter      # 自增1
DECR counter      # 自减1
INCRBY counter 5  # 增加5
DECRBY counter 3  # 减少3

# 浮点数增减
INCRBYFLOAT price 10.5

# 设置新值并返回旧值
GETSET counter 0

查(Read)

代码语言:javascript
复制
# 获取单个值
GET name

# 批量获取
MGET name age email

# 获取字符串长度
STRLEN name

# 获取子字符串
GETRANGE name 0 1  # 获取前2个字符

# 判断是否存在
EXISTS name

# 获取并设置过期
GETEX name EX 60

2. 哈希(Hash)

增(Create)

代码语言:javascript
复制
# 设置单个字段
HSET user:1 name "张三"

# 设置多个字段
HMSET user:1 age 25 email "zhangsan@qq.com"

# 批量设置(HMSET的替代)
HSET user:1 name "张三" age 25

# 仅当字段不存在时设置
HSETNX user:1 name "李四"

删(Delete)

代码语言:javascript
复制
# 删除一个或多个字段
HDEL user:1 email phone

# 删除整个哈希键
DEL user:1

改(Update)

代码语言:javascript
复制
# 修改字段值
HSET user:1 age 26

# 数字字段增减
HINCRBY user:1 age 1
HINCRBYFLOAT user:1 salary 500.5

查(Read)

代码语言:javascript
复制
# 获取单个字段
HGET user:1 name

# 获取多个字段
HMGET user:1 name age email

# 获取所有字段和值
HGETALL user:1

# 获取所有字段名
HKEYS user:1

# 获取所有字段值
HVALS user:1

# 获取字段数量
HLEN user:1

# 判断字段是否存在
HEXISTS user:1 email

# 获取字段值的字符串长度
HSTRLEN user:1 name

3. 列表(List)

增(Create)

代码语言:javascript
复制
# 从左侧插入
LPUSH fruits "apple"
LPUSH fruits "banana" "orange"

# 从右侧插入
RPUSH fruits "grape"

# 在指定元素前后插入
LINSERT fruits BEFORE "banana" "mango"
LINSERT fruits AFTER "apple" "peach"

# 设置指定索引的值
LSET fruits 0 "strawberry"

删(Delete)

代码语言:javascript
复制
# 从左侧弹出
LPOP fruits

# 从右侧弹出
RPOP fruits

# 根据值删除元素
LREM fruits 2 "apple"  # 删除2个"apple"
LREM fruits 0 "apple"  # 删除所有"apple"
LREM fruits -2 "apple" # 从尾部删除2个"apple"

# 修剪列表,只保留指定区间
LTRIM fruits 0 2  # 只保留前3个元素

# 删除整个列表
DEL fruits

改(Update)

代码语言:javascript
复制
# 修改指定索引的值
LSET fruits 0 "new_value"

查(Read)

代码语言:javascript
复制
# 获取指定范围的元素
LRANGE fruits 0 -1  # 获取所有
LRANGE fruits 0 2   # 获取前3个
LRANGE fruits -3 -1 # 获取最后3个

# 获取指定索引的元素
LINDEX fruits 0

# 获取列表长度
LLEN fruits

# 阻塞弹出(用于消息队列)
BLPOP queue 30  # 最多等待30秒
BRPOP queue 30

4. 集合(Set)

增(Create)

代码语言:javascript
复制
# 添加一个或多个元素
SADD tags "redis" "database"
SADD tags "nosql" "cache"

# 添加已存在元素会忽略
SADD tags "redis"  # 无效果

删(Delete)

代码语言:javascript
复制
# 删除一个或多个元素
SREM tags "database"

# 随机移除并返回一个元素
SPOP tags

# 随机移除多个元素
SPOP tags 2

# 删除整个集合
DEL tags

改(Update)

代码语言:javascript
复制
# 集合没有直接的修改操作
# 通常用 SREM + SADD 组合实现
SREM tags "old_tag"
SADD tags "new_tag"

查(Read)

代码语言:javascript
复制
# 获取所有元素
SMEMBERS tags

# 获取集合大小
SCARD tags

# 判断元素是否存在
SISMEMBER tags "redis"

# 随机获取一个或多个元素(不移除)
SRANDMEMBER tags
SRANDMEMBER tags 3

# 集合运算
SINTER set1 set2  # 交集
SUNION set1 set2  # 并集
SDIFF set1 set2   # 差集(在set1不在set2)

# 将运算结果存储到新集合
SINTERSTORE result set1 set2
SUNIONSTORE result set1 set2
SDIFFSTORE result set1 set2

5. 有序集合(Sorted Set / ZSet)

增(Create)

代码语言:javascript
复制
# 添加一个或多个成员
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2" 150 "player3"

# 更新分数
ZADD leaderboard CH 250 "player1"  # CH返回修改的成员数
ZADD leaderboard NX 300 "player4"  # 仅当不存在时添加
ZADD leaderboard XX 180 "player2"  # 仅当存在时更新
ZADD leaderboard INCR 50 "player1" # 增加分数

删(Delete)

代码语言:javascript
复制
# 删除一个或多个成员
ZREM leaderboard "player3"

# 按排名范围删除
ZREMRANGEBYRANK leaderboard 0 2  # 删除前3名

# 按分数范围删除
ZREMRANGEBYSCORE leaderboard 0 100  # 删除分数<=100的成员

# 删除整个有序集合
DEL leaderboard

改(Update)

代码语言:javascript
复制
# 增加/减少分数
ZINCRBY leaderboard 50 "player1"   # 增加50分
ZINCRBY leaderboard -30 "player2"  # 减少30分

查(Read)

代码语言:javascript
复制
# 按排名查询(升序)
ZRANGE leaderboard 0 2 WITHSCORES  # 前3名,带分数
ZRANGE leaderboard 0 -1           # 所有成员,升序

# 按排名查询(降序)
ZREVRANGE leaderboard 0 2 WITHSCORES  # 前3名,降序

# 按分数范围查询
ZRANGEBYSCORE leaderboard 100 200 WITHSCORES
ZRANGEBYSCORE leaderboard 100 +inf     # 分数>=100
ZRANGEBYSCORE leaderboard -inf 200     # 分数<=200
ZREVRANGEBYSCORE leaderboard 200 100   # 降序

# 获取成员排名
ZRANK leaderboard "player1"     # 升序排名(从0开始)
ZREVRANK leaderboard "player1"  # 降序排名

# 获取成员分数
ZSCORE leaderboard "player1"

# 获取集合大小
ZCARD leaderboard

# 统计分数范围内的成员数
ZCOUNT leaderboard 100 200

# 获取指定成员的分数
ZSCORE leaderboard "player1"

# 获取分数在指定范围内的成员数
ZCOUNT leaderboard 100 200

# 按字典序查询
ZRANGEBYLEX myset [a [c  # 字典序a到c
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB
    • 1. 字符串(String)
    • 增(Create)
    • 2. 哈希(Hash)
    • 3. 列表(List)
    • 4. 集合(Set)
    • 5. 有序集合(Sorted Set / ZSet)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档