一.Java对Redis的操作
- 如果不使用任何框架,Java 使用
Jedis
操作数据库.属于最原始的一种方式; - 可以参考文章: Java中使用Jedis操作Redis
二.Spring 框架对Redis的支持
Spring
封装了RedisTemplate
对象来进行对Redis的各种操作,它支持所有的Redis原生的api。RedisTemplate
位于spring-data-redis
包下RedisTemplate在Spring代码中的结构如下:
org.springframework.data.redis.core Class RedisTemplate<K,V> java.lang.Object org.springframework.data.redis.core.RedisAccessor org.springframework.data.redis.core.RedisTemplate<K,V>
Type Parameters:
K =模板中的Redis key的类型(通常为String)如:RedisTemplate<String, Object>
V = 模板中的Redis value的类型RedisTemplate中定义了对5种数据结构操作
redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set
StringRedisTemplate与RedisTemplate区别
- 两者的关系是StringRedisTemplate继承RedisTemplate。
- 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
- SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
(1).StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
(2).RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的
(3).两种方式序列化测试
存取的数据就是字符串类型数据的时候,使用StringRedisTemplate
如果数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。
使用 RedisTemplate 将字符串类型的key,value新增的redis中,在redis的命令下使用
get
获取不到,而使用StringRedisTemplate的方式就可以获取到;
三.Spring Boot 操作Redis
在pom.xml中添加依赖
<!-- 加载redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE</version> </dependency>
注意:以上一定要添加版本,否则会mvn会提示
unknow
, 点击查看最新版本单元测试
@RunWith(SpringRunner.class) //开启Web上下文测试 @WebAppConfiguration @SpringBootTest(classes = DomainWechatCardApplication.class) public class TestRedis { @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private RedisTemplate redisTemplate; @Test public void testRedis() { // 保存字符串 stringRedisTemplate.opsForValue().set("aaa", "111"); Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa")); System.out.println("哈哈哈"); //保存对象 WechatCard wechatCard = new WechatCard(); wechatCard.setAddTime(); wechatCard.setTitle("测试redis"); redisTemplate.opsForHash().put("wechatCard",1,wechatCard); /*查看redisTemplate 的Serializer*/ System.out.println(redisTemplate.getKeySerializer()); System.out.println(redisTemplate.getValueSerializer()); /*查看StringRedisTemplate 的Serializer*/ System.out.println(stringRedisTemplate.getValueSerializer()); System.out.println(stringRedisTemplate.getValueSerializer()); WechatCard card1 = (WechatCard) redisTemplate.opsForHash().get("wechatCard",1); System.out.println(card1); redisTemplate.opsForValue().set("lang","php"); System.out.println(redisTemplate.opsForValue().get("lang")); } }
参考文章:
Spring中使用RedisTemplate操作Redis(spring-data-redis)
Spring Boot StringRedisTemplate常用操作
Spring Boot中使用Redis数据库