redis作為一種非關系型數據庫,讀寫非常快,應用十分廣泛,它采用key-value的形式存儲數據,value常用的五大數據類型有string(字符串),list(鏈表),set(集合),zset(有序集合)和hash(哈希表)。
redis的特性決定了它的功能,它可以用來做以下這些事情!
Spring Boot對redis也實現自動化裝配,使用非常方便。
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>
</dependencies>
spring:redis:# redis庫database: 0# redis 服務器地址host: localhost# redis 端口號port: 6379# redis 密碼password:# 連接超時時間(毫秒)timeout: 1000lettuce:pool:# 連接池最大鏈接數(負數表示沒有限制)max-active: 8# 連接池最大阻塞等待時間(負數表示沒有限制)max-wait: -1# 連接池最大空閑連接數max-idle: 8# 連接池最小空閑連接數min-idle: 0
redis-cli,SpringBoot提供了兩個bean來操作redis,分別是RedisTemplate
?和?StringRedisTemplate
,這兩者的主要區別如下。
RedisTemplate
使用的是JdkSerializationRedisSerializer
?存入數據會將數據先序列化成字節數組然后在存入Redis數據庫。
StringRedisTemplate
使用的是StringRedisSerializer。
下面一起來看看效果:
@RestController
public class RedisDemo {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate StringRedisTemplate stringRedisTemplate;@GetMapping("redisTmeplateData")public void redisTemplateData(){redisTemplate.opsForValue().set("name","Java旅途");}@GetMapping("stringRedisTemplateData")public void stringRedisTemplateData(){stringRedisTemplate.opsForValue().set("desc","堅持分享java技術棧");}
}
redis怎么用?第一個方法存入的數據如下圖:
第二個方法存入的數據如下圖:
redis做緩存,由于RedisTemplate是序列化成字節數組存儲的,因此在redis客戶端的可讀性并不好。
@Cacheable
可以標記在一個方法上,也可以標記在一個類上。當標記在一個方法上時表示該方法是支持緩存的,當標記在一個類上時則表示該類所有的方法都是支持緩存的。
如果添加了@Cacheable
注解,那么方法被調用后,值會被存入redis,下次再調用的時候會直接從redis中取值返回。
@GetMapping("getStudent")
@Cacheable(value = "student:key")
public Student getStudent(){log.info("我不是緩存,我是new的對象!");Student student = new Student("Java旅途",26);return student;
}
記得要開啟緩存,在啟動類加上@EnableCaching
注解
springboot2redis,訪問上面的方法,如果不打印日志,則是從緩存中獲取的值。
RedisTemplate提供了很多方法來操作redis,但是找起來比較費事,為了更好的操作redis,一般會封裝redisUtils來滿足業務開發。這里簡單封裝幾個做個示例,如果開發中有需求可以自己封裝。
public class RedisUtils {@Autowiredprivate RedisTemplate redisTemplate;/*** 普通存入* @param key* @param value* @return*/public boolean set(String key,Object value){try {redisTemplate.opsForValue().set(key,value);return true;}catch (Exception e){e.printStackTrace();return false;}}/*** 普通獲取key* @param key* @return*/public Object get(String key){return key == null ? null : redisTemplate.opsForValue().get(key);}/*** 存入key,設置過期時長* @param key* @param value* @param time* @return*/public boolean set(String key,Object value,long time){try {if(time > 0){redisTemplate.opsForValue().set(key,value,time, TimeUnit.SECONDS);}else{redisTemplate.opsForValue().set(key,value);}return true;}catch (Exception e){e.printStackTrace();return false;}}/*** 判斷key是否存在* @param key* @return*/public boolean exists(String key){try {return redisTemplate.hasKey(key);}catch (Exception e){e.printStackTrace();return false;}}/*** 刪除key* @param key*/public void del(String key){try {if(key != null && key.length() > 0){redisTemplate.delete(key);}}catch (Exception e){e.printStackTrace();}}
}
此是spring-boot-route系列的第十二篇文章,這個系列的文章都比較簡單,主要目的就是為了幫助初次接觸Spring Boot 的同學有一個系統的認識。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态