集成Redis(Jedis库)

Jul 10, 2017 10:38:44 AM

作者:wendal

简介

详细说明请查阅插件的README

nutz-integration-jedisGit@OSC镜像

jedis是redis的java客户端,请注意区别.

本插件在当前版本(1.r.60.r4), 已完成单机和集群操作的集成.

提供多种使用方式

  • aop — 自动管理Jedis实例的开启和关闭,推荐使用
  • 注入JedisPool — JedisPool就是连接池本身,使用try-with-resources或try-finally方式使用
  • 注入RedisService — 封装Jedis的大部分方法,同时自动管理Jedis实例的开启和关闭. 建议直接注入,而不是继承它.

依赖

  • jedis 2.8+
  • 依赖名为conf类型为PropertiesProxy的ioc bean,配置信息从它读取

基本配置

本插件通过@IocBy加载

  1. @IocBy(args = {
  2. "*js","ioc/",
  3. "*anno", "net.wendal.nutzbook",
  4. "*jedis" // 加载jedis
  5. })

在conf的扫描路径内,添加一个redis.properties. 以下均为默认值,不写也行.

  1. redis.host=localhost
  2. redis.port=6379
  3. redis.timeout=2000
  4. #redis.password=wendal.net
  5. redis.database=0
  6. #redis.mode=cluster

通过aop方式使用

必须是ioc bean对象哦,不然@Aop不会生效

  1. import static org.nutz.integration.jedis.RedisInterceptor.jedis;
  2. @Aop("redis") //拦截器的名字叫redis
  3. public void addTopic(Topic topic) {
  4. // 通过调用jedis()获取上下文的Jedis对象,无需手动关闭或回收.
  5. jedis().set("topic:"+R.UU32(), Json.toJson(topic,JsonFormat.full()));
  6. }

通过注入JedisAgent使用

JedisAgent封装了JedisPool和JedisCluster,通过getResource取出Jedis实例进行操作, 操作完成后,需要调用其close方法关闭.

  1. @Inject JedisAgent jedisAgent;
  2. //@Inject JedisCluster jedisCluster;
  3. //@Inject JedisPool jedisPool;
  4. // JDK 7+ , 可利用try-with-resources特性, 让JDK自动回收(会自定义调用close方法)
  5. public void setxxx(xxx yyy) {
  6. try (Jedis jedis = jedisAgent.getResource()) {
  7. jedis.set("wendal", "https://nutz.cn");
  8. }
  9. }
  10. // JDK 6, 按部就班的老办法try-finally
  11. public void setxxx(xxx yyy) {
  12. Jedis jedis = null;
  13. try {
  14. jedis = jedisAgent.getResource();
  15. jedis.set("wendal", "https://nutz.cn");
  16. } finally {
  17. Streams.safeClose(jedis);
  18. }
  19. }

也可以注入JedisPool(单机版jedis)或JedisCluster(集群版redis). 推荐使用JedisAgent.

注入RedisService使用

RedisService继承了Jedis类的大部分方法, 所有方法均自动开启和关闭Jedis实例,除pipeline外的大部分方法均可正常使用.

若涉及到pipeline, 可注入JedisPool取出原生Jedis进行操作.

  1. @Inject RedisService redisService;
  2. public void setxxx(xxx yyy) {
  3. redisService.set("wendal", "https://nutz.cn");
  4. }

本页面的文字允许在知识共享 署名-相同方式共享 3.0协议GNU自由文档许可证下修改和再使用。

原文: http://nutzam.com/core/nosql/jedis.html