跳转到内容

Redisun 介绍

Redisun 是一个基于 smart-socket 开发的轻量级高性能 Redis 客户端,专为 Java 平台设计。它支持异步非阻塞 I/O 操作,提供与 Redis 服务器兼容的内存键值存储访问能力。

💡 核心特性

  • 轻量级设计:核心代码仅由少量类组成,jar包仅33KB,资源占用极小
  • 高性能通信:基于 smart-socket Java AIO 实现,单线程处理能力强,资源消耗低
  • 连接复用技术:创新的连接复用机制,一个连接可同时处理多个并发请求
  • RESP 协议支持:完整支持 Redis 序列化协议(RESP),兼容 Redis 服务器

下面是一个简单的使用示例,展示了如何使用 Redisun 进行基本的 Redis 操作:

import tech.smartboot.redisun.Redisun;
public class BasicExample {
public static void main(String[] args) {
// 创建 Redisun 客户端实例
Redisun redisun = Redisun.create(options ->
options.setAddress("127.0.0.1:6379") // 设置 Redis 服务器地址
.debug(true) // 开启调试模式
);
try {
// 设置键值对
boolean setResult = redisun.set("hello", "world");
System.out.println("SET操作结果: " + setResult);
// 获取键值
String getResult = redisun.get("hello");
System.out.println("GET操作结果: " + getResult);
// 删除键
int delResult = redisun.del("hello");
System.out.println("DEL操作结果: " + delResult);
} finally {
// 关闭客户端,释放资源
redisun.close();
}
}
}

Redisun 还支持更多 Redis 命令,例如有序集合操作:

// 添加元素到有序集合
int zaddResult = redisun.zadd("myzset", 1.0, "member1");
System.out.println("ZADD操作结果: " + zaddResult);
// 可选参数设置
boolean setResultWithOptions = redisun.set("key", "value", cmd ->
cmd.expire(60) // 设置60秒过期
.setIfNotExists() // 仅在键不存在时设置
);
System.out.println("带选项的SET操作结果: " + setResultWithOptions);

通过这些示例,您可以看到 Redisun 的 API 设计简洁直观,易于集成到您的项目中。

Redisun 正在不断扩展对 Redis 命令的支持。以下是当前命令实现状态和未来开发计划:

  • 🔴 高优先级 (P0): 核心常用命令,直接影响客户端可用性
  • 🟡 中优先级 (P1): 重要但非核心命令,完善客户端功能
  • 🟢 低优先级 (P2): 特殊场景命令,根据需求决定是否实现
命令描述实现类备注
HELLO服务器握手和认证HelloCommand支持认证和协议协商
SET设置键值对SetCommand完整选项支持:NX、XX、EX、PX、PXAT、KEEPTTL
GET获取键的值GetCommand基本键值检索
DEL删除一个或多个键DelCommand支持多键删除
ZADD向有序集合添加成员ZAddCommand基本有序集合成员添加
SELECT切换数据库SelectCommand仅在初始连接时执行,不支持运行时切换
DBSIZE返回当前数据库的键数量DBSizeCommand统计当前数据库键数量
FLUSHALL清空所有数据库FlushAllCommand删除所有数据库中的键
FLUSHDB清空当前数据库FlushDbCommand清除当前数据库
EXISTS检查键是否存在ExistsCommand检查一个或多个键是否存在
INCR将键的整数值加一IncrCommand原子递增操作
DECR将键的整数值减一DecrCommand原子递减操作
APPEND追加值到键AppendCommand字符串追加操作
STRLEN获取键值的长度StrlenCommand字符串长度操作
HSET设置哈希字段的字符串值HSetCommand哈希字段设置操作
HGET获取哈希字段的值HGetCommand哈希字段获取操作
HMSET同时将多个 field-value (域 - 值) 对设置到哈希表中HmSetCommand批量设置哈希字段
HMGET获取哈希表中一个或多个给定域的值HmGetCommand批量获取哈希字段值
SADD向集合添加一个或多个成员SAddCommand集合成员添加操作
INCRBY将键的整数值增加给定数值IncrByCommand原子递增操作
DECRBY将键的整数值减少给定数值DecrByCommand原子递减操作
MGET获取所有给定键的值MGetCommand获取多个键值
MSET设置多个键值对MSetCommand设置多个键值对
EXPIRE为给定 key 设置过期时间ExpireCommand支持 NX, XX, GT, LT 选项
TTL获取键的剩余过期时间TtlCommand以秒为单位返回键的剩余生存时间
TYPE获取键值的类型TypeCommand返回键值的类型
LPUSH在列表头部插入元素LPushCommand在列表头部插入一个或多个元素
RPUSH在列表尾部插入元素RPushCommand在列表尾部插入一个或多个元素
LPOP移除并返回列表头部元素LPopCommand移除并返回列表的第一个元素
RPOP移除并返回列表尾部元素RPopCommand移除并返回列表的最后一个元素
ZREM从有序集合中移除成员ZRemCommand从有序集合中移除一个或多个成员
ZRANGE返回有序集合的成员范围ZRangeCommand返回有序集合指定索引范围的成员
ZSCORE获取有序集合成员的分数ZScoreCommand获取有序集合中指定成员的分数

