redis的相關知識

2022-03-12 11:17:54 字數 1721 閱讀 8528

pom.xml 加入:

org.springframework.datagroupid>  

spring-data-redisartifactid>  

1.6.0.releaseversion>  

dependency>  

redis.clientsgroupid>  

jedisartifactid>  

2.7.3version>  

dependency>  

要啟用快取支援,我們需要建立乙個新的 cachemanager bean。cachemanager 介面有很多實現,本文演示的是和 redis 的整合,自然就是用 rediscachemanager 了。redis 不是應用的共享記憶體,它只是乙個記憶體伺服器,就像 mysql 似的,我們需要將應用連線到它並使用某種「語言」進行互動,因此我們還需要乙個連線工廠以及乙個 spring 和 redis 對話要用的 redistemplate,這些都是 redis 快取所必需的配置,把它們都放在自定義的 cachingconfigurersupport 中:

@configuration  

@enablecaching  

public class rediscacheconfig extends cachingconfigurersupport   

@bean  

public redistemplateredistemplate(redisconnectionfactory cf)   

@bean  

public cachemanager cachemanager(redistemplate redistemplate)   

}  對於使用 @cacheable 註解的方法,每個快取的 key 生成策略預設使用的是引數名+引數值,比如以下方法:

@cacheable("users")  

public user findbyusername(string username)  

這個方法的快取將儲存於 key 為 users~keys 的快取下,對於 username 取值為 "趙德芳" 的快取,key 為 "username-趙德芳"。一般情況下沒啥問題,二般情況如方法 key 取值相等然後引數名也一樣的時候就出問題了,如:

@cacheable("users")  

public integer getlogincountbyusername(string username)  

這個方法的快取也將儲存於 key 為 users~keys 的快取下。對於 username 取值為 "趙德芳" 的快取,key 也為 "username-趙德芳",將另外乙個方法的快取覆蓋掉。

解決辦法是使用自定義快取策略,對於同一業務(同一業務邏輯處理的方法,哪怕是集群/分布式系統),生成的 key 始終一致,對於不同業務則不一致:

@bean  

public keygenerator customkeygenerator()   

return sb.tostring();  

}  };  

}  於是上述兩個方法,對於 username 取值為 "趙德芳" 的快取,雖然都還是存放在 key 為 users~keys 的快取下,但由於 key 分別為 "類名-findbyusername-username-趙德芳" 和 "類名-getlogincountbyusername-username-趙德芳",所以也不會有問題。

這對於集群系統、分布式系統之間共享快取很重要,真正實現了分布式快取。

redis 相關知識

mysql關係型資料庫資料儲存的問題 1,效能瓶頸 磁碟io效能低下 2,擴充套件瓶頸 資料關係複雜,擴充套件性差,不利於搭建集群維護 3,資料增多會讓查詢速度變慢 所以為了減少磁碟io次數,和資料之間的關係,就有了乙個新的概念 nosql nosql not only sql 非關係型資料庫 基於...

Redis相關知識(二)

redis 事務的本質是通過multi exec watch等一組命令的集合。事務支援一次執行多個命令,乙個事務中所有命令都會被序列化。在事務執行過程,會按照順序序列化執行佇列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中。事務開始 multi 命令入隊 事務執行 exec 原子性是...

Redis相關基本知識

1 redis預設16個庫 配置檔案內容如下 set the number of databases.the default database is db 0,you can select a different one on a per connection basis using select ...