Redis 中常用的操作方法(基于 Java 生态常用的 Redis 客户端,如 Spring Data Redis/BladeRedis),按功能分类梳理,覆盖和 keys 同类型的键操作、以及字符串、哈希、列表、集合、有序集合等核心数据结构的常用方法,方便你对照使用。

一、键(Key)相关操作(和 keys 同类型)

这是和你提到的 keys 方法最相关的一类,主要用于操作 Redis 的键本身,而非键对应的数据:

方法作用示例(BladeRedis/Spring Data Redis)注意事项
keys(pattern)匹配符合规则的所有键(如 user:*Set<String> keys = bladeRedis.keys("user:*");线上慎用!遍历全库,数据量大时阻塞 Redis
exists(keys...)判断一个/多个键是否存在Boolean exists = bladeRedis.exists("user:1001");
Long count = bladeRedis.exists("user:1001", "order:2002");
多键时返回存在的键的数量
del(keys...)删除一个/多个键Long delCount = bladeRedis.del("user:1001", "order:2002");返回成功删除的键的数量
expire(key, seconds)设置键的过期时间(秒)Boolean success = bladeRedis.expire("user:1001", 3600);返回是否设置成功
expireAt(key, timestamp)设置键在指定时间戳过期(毫秒/秒,看客户端)bladeRedis.expireAt("user:1001", System.currentTimeMillis() + 3600*1000);时间戳单位需和客户端匹配
ttl(key)获取键的剩余过期时间(秒)Long ttl = bladeRedis.ttl("user:1001");返回 -1=永不过期,-2=键不存在
pttl(key)获取键的剩余过期时间(毫秒)Long pttl = bladeRedis.pttl("user:1001");精度更高,同上
type(key)获取键对应的值类型String type = bladeRedis.type("user:1001");返回:string/hash/list/set/zset 等
rename(oldKey, newKey)重命名键(新键存在则覆盖)bladeRedis.rename("user:1001", "user:new1001");覆盖风险,慎用
renamenx(oldKey, newKey)重命名键(新键不存在时才成功)Boolean success = bladeRedis.renamenx("user:1001", "user:new1001");更安全,避免覆盖
scan(cursor, pattern)迭代式遍历键(替代 keys,非阻塞)ScanResult<String> result = bladeRedis.scan("0", ScanArgs.Builder.matches("user:*").count(100));线上推荐用,分批遍历,无阻塞

二、字符串(String)操作(最常用的数据结构)

Redis 最基础的键值对类型,值为字符串(也可存数字、二进制):

方法作用示例
set(key, value)设置键值对bladeRedis.set("user:1001:name", "张三");
setnx(key, value)仅当键不存在时设置Boolean success = bladeRedis.setnx("user:1001:name", "张三");
setex(key, seconds, value)设置键值对并指定过期时间bladeRedis.setex("user:1001:token", 3600, "abc123");
get(key)获取键对应的值String name = bladeRedis.get("user:1001:name");
getset(key, value)获取旧值并设置新值String oldToken = bladeRedis.getset("user:1001:token", "def456");
incr(key)数字值自增 1Long num = bladeRedis.incr("counter:login");
incrby(key, delta)数字值自增指定步长Long num = bladeRedis.incrby("counter:login", 5);
decr(key)数字值自减 1Long num = bladeRedis.decr("counter:stock");
decrby(key, delta)数字值自减指定步长Long num = bladeRedis.decrby("counter:stock", 2);
append(key, value)追加字符串到值末尾Long newLen = bladeRedis.append("user:1001:desc", " - 会员");

三、哈希(Hash)操作(适合存对象)

值是键值对集合,适合存储结构化数据(如用户信息),无需序列化:

方法作用示例
hset(key, field, value)设置哈希中指定字段的值bladeRedis.hset("user:1001", "name", "张三");
hsetnx(key, field, value)仅当字段不存在时设置Boolean success = bladeRedis.hsetnx("user:1001", "age", "20");
hget(key, field)获取哈希中指定字段的值String name = bladeRedis.hget("user:1001", "name");
hmget(key, fields...)获取哈希中多个字段的值List<String> values = bladeRedis.hmget("user:1001", "name", "age");
hmset(key, map)批量设置哈希的字段和值Map<String, String> map = new HashMap<>();
map.put("name", "张三");
map.put("age", "20");
bladeRedis.hmset("user:1001", map);
hkeys(key)获取哈希中所有字段Set<String> fields = bladeRedis.hkeys("user:1001");
hvals(key)获取哈希中所有值List<String> values = bladeRedis.hvals("user:1001");
hdel(key, fields...)删除哈希中指定字段Long delCount = bladeRedis.hdel("user:1001", "age", "desc");
hexists(key, field)判断哈希中字段是否存在Boolean exists = bladeRedis.hexists("user:1001", "name");
hincrby(key, field, delta)哈希字段值自增指定步长Long num = bladeRedis.hincrby("user:1001", "score", 10);

四、列表(List)操作(有序、可重复)

基于双向链表实现,适合做队列、栈、消息列表等:

方法作用示例
lpush(key, values...)从列表左侧(头部)添加元素Long len = bladeRedis.lpush("list:msg", "msg1", "msg2");
rpush(key, values...)从列表右侧(尾部)添加元素Long len = bladeRedis.rpush("list:msg", "msg3", "msg4");
lpop(key)从列表左侧弹出元素String msg = bladeRedis.lpop("list:msg");
rpop(key)从列表右侧弹出元素String msg = bladeRedis.rpop("list:msg");
lrange(key, start, end)获取列表指定范围的元素List<String> msgs = bladeRedis.lrange("list:msg", 0, -1);
llen(key)获取列表长度Long len = bladeRedis.llen("list:msg");
lrem(key, count, value)删除列表中指定元素Long delCount = bladeRedis.lrem("list:msg", 2, "msg1");
lindex(key, index)获取列表指定索引的元素String msg = bladeRedis.lindex("list:msg", 1);

五、集合(Set)操作(无序、不可重复)

基于哈希表实现,适合做去重、交集/并集/差集计算:

方法作用示例
sadd(key, members...)向集合添加元素Long addCount = bladeRedis.sadd("set:user:1001:tags", "运动", "音乐");
smembers(key)获取集合所有元素Set<String> tags = bladeRedis.smembers("set:user:1001:tags");
srem(key, members...)删除集合中指定元素Long delCount = bladeRedis.srem("set:user:1001:tags", "运动");
sismember(key, member)判断元素是否在集合中Boolean exists = bladeRedis.sismember("set:user:1001:tags", "音乐");
scard(key)获取集合元素个数Long size = bladeRedis.scard("set:user:1001:tags");
sinter(keys...)求多个集合的交集Set<String> common = bladeRedis.sinter("set:user:1001:tags", "set:user:1002:tags");
sunion(keys...)求多个集合的并集Set<String> all = bladeRedis.sunion("set:user:1001:tags", "set:user:1002:tags");
sdiff(keys...)求多个集合的差集Set<String> diff = bladeRedis.sdiff("set:user:1001:tags", "set:user:1002:tags");

六、有序集合(ZSet)操作(有序、不可重复,带分值)

在 Set 基础上增加了分值(score),可按分值排序,适合做排行榜、权重排序:

方法作用示例
zadd(key, score, member)向有序集合添加元素(带分值)Boolean success = bladeRedis.zadd("zset:rank", 95.0, "张三");
zrange(key, start, end)按分值升序获取指定范围元素Set<String> rank = bladeRedis.zrange("zset:rank", 0, 9);
zrevrange(key, start, end)按分值降序获取指定范围元素Set<String> top10 = bladeRedis.zrevrange("zset:rank", 0, 9);
zscore(key, member)获取元素的分值Double score = bladeRedis.zscore("zset:rank", "张三");
zrem(key, members...)删除有序集合中指定元素Long delCount = bladeRedis.zrem("zset:rank", "张三", "李四");
zcard(key)获取有序集合元素个数Long size = bladeRedis.zcard("zset:rank");
zincrby(key, increment, member)给元素的分值增加指定值Double newScore = bladeRedis.zincrby("zset:rank", 5.0, "张三");

总结

  1. 键操作核心keys 慎用,线上优先用 scanexists/del/expire 是日常高频键操作;
  2. 数据结构选择:字符串(简单键值)、哈希(结构化对象)、列表(队列/栈)、集合(去重/集合运算)、有序集合(排行榜)是 Redis 最常用的5类结构;
  3. 性能注意keyshkeyssmembers 等全量遍历方法,数据量大时会阻塞 Redis,优先用分批/迭代方法(如 scan)。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