我们正在积极扩展 Redis 命令支持。未来版本将包括更多命令。

命令优先级状态说明
GETRANGE🟡 P1待开发返回键的值的子字符串
SETRANGE🟡 P1待开发覆盖键值的一部分
GETSET🟡 P1待开发设置键的字符串值并返回其旧值
INCRBYFLOAT🟡 P1待开发将键的浮点值增加给定数值
MSETNX🟡 P1待开发同时设置多个键值对,仅当所有键都不存在时
PSETEX🟢 P2待开发以毫秒为单位设置键的过期时间和值
SETBIT🟢 P2待开发设置或清除键的字符串值中偏移量上的位
GETBIT🟢 P2待开发获取键的字符串值中偏移量上的位值
BITCOUNT🟢 P2待开发计算键的字符串值中被设置为 1 的位数量
BITOP🟢 P2待开发对多个键执行位运算操作
BITPOS🟢 P2待开发查找键的字符串值中第一个被设置为 0 或 1 的位位置
命令优先级状态说明
HGETALL🟡 P1待开发获取哈希表中所有的域和值
HDEL🟡 P1待开发删除哈希表中一个或多个指定域
HEXISTS🟡 P1待开发查看哈希表中指定域是否存在
HLEN🟡 P1待开发获取哈希表中域的数量
HINCRBY🟡 P1待开发为哈希表中指定域的值加上增量
HINCRBYFLOAT🟡 P1待开发为哈希表中指定域的值加上浮点增量
HKEYS🟢 P2待开发获取哈希表中所有的域
HVALS🟢 P2待开发获取哈希表中所有的值
HSETNX🟢 P2待开发只有在域 field 不存在时,设置哈希表字段的值
HSCAN🟢 P2待开发迭代哈希表中的键值对
HRANDFIELD🟢 P2待开发从哈希表中随机获取字段
命令优先级状态说明
LLEN🟡 P1待开发获取列表长度
LRANGE🟡 P1待开发获取列表指定范围内的元素
LINDEX🟡 P1待开发通过索引获取列表中的元素
LSET🟡 P1待开发通过索引设置列表元素的值
LREM🟡 P1待开发移除列表中与参数值相等的元素
LTRIM🟡 P1待开发对一个列表进行修剪(trim),保留指定区间内的元素
LINSERT🟡 P1待开发在列表的元素前或者后插入元素
BLPOP🟢 P2待开发移出并获取列表的第一个元素,如果列表没有元素会阻塞
BRPOP🟢 P2待开发移出并获取列表的最后一个元素,如果列表没有元素会阻塞
RPOPLPUSH🟢 P2待开发移除列表的最后一个元素,并将该元素添加到另一个列表并返回
BRPOPLPUSH🟢 P2待开发从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它
LPOS🟢 P2待开发返回列表中匹配元素的各项信息
命令优先级状态说明
SCARD🟡 P1待开发获取集合的成员数
SMEMBERS🟡 P1待开发返回集合中的所有成员
SISMEMBER🟡 P1待开发判断成员元素是否是集合的成员
SMISMEMBER🟡 P1待开发判断多个成员元素是否是集合的成员
SREM🟡 P1待开发移除集合中的一个或多个成员
SPOP🟡 P1待开发移除并返回集合中的一个随机元素
SRANDMEMBER🟡 P1待开发返回集合中的一个或多个随机元素
SMOVE🟡 P1待开发将指定成员元素从源集合移动到目标集合
SDIFF🟢 P2待开发返回给定所有集合的差集
SDIFFSTORE🟢 P2待开发将给定所有集合的差集存储在指定的集合中
SINTER🟢 P2待开发返回给定所有集合的交集
SINTERSTORE🟢 P2待开发将给定所有集合的交集存储在指定的集合中
SUNION🟢 P2待开发返回给定所有集合的并集
SUNIONSTORE🟢 P2待开发将给定所有集合的并集存储在指定的集合中
SSCAN🟢 P2待开发迭代集合中的元素
命令优先级状态说明
ZCARD🟡 P1待开发获取有序集合的成员数
ZCOUNT🟡 P1待开发计算在有序集合中指定区间分数的成员数
ZINCRBY🟡 P1待开发有序集合中对指定成员的分数加上增量
ZREVRANGE🟡 P1待开发返回有序集中指定区间内的成员,通过索引,分数从高到低
ZREVRANK🟡 P1待开发返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
ZLEXCOUNT🟢 P2待开发在有序集合中计算指定字典区间内成员数量
ZRANGEBYLEX🟢 P2待开发通过字典区间返回有序集合的成员
ZREMRANGEBYLEX🟢 P2待开发移除有序集合中给定的字典区间的所有成员
ZRANGEBYSCORE🟢 P2待开发通过分数返回有序集合指定区间内的成员
ZREVRANGEBYSCORE🟢 P2待开发返回有序集中指定分数区间内的成员,分数从高到低排序
ZREMRANGEBYRANK🟢 P2待开发移除有序集合中给定排名区间的所有成员
ZREMRANGEBYSCORE🟢 P2待开发移除有序集合中给定分数区间的所有成员
ZUNION🟢 P2待开发计算给定的一个或多个有序集的并集
ZUNIONSTORE🟢 P2待开发计算给定的一个或多个有序集的并集,并存储在新的有序集中
ZINTER🟢 P2待开发计算给定的一个或多个有序集的交集
ZINTERSTORE🟢 P2待开发计算给定的一个或多个有序集的交集,并存储在新的有序集中
ZSCAN🟢 P2待开发迭代有序集合中的元素(包括元素成员和元素分值)
ZMSCORE🟢 P2待开发返回有序集中一个或多个成员的分数
ZRANK🟢 P2待开发返回有序集合中指定成员的索引
命令优先级状态说明
KEYS🟡 P1待开发查找所有符合给定模式(pattern)的键
PEXPIRE🟡 P1待开发设置键的过期时间(毫秒)
PTTL🟡 P1待开发以毫秒为单位返回键的剩余生存时间
PERSIST🟡 P1待开发移除键的过期时间
EXPIREAT🟡 P1待开发为键设置过期时间戳
PEXPIREAT🟡 P1待开发以毫秒为单位为键设置过期时间戳
RANDOMKEY🟢 P2待开发从当前数据库中随机返回一个键
RENAME🟢 P2待开发修改键的名称
RENAMENX🟢 P2待开发仅在新键不存在时修改键名
MOVE🟢 P2待开发将当前数据库的键移动到指定数据库中
DUMP🟢 P2待开发序列化给定键,并返回被序列化的值
RESTORE🟢 P2待开发反序列化给定的序列化值,并将它和给定的键相关联
SORT🟢 P2待开发返回或保存给定列表、集合、有序集合键的经过排序的元素
SCAN🟢 P2待开发迭代数据库中的键空间
命令优先级状态说明
INFO🟡 P1待开发获取 Redis 服务器的各种信息和统计数值
TIME🟢 P2待开发返回当前服务器时间
PING🟢 P2待开发测试与服务器的连接是否仍然生效
ECHO🟢 P2待开发打印特定信息
CLIENT LIST🟢 P2待开发获取连接到服务器的客户端连接列表
CLIENT KILL🟢 P2待开发关闭地址为 addr 的客户端连接
CONFIG GET🟢 P2待开发获取配置参数的值
CONFIG SET🟢 P2待开发修改配置参数的值
BGSAVE🟢 P2待开发在后台异步保存当前数据库的数据到磁盘
LASTSAVE🟢 P2待开发返回最近一次 Redis 成功将数据保存到磁盘上的时间

Redisun 提供了强大的扩展机制。您可以通过继承 Command 基类轻松实现自定义 Redis 命令。这使得添加库中尚未内置的任何 Redis 命令支持变得简单。

有关使用自定义命令扩展 Redisun 的详细信息,请参阅我们的扩展指南