<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
資料在新增到MySQL不進行快取,在精確查詢進行快取,做到查詢即快取,不查詢不快取
// 虛擬碼範例 Xx代表你的的業務物件 如User Goods等等 public class XxLazyCache { @Autowired private RedisTemplate<String, Xx> redisTemplate; @Autowired private XxService xxService;// 你的業務service /** * 查詢 通過查詢快取是否存在驅動快取載入 建議在前置業務保證id對應資料是絕對存在於資料庫中的 */ public Xx getXx(int id) { // 1.查詢快取裡面有沒有資料 Xx xxCache = getXxFromCache(id); if(xxCache != null) { return xxCache;// 衛語句使程式碼更有利於閱讀 } // 2.查詢資料庫獲取資料 我們假定到業務這一步,傳過來的id都在資料庫中有對應資料 Xx xx = xxService.getXxById(id); // 3.設定快取、這一步相當於Redis快取懶載入,下次再查詢此id,則會走快取 setXxFromCache(xx); return xx; } } /** * 對xx資料進行修改或者刪除操作 運算元據庫成功後 刪除快取 * 刪除請求 - 刪除資料庫資料 刪除快取 * 修改請求 - 更新資料庫資料 刪除快取 下次在查詢時候就會從資料庫拉取新的資料到快取中 */ public void deleteXxFromCache(long id) { String key = "Xx:" + xx.getId(); redisTemplate.delete(key); } private void setXxFromCache(Xx xx) { String key = "Xx:" + xx.getId(); redisTemplate.opsForValue().set(key, xx); } private Xx getXxFromCache(int id) { // 通過快取字首拼裝唯一主鍵作為快取Key 如Xxx資訊 就是Xxx:id String key = "Xx:" + id; return redisTemplate.opsForValue().get(key); } } // 業務類 public class XxServie { @Autowired private XxLazyCache xxLazyCache; // 查詢資料庫 public Xx getXxById(long id) { // 省略實現 return xx; } public void updateXx(Xx xx) { // 更新MySQL資料 省略 // 刪除快取 xxLazyCache.deleteXxFromCache(xx.getId()); } public void deleteXx(long id) { // 刪除MySQL資料 省略 // 刪除快取 xxLazyCache.deleteXxFromCache(xx.getId()); } } // 實體類 @Data public class Xx { // 業務主鍵 private Long id; // ...省略 } 複製程式碼
微服務場景下,多個微服務使用一個大快取,流資料業務下,高頻讀取快取對Redis壓力很大,我們使用本地快取結合Redis快取使用,降低Redis壓力,同時本地快取沒有連線開銷,效能更優
在流處數處理過程中,微服務對多個裝置上傳的資料進行處理,每個裝置有一個code,流資料的頻率高,在訊息佇列傳送過程中使用分割區傳送,我們需要為裝置code生成對應的自增號,用自增號對kafka中topic分割區數進行取模,這樣如果有10000臺裝置,自增號就是0~9999,在取模後就進行分割區傳送就可以做到每個分割區均勻分佈,這個自增號我們使用redis的自增數生成,生成後放到redis的hash結構進行快取,每次來一個裝置,我們就去這個hash快取中取,沒有取到就使用自增數生成一個,然後放到redis的hash快取中,這時候每個裝置的自增數一經生成是不會再發生改變的,我們就想到使用本地快取進行優化,避免高頻的呼叫redis去獲取,降低redis壓力,下面連結為我寫的關於kafka分割區消費的文章,大家可以去看看 Kafka分割區傳送及消費實戰
/** * 此快取演示如何結合redis自增數 hash 本地快取使用進行裝置自增數的生成、快取、本地快取 * 本地快取使用Guava Cache */ public class DeviceIncCache { /** * 本地快取 */ private Cache<String, Integer> localCache = CacheBuilder.newBuilder() .concurrencyLevel(16) // 並行級別 .initialCapacity(1000) // 初始容量 .maximumSize(10000) // 快取最大長度 .expireAfterAccess(1, TimeUnit.HOURS) // 快取1小時沒被使用就過期 .build(); @Autowired private RedisTemplate<String, Integer> redisTemplate; /** * redis自增數快取的key */ private static final String DEVICE_INC_COUNT = "device_inc_count"; /** * redis裝置編碼對應自增數的hash快取key */ private static final String DEVICE_INC_VALUE = "device_inc_value"; /** * 獲取裝置自增數 */ public int getInc(String deviceCode){ // 1.從本地快取獲取 Integer inc = localCache.get(deviceCode); if(inc != null) { return inc; } // 2.本地快取未命中,從redis的hash快取獲取 inc = (Integer)redisTemplate.opsForHash().get(DEVICE_INC_VALUE, deviceCode); // 3. redis的hash快取中沒有,說明是新裝置,先為裝置生成一個自增號 if(inc == null) { inc = redisTemplate.opsForValue().increment(DEVICE_INC_COUNT).intValue; // 新增到redis hash快取 redisTemplate.opsForHash().put(DEVICE_INC_VALUE, deviceCode, inc); } // 4.新增到本地快取 localCache.put(deviceCode, inc); // 4.返回自增數 return inc; } }
redis提供了豐富的資料型別及api,非常適合業務系統開發,統計計數(increment,decrement),標記位(bitmap),鬆散資料(hash),先進先出、佇列式讀取(list);guava快取作為本地快取,能夠高效的讀取的同時,提供了大量api方便我們控制本地快取的資料量及冷資料淘汰;我們充分的學習這些特效能夠幫助我們在業務開發中更加輕鬆靈活,在空間與時間上找到一個平衡點。
到此這篇關於Redis與本地快取的結合實現的文章就介紹到這了,更多相關Redis本地快取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45