spring boot整合redis實現(xiàn)RedisTemplate三分鐘快速入門
引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
RedisTemplate五種數(shù)據(jù)結構的操作
- redisTemplate.opsForValue(); //操作字符串
- redisTemplate.opsForHash(); //操作hash
- redisTemplate.opsForList(); //操作list
- redisTemplate.opsForSet(); //操作set
- redisTemplate.opsForZSet(); //操作有序zset
RedisTemplate方法講解
判斷key是否存在
/** * 判斷key是否存在 */ @GetMapping("haskey") public boolean hasKey(String key) { return redisTemplate.hasKey(key); }
獲取指定的key的失效時間
/** * 指定key的失效時間 */ @GetMapping("expire") public void expire(String key, long time) { //參數(shù)一:key //參數(shù)二:睡眠時間 //參數(shù)三:睡眠時間單位 TimeUnit.DAYS 天 TimeUnit.HOURS 小時 。。。 redisTemplate.expire(key, time, TimeUnit.MINUTES); }
根據(jù)key獲取過期時間
/** * 根據(jù)key獲取過期時間 */ @GetMapping("getexpire") public long getExpire(String key) { Long expire = redisTemplate.getExpire(key); return expire; }
根據(jù)key刪除reids中緩存數(shù)據(jù)
/** * 根據(jù)key刪除reids中緩存數(shù)據(jù) */ @GetMapping("delredisbykey") public void delete(String key) { redisTemplate.delete(key); }
保存和讀取String
/** * 保存和讀取String */ @GetMapping("stringredisdemo") public String stringredisdemo() { //設置過期時間為1分鐘 redisTemplate.opsForValue().set("key1", "value1", 1, TimeUnit.MINUTES); redisTemplate.opsForValue().set("key2", "value2"); redisTemplate.opsForValue().set("key3", "value3"); //讀取redis數(shù)據(jù) String result1 = redisTemplate.opsForValue().get("key1").toString(); String result2 = redisTemplate.opsForValue().get("key2").toString(); String result3 = redisTemplate.opsForValue().get("key3").toString(); System.out.println("緩存結果為:result:" + result1 + " " + result2 + " " + result3); return "緩存結果為:result:" + result1 + " " + result2 + " " + result3; }
保存和讀取list
/** * 保存和讀取list */ @GetMapping("listredisdemo") public String listredisdemo() { List<String> list1 = new ArrayList<>(); list1.add("a1"); list1.add("a2"); list1.add("a3"); List<String> list2 = new ArrayList<>(); list2.add("b1"); list2.add("b2"); list2.add("b3"); redisTemplate.opsForList().leftPush("listkey1", list1); redisTemplate.opsForList().rightPush("listkey2", list2); List<String> resultList1 = (List<String>) redisTemplate.opsForList().leftPop("listkey1"); List<String> resultList2 = (List<String>) redisTemplate.opsForList().rightPop("listkey2"); System.out.println("resultList1:" + resultList1); System.out.println("resultList2:" + resultList2); return "成功"; }
Hash結構,保存和讀取map
/** * Hash結構,保存和讀取map */ @GetMapping("mapredisdemo") public String mapredisdemo() { Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.put("key4", "value4"); map.put("key5", "value5"); redisTemplate.opsForHash().putAll("map1", map); Map<String, String> resultMap = redisTemplate.opsForHash().entries("map1"); List<String> reslutMapList = redisTemplate.opsForHash().values("map1"); Set<String> resultMapSet = redisTemplate.opsForHash().keys("map1"); String value = (String) redisTemplate.opsForHash().get("map1", "key1"); System.out.println("value:" + value); System.out.println("resultMapSet:" + resultMapSet); System.out.println("resultMap:" + resultMap); System.out.println("resulreslutMapListtMap:" + reslutMapList); return "成功"; }
保存和讀取Set
/** * 保存和讀取Set */ @GetMapping("setredisdemo") public String getredisdemo() { SetOperations<String, String> set = redisTemplate.opsForSet(); set.add("key1", "value1"); set.add("key1", "value2"); set.add("key1", "value3"); Set<String> resultSet = redisTemplate.opsForSet().members("key1"); System.out.println("resultSet:" + resultSet); return "resultSet:" + resultSet; }
保存和讀取zset
/** * 保存和讀取zset */ @GetMapping("zsetredisdemo") public String zsetredisdemo() { ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<>("zset-5", 9.6); ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple<>("zset-6", 9.9); Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<>(); tuples.add(objectTypedTuple1); tuples.add(objectTypedTuple2); System.out.println(redisTemplate.opsForZSet().add("zset1", tuples)); System.out.println(redisTemplate.opsForZSet().range("zset1", 0, -1)); return "成功"; }
完整示例代碼
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.DefaultTypedTuple; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.SetOperations; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.*; import java.util.concurrent.TimeUnit; @RestController public class ReidsDemo { @Autowired RedisTemplate redisTemplate; /** * 指定key的失效時間 */ @GetMapping("expire") public void expire(String key, long time) { //參數(shù)一:key //參數(shù)二:睡眠時間 //參數(shù)三:睡眠時間單位 TimeUnit.DAYS 天 TimeUnit.HOURS 小時 。。。 redisTemplate.expire(key, time, TimeUnit.MINUTES); } /** * 根據(jù)key獲取過期時間 */ @GetMapping("getexpire") public long getExpire(String key) { Long expire = redisTemplate.getExpire(key); return expire; } /** * 判斷key是否存在 */ @GetMapping("haskey") public boolean hasKey(String key) { return redisTemplate.hasKey(key); } /** * 根據(jù)key刪除reids中緩存數(shù)據(jù) */ @GetMapping("delredisbykey") public void delete(String key) { redisTemplate.delete(key); } /** * 保存和讀取String */ @GetMapping("stringredisdemo") public String stringredisdemo() { //設置過期時間為1分鐘 redisTemplate.opsForValue().set("key1", "value1", 1, TimeUnit.MINUTES); redisTemplate.opsForValue().set("key2", "value2"); redisTemplate.opsForValue().set("key3", "value3"); //讀取redis數(shù)據(jù) String result1 = redisTemplate.opsForValue().get("key1").toString(); String result2 = redisTemplate.opsForValue().get("key2").toString(); String result3 = redisTemplate.opsForValue().get("key3").toString(); System.out.println("緩存結果為:result:" + result1 + " " + result2 + " " + result3); return "緩存結果為:result:" + result1 + " " + result2 + " " + result3; } /** * 保存和讀取list */ @GetMapping("listredisdemo") public String listredisdemo() { List<String> list1 = new ArrayList<>(); list1.add("a1"); list1.add("a2"); list1.add("a3"); List<String> list2 = new ArrayList<>(); list2.add("b1"); list2.add("b2"); list2.add("b3"); redisTemplate.opsForList().leftPush("listkey1", list1); redisTemplate.opsForList().rightPush("listkey2", list2); List<String> resultList1 = (List<String>) redisTemplate.opsForList().leftPop("listkey1"); List<String> resultList2 = (List<String>) redisTemplate.opsForList().rightPop("listkey2"); System.out.println("resultList1:" + resultList1); System.out.println("resultList2:" + resultList2); return "成功"; } /** * Hash結構,保存和讀取map */ @GetMapping("mapredisdemo") public String mapredisdemo() { Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); redisTemplate.opsForHash().putAll("map1", map); Map<String, String> resultMap = redisTemplate.opsForHash().entries("map1"); List<String> reslutMapList = redisTemplate.opsForHash().values("map1"); Set<String> resultMapSet = redisTemplate.opsForHash().keys("map1"); String value = (String) redisTemplate.opsForHash().get("map1", "key1"); System.out.println("value:" + value); System.out.println("resultMapSet:" + resultMapSet); System.out.println("resultMap:" + resultMap); System.out.println("resulreslutMapListtMap:" + reslutMapList); return "成功"; } /** * 保存和讀取Set */ @GetMapping("setredisdemo") public String getredisdemo() { SetOperations<String, String> set = redisTemplate.opsForSet(); set.add("key1", "value1"); set.add("key1", "value2"); set.add("key1", "value3"); Set<String> resultSet = redisTemplate.opsForSet().members("key1"); System.out.println("resultSet:" + resultSet); return "resultSet:" + resultSet; } /** * 保存和讀取zset */ @GetMapping("zsetredisdemo") public String zsetredisdemo() { ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<>("zset-5", 9.6); ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple<>("zset-6", 9.9); Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<>(); tuples.add(objectTypedTuple1); tuples.add(objectTypedTuple2); System.out.println(redisTemplate.opsForZSet().add("zset1", tuples)); System.out.println(redisTemplate.opsForZSet().range("zset1", 0, -1)); return "成功"; } }
序列化
直接粘貼在項目中即可
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /* *序列化 */ @Configuration public class MyRedisConfig { @Bean(name = "redisTemplate") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){ RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); //參照StringRedisTemplate內(nèi)部實現(xiàn)指定序列化器 redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(keySerializer()); redisTemplate.setHashKeySerializer(keySerializer()); redisTemplate.setValueSerializer(valueSerializer()); redisTemplate.setHashValueSerializer(valueSerializer()); return redisTemplate; } private RedisSerializer<String> keySerializer(){ return new StringRedisSerializer(); } //使用Jackson序列化器 private RedisSerializer<Object> valueSerializer(){ return new GenericJackson2JsonRedisSerializer(); } }
到此這篇關于spring boot整合redis實現(xiàn)RedisTemplate三分鐘快速入門的文章就介紹到這了,更多相關springboot RedisTemplate入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
一文了解MyBatis Plus批量數(shù)據(jù)插入功能
mybatisPlus底層的新增方法是一條一條的新增的,下面這篇文章主要給大家介紹了MyBatis Plus批量數(shù)據(jù)插入功能的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-09-09在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的方法
這篇文章主要介紹了在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05一場由Java中Integer引發(fā)的踩坑實戰(zhàn)
Java中的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和復雜數(shù)據(jù)類型int是前者而integer是后者(也就是一個類),下面這篇文章主要給大家介紹了關于由Java中Integer引發(fā)的踩坑實戰(zhàn),需要的朋友可以參考下2022-11-11Mybatis之動態(tài)SQL使用小結(全網(wǎng)最新)
MyBatis令人喜歡的一大特性就是動態(tài)SQL,?在使用JDBC的過程中,?根據(jù)條件進行SQL的拼接是很麻煩且很容易出錯的,MyBatis通過OGNL來進行動態(tài)SQL的使用解決了這個麻煩,對Mybatis動態(tài)SQL相關知識感興趣的朋友跟隨小編一起看看吧2024-05-05