💡 核心特性
- 轻量级设计:核心代码仅由少量类组成,jar包仅33KB,资源占用极小
- 高性能通信:基于 smart-socket Java AIO 实现,单线程处理能力强,资源消耗低
- 连接复用技术:创新的连接复用机制,一个连接可同时处理多个并发请求
- RESP 协议支持:完整支持 Redis 序列化协议(RESP),兼容 Redis 服务器
Redisun 是一个基于 smart-socket 开发的轻量级高性能 Redis 客户端,专为 Java 平台设计。它支持异步非阻塞 I/O 操作,提供与 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 命令的支持。以下是当前命令实现状态和未来开发计划:
| 命令 | 描述 | 实现类 | 备注 |
|---|---|---|---|
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 | 哈希字段获取操作 |
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 的位位置 |
| 命令 | 优先级 | 状态 | 说明 |
|---|---|---|---|
HMSET | 🟡 P1 | 待开发 | 同时将多个 field-value (域-值)对设置到哈希表中 |
HMGET | 🟡 P1 | 待开发 | 获取哈希表中一个或多个给定域的值 |
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 的详细信息,请参阅我们的扩展指南。