? ? ? ?? ? ? ? ?
今天給大家整理一下SpringBoot集成Redis用法筆記,希望對大家能有所幫助!
? ? ? ? ? ? ? ?
一、Redis優點介紹
1、速度快
不需要等待磁盤的IO,在內存之間進行的數據存儲和查詢,速度非常快。當然,緩存的數據總量不能太大,因為受到物理內存空間大小的限制。
2、支持多種數據庫類型
豐富的數據結構 除了string之外,還有list、hash、set、sortedset,一共五種類型。
3、單線程數據庫
單線程,避免了線程切換和鎖機制的性能消耗。
4、可持久化
支持RDB與AOF兩種方式,將內存中的數據寫入外部的物理存儲設備。
5、支持發布/訂閱。
6、支持Lua腳本。
7、支持分布式鎖
在分布式系統中,如果不同的節點需要訪同到一個資源,往往需要通過互斥機制來防止彼此干擾,并且保證數據的一致性。在這種情況下,需要使用到分布式鎖。分布式鎖和Java的鎖用于實現不同線程之間的同步訪問,原理上是類似的。
8、支持原子操作和事務Redis事務是一組命令的集合。
一個事務中的命令要么都執行,要么都不執行。如果命令在運行期間出現錯誤,不會自動回滾。
9、支持主從復制
支持主-從(Master-Slave)復制與高可用(Redis Sentinel)集群(3.0版本以上)
10、支持管道模式
支持管道Redis管道是指客戶端可以將多個命令一次性發送到服務器,然后由服務器一次性返回所有結果。管道技術的優點是:在批量執行命令的應用場景中,可以大大減少網絡傳輸的開銷,提高性能。
11、支持多種編程語言
二、示例
1、下載redis
大家可以在官網下載 :https://redis.io/ ,有需要的話也可以留言直接發給大家。
然后啟動redis。
2、引入依賴 pom.xml
<!--redis依賴配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
3、增加配置
redis:host: localhostdatabase: 0 port: 6379 password:jedis:pool:max-active: 8 max-wait: -1msmax-idle: 8 min-idle: 0 timeout: 3000ms
4、示例代碼
package my.springboot.redis;
import my.springboot.redis.entity.UserDO;import my.springboot.redis.service.IUserInfoService;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.core.*;import org.springframework.test.context.junit4.SpringRunner;
import java.util.*;import java.util.concurrent.TimeUnit;/** * 測試UserInfo用法 **/@RunWith(SpringRunner.class)@SpringBootTestpublic class RedisTest {@Autowiredprivate RedisTemplate redisTemplate;/*ValueOperations:簡單K - V操作 SetOperations:set類型數據操作 ZSetOperations:zset類型數據操作 HashOperations:針對map類型的數據操作 ListOperations:針對list類型的數據操作*/
@Testpublic void redisStrTest() { ValueOperations<String,Object> valueOperations = redisTemplate.opsForValue(); valueOperations.set("name1","小明"); valueOperations.set("name2","小李");System.out.println("刪除前:"+valueOperations.get("name1"));redisTemplate.delete("name1");//設置name1 60秒 過期 redisTemplate.expire("name1",60, TimeUnit.SECONDS); System.out.println("刪除后:"+valueOperations.get("name1")); UserDO user= new UserDO(); user.setId(1); user.setUserName("小明"); user.setPassword("123456"); valueOperations.set("user",user); UserDO user1= (UserDO) valueOperations.get("user");}@Testpublic void redisListTest() {ListOperations<String,List<String>> listOperations=redisTemplate.opsForList(); List<String> list=new ArrayList<>(); list.add("籃球"); list.add("足球"); listOperations.leftPushAll("list:str",list); List<String> ll=listOperations.range("list:str",0,-1).get(0);long size= listOperations.size("list:str");for (String item: ll ) { System.out.println(item); }// 移除操作 redisTemplate.delete("list:str"); List<String> aa=listOperations.leftPop("list:str"); System.out.println(listOperations.leftPop("list:str")); }@Testpublic void redisHashTest() { HashOperations<String,Object,UserDO> hashOperations = redisTemplate.opsForHash(); UserDO user= new UserDO(); user.setId(1); user.setUserName("小明"); user.setPassword("123456"); hashOperations.put("user:hash",user.hashCode()+"",user); System.out.println(hashOperations.get("user:hash",user.hashCode()+"").getUserName()); }@Testpublic void redisSettTest() { SetOperations<String,UserDO> sortOperations = redisTemplate.opsForSet(); UserDO user= new UserDO(); user.setId(1); user.setUserName("小明"); user.setPassword("123456");UserDO user1= new UserDO(); user1.setId(2); user1.setUserName("小張"); user1.setPassword("888888"); sortOperations.add("user:sort",user,user1); Set<UserDO> result = sortOperations.members("user:sort");for (UserDO item : result ) { System.out.println(item.getUserName());}redisTemplate.delete("user:sort"); System.out.println(result); }
@Testpublic void redisZSetTest() {redisTemplate.delete("ranking-list"); ZSetOperations<String,String> zsortOperations = redisTemplate.opsForZSet();//向集合中插入元素,并設置分數 zsortOperations.add("ranking-list", "小明", 80);//向集合中插入多個元素 DefaultTypedTuple<String> tuple1 = new DefaultTypedTuple<String>("小王", 100.0); DefaultTypedTuple<String> tuple2 = new DefaultTypedTuple<String>("小張", 90.0); zsortOperations.add("ranking-list", new HashSet<>(Arrays.asList(tuple1, tuple2)));System.out.println(zsortOperations.range("ranking-list",0,-1));}
}IT技術分享社區
個人博客網站:https://programmerblog.xyz文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識