spring mvc 使用spring-data-redis提供的方法操作redis

之前我们整合了spring mvc和jedis,可以使用jedis操作redis。又整合了spring mvc和spring-data-redis,实现了缓存。

那么能不能不使用jedis提供的方法,而使用spring-data-redis提供的方法来操作redis?

 

零、需要先整合spring-data-redis

(1)配置文件和之前的一样:

补充一下,这里可以注入jedis的连接池配置,来配置spring-data-redis的连接池

(2)记得注入spring

其他没什么要注意的了。

一、使用spring-data-redis提供的方法

1.怎么使用

这里举一个插入、获取string的例子:

testController.java

如果使用jedis,我们要注入jedisPool,去获取jedis对象。

如果使用spring-data-redis,我们首先要注入RedisConnectionFactory,

通过redis的链接工厂,来获取redis的链接。

为了解析要插入redis中的数据,要注入redis的模板RedisTemplate,

获取String的模板对象,

通过redisSerializer类提供的serialize方法把要插入的String转成可以插入的数据类型byte[],

(补充:在这里,需要把string转成byte[],使用byte[] byte = string.getBytes(“UTF-8”)的形式也可以,那就不需要注入RedisTemplate了)

转换数据后,插入即可:

如果要取出数据,同样也需要一次转换:

2.在这里需不需要手动关闭链接?

个人认为,还是养成手动回收链接的习惯比较好(就像使用mysql中一样)。

3.这里需不需要设置有效时间?

redis配置文件中不是配置了吗?

很可惜,看清楚是RedisCacheManager这个类,是spring-data-redis缓存的有效时间。普通的数据还是要手动设置有效时间。记得上次也提过了,请使用:

二、注意redis中的不同db

1.发现问题

之前我写过这样一个方法,思路就是redis原生方法插入,然后使用jedis获取数据

结果发现,刚插入的值,无论怎么取都是空的。

后来又试了一下,发现jedis存的value,使用原生redis方法取不到,但是jedis方法就能取到。原生redis方法存的value,原生方法能取到,但是jedis方法取不到。

看了一下才发现,原来不同的方法把数据存到了不同的db中,取的时候也是在各自的db中取,所以互相之间取不到。

QQ截图20170223011604

2.为什么要设置不同的db?

防止各个功能模块之间的key-value冲突。

3.我非要把所有key-value都存到一个db中,怎么办?

jedis中,可以使用select方法指定存的db,默认是db0:

同样的,redis原生方法中,也有这样的方法:

我猜测:代码中应该有自动检测,选择一个默认为空的db插入数据,防止两个功能模块之间产生冲突。这个我没有仔细研究。如果没有这样的功能,我们倒是可以考虑自己实现一个。

三、总结

忘记一件事情,现在才想起来,就是搭建redis集群…

今天就先立一个反向flag,我明天一定很忙,根本不可能把redis集群搭起来。

发表评论

电子邮件地址不会被公开。 必填项已用*标注