Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
Redis 也是目前市面上最主流的分布式的、持久化的内存型数据库。cloudopt-next-redis 选用 redis 作为 L2 缓存。
Lettuce 是一个可伸缩线程安全的 Redis 客户端。多个线程可以共享同一个 RedisConnection。它利用优秀 netty NIO 框架来高效地管理多个连接。cloudopt-next-cache 选用 Lettuce 作为操作 redis 的工具。
cloudopt-next-redis 插件是基于 lettuce 开发的。详细使用建议参考 lettuce 的官方文档。
在使用前请先自行引用相应的依赖。请自行添加版本号。
<dependency>
<groupId>net.cloudopt.next</groupId>
<artifactId>cloudopt-next-redis</artifactId>
<version>${version}</version>
</dependency>
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
<version>${version}</version>
</dependency>
配置
cloudopt-next-redis同样支持自动读取配置文件。
配置名称 | 详细描述 |
---|---|
cluster | 开启后会自动启动 cluster 模式。 |
publish | 如果 true 会初始化 redis pub/sub 模式的生产者连接。 |
subscribe | 如果 true 会初始化 redis pub/sub 模式的消费者连接。 |
uri | redis 连接地址 uri 的写法见 lettuce 官方文档。 |
{
"redis": {
"cluster": true,
"publish": true,
"subscribe": true,
"uri": "redis://root@localhost:6379/0"
}
}
所有参数都不是必须填写的,默认的 host 为 localhost,端口为 6379。
启动
在配置完成后您需要在服务器启动前启动插件。
fun main(args: Array<String>) {
NextServer.addPlugin(RedisPlugin());
NextServer.run(TestCase.class);
}
获取操作对象
我们支持了 lettuce 的三种不同的操作方式,包括同步、异步、协程。你可以通过下面的方法去获取操作对象然后对 redis 操作。更多用法建议参考 lettuce 官方文档。
RedisManager.coroutines()
RedisManager.sync()
RedisManager.asyn()
我们是建议使用协程的方式操作的,不过由于 lettuce 的协程还在测试中,所以建议通过 Next 的协程语法糖配合同步来进行使用。
var value = await<String>{handler->
handler.complete(RedisManager.sync().get("key"))
}
当然你也可以直接使用异步配合协程语法糖。
var value = await<String>{handler->
RedisManager.asyn().get("Hello").handle { value, throwable ->
handler.complete(value)
}
}