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 的官方文档。

在使用前请先自行引用相应的依赖。请自行添加版本号。

  1. <dependency>
  2. <groupId>net.cloudopt.next</groupId>
  3. <artifactId>cloudopt-next-redis</artifactId>
  4. <version>${version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.lettuce</groupId>
  8. <artifactId>lettuce-core</artifactId>
  9. <version>${version}</version>
  10. </dependency>

配置

cloudopt-next-redis同样支持自动读取配置文件。

配置名称 详细描述
cluster 开启后会自动启动 cluster 模式。
publish 如果 true 会初始化 redis pub/sub 模式的生产者连接。
subscribe 如果 true 会初始化 redis pub/sub 模式的消费者连接。
uri redis 连接地址 uri 的写法见 lettuce 官方文档
  1. {
  2. "redis": {
  3. "cluster": true,
  4. "publish": true,
  5. "subscribe": true,
  6. "uri": "redis://root@localhost:6379/0"
  7. }
  8. }

所有参数都不是必须填写的,默认的 host 为 localhost,端口为 6379。

启动

在配置完成后您需要在服务器启动前启动插件。

  1. fun main(args: Array<String>) {
  2. NextServer.addPlugin(RedisPlugin());
  3. NextServer.run(TestCase.class);
  4. }

获取操作对象

我们支持了 lettuce 的三种不同的操作方式,包括同步、异步、协程。你可以通过下面的方法去获取操作对象然后对 redis 操作。更多用法建议参考 lettuce 官方文档。

  1. RedisManager.coroutines()
  2. RedisManager.sync()
  3. 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)
    }
}