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 ...