一.Java對(duì)Redis的操作
- 如果不使用任何框架,Java 使用
Jedis操作數(shù)據(jù)庫(kù).屬于最原始的一種方式; - 可以參考文章: Java中使用Jedis操作Redis
二.Spring 框架對(duì)Redis的支持
Spring封裝了RedisTemplate對(duì)象來(lái)進(jìn)行對(duì)Redis的各種操作,它支持所有的Redis原生的api。RedisTemplate位于spring-data-redis包下-
RedisTemplate在Spring代碼中的結(jié)構(gòu)如下:
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中定義了對(duì)5種數(shù)據(jù)結(jié)構(gòu)操作
redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set -
StringRedisTemplate與RedisTemplate區(qū)別
- 兩者的關(guān)系是StringRedisTemplate繼承RedisTemplate。
- 兩者的數(shù)據(jù)是不共通的;也就是說(shuō)StringRedisTemplate只能管理StringRedisTemplate里面的數(shù)據(jù),RedisTemplate只能管理RedisTemplate中的數(shù)據(jù)。
- SDR默認(rèn)采用的序列化策略有兩種,一種是String的序列化策略,一種是JDK的序列化策略。
(1).StringRedisTemplate默認(rèn)采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
(2).RedisTemplate默認(rèn)采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的
(3).兩種方式序列化測(cè)試
存取的數(shù)據(jù)就是字符串類型數(shù)據(jù)的時(shí)候,使用StringRedisTemplate
如果數(shù)據(jù)是復(fù)雜的對(duì)象類型,而取出的時(shí)候又不想做任何的數(shù)據(jù)轉(zhuǎn)換,直接從Redis里面取出一個(gè)對(duì)象,那么使用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>注意:以上一定要添加版本,否則會(huì)mvn會(huì)提示
unknow, 點(diǎn)擊查看最新版本 -
單元測(cè)試
@RunWith(SpringRunner.class) //開(kāi)啟Web上下文測(cè)試 @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("哈哈哈"); //保存對(duì)象 WechatCard wechatCard = new WechatCard(); wechatCard.setAddTime(); wechatCard.setTitle("測(cè)試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數(shù)據(jù)庫(kù)