分代緩存和轉換

康拉德(Konrad)最近在我們公司的技術室中分享了有關如何完成緩存的有趣文章,這是一個大型的波蘭社交網絡nk.pl。 算法中的核心概念之一是分代緩存 (請參閱此處或此處 )。 基本思想是,對于緩存鍵,您使用一些特定于實體的字符串+版本號。 每當數據更改時,版本號都會增加,從而使所有舊的緩存條目無效,并防止讀取過時的數據。 這假設緩存具有一些垃圾回收,例如,它可能只是LRU緩存。

當然,對于每個請求,我們都必須知道版本號,這就是為什么必須將其存儲在全局緩存中(但根據我們的一致性要求,它也可以異步地分布在整個集群中)。 但是,數據本身可以存儲在本地緩存中。 因此,如果我們的系統是只讀的,那么每個請求唯一要做的“昂貴”操作就是檢索我們感興趣的實體的版本號。這通常是非常簡單的信息,可以完全保留在-記憶。

根據數據類型和使用模式,您可以緩存單個實體(例如,對于Person實體,緩存鍵可以是person-9128-123是id,123是版本號)或整個批次(例如,對于一個Countries實體,緩存密鑰可以是countries-8 ,版本號是8。 此外,在全局緩存中,您可以按ID或按實體保存最新的版本號。 意味著當版本更改時,您會使特定實體或所有實體無效。

在編寫了大部分Envers之后 ,我很自然地想到可以將實體修訂號用作緩存版本 。 隨后的Envers修訂版是單調遞增的數字,對于每筆交易,您都會獲得下一個。 因此,每當緩存的實體發生更改時,您都必須使用最新的修訂版號填充全局緩存。

Envers提供了幾種獲取修訂號的方法。 在交易期間,您可以調用AuditReader .getCurrentRevision()方法,該方法將為您提供修訂元數據,包括修訂號。 如果您想要更細粒度的控制,則可以實現自己的偵聽器( EntityTrackingRevisionListener ),請參閱docs ,并在實體更改時得到通知,并在那里更新全局緩存。 您還可以注冊交易完成后的回調,并在事務邊界之外更新緩存。 或者,如果您知道實體ID,則可以使用AuditReader.getRevisionsAuditQueryCreator查找最大修訂版本號。

由于您可以在事務處理過程中獲取當前的修訂版本號,因此,如果使用事務性緩存(例如Infinispan) ,甚至可以原子地更新全局緩存中的版本/修訂版。

當然,除了審計之外,所有這些仍然是Envers的主要目的:)

參考: Adam Warski博客的Blog中來自JCG合作伙伴 Adam Warski的分代緩存和Envers 。


翻譯自: https://www.javacodegeeks.com/2012/07/generational-caching-and-envers.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371805.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371805.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371805.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

css精靈

○ css 精靈(Sprites)技術利用photoshop將圖片整合,然后用background-images,background-position,background-repeat技術,對圖片進行精確定位。 ○ 優點:減少http請求數量,減少服務…

基于Jenkins+Gitlab的自動化部署實戰

故事背景 一個中小型企業,是典型的互聯網公司,當初期的時候可能運維只能標配到2~3人,此時隨著公司的發展,項目會逐漸增多。前期部署項目可能都是手動的, 俗稱“人肉部署”,這簡直是無比的痛苦,不…

cmd如何刷新MySQL數據庫_怎樣在cmd中用命令操作MySQL數據庫 需要技巧

用命令來操作MySQL是工作必備的,今天我就來分享一下cmd命令操作MySQL數據庫的方法,希望有幫助。工具/材料電腦xampp操作方法01首先,啟動MySQL服務才行哦。這里我是用xampp集成的數據庫,方便,點擊‘start’。02如圖&…

Java順序IO性能

許多應用程序將一系列事件記錄到基于文件的存儲中,以供以后使用。 從日志記錄和審核,直到在事件源設計或其緊密相關的CQRS中保留事務重做日志,這都可以是任何東西。 Java具有多種方法,可以通過這些方法將文件順序寫入或重新讀取。…

text段,data段,bss段,堆和棧

.bss段和.data段的區別 text段,data段,bss段,堆和棧轉載于:https://www.cnblogs.com/jingzhishen/p/6203107.html

[BZOJ3529][Sdoi2014]數表

[BZOJ3529][Sdoi2014]數表 試題描述 有一張Nm的數表&#xff0c;其第i行第j列&#xff08;1 < i < n&#xff0c;1 < j < m&#xff09;的數值為能同時整除i和j的所有自然數之和。給定a&#xff0c;計算數表中不大于a的數之和。輸入 輸入包含多組數據。輸入的第一行…

ZK的實際應用:MVVM –表單綁定

這是我們從頭開始構建ZK應用程序的第二集。 上一篇文章涉及使用MVVM將數據加載和呈現到表中。 在本文中&#xff0c;我們將向您介紹ZK MVVM的表單綁定。 目的 我們將構建一個“添加”功能&#xff0c;使我們能夠將新條目保存到清單中。 單擊“添加”時出現表格 單擊“保存”…

群暉按裝mysql_如何連接群暉里的MYSQL數據庫

匿名用戶1級2018-08-27 回答一、連接遠程數據庫&#xff1a;1、顯示密碼如&#xff1a;MySQL 連接遠程數據庫(192.168.5.116)&#xff0c;端口“3306”&#xff0c;用戶名為“root”&#xff0c;密碼“123456”C:/>mysql -h 192.168.5.116 -P 3306 -u root -p1234562、隱藏密…

ZK的實際應用:MVVM –以編程方式更新視圖

在前兩篇文章中&#xff0c;我們使用ZK的MVVM功能來&#xff1a; 將數據加載到表中 使用表單綁定保存數據 我們已經看到&#xff0c;用注解NotifyChange&#xff08;&#xff09;裝飾方法時&#xff0c;在執行完成后&#xff0c;將向Binder通知VM屬性的更改&#xff0c;以便B…

給你一個笑臉

今日冬至&#xff0c;愿你笑靨如初 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <title>Document</title> </head> <body> <canvas id"mycanvas" width"800px&qu…

mysql安裝與配置的截圖_windows下MySQL5.6版本安裝及配置過程附有截圖和詳細說明...

隨著MYSQL版本的更新以及電腦系統的變化&#xff0c;我們給大家整理了各種電腦環境下安裝MYSQL的圖解過程&#xff0c;希望我們整理的內容能夠幫助到大家&#xff1a;mysql安裝圖解總結https://www.jb51.net/article/142398.htm編輯者&#xff1a;Vocabulary下面詳細介紹5.6版本…

mysql 更新日的數據類型_[每日更新-MySQL基礎]5.常用的數據類型-整數和字符串

1. 數據類型在學習PHP的時候我們已經講過數據類型了&#xff0c;所謂數據類型就是數據的格式。每一種數據類型在計算機中存儲的方式會有差異&#xff0c;占用的存儲容量也有區別&#xff0c;所以選擇合適的數據類型可以節約我們的存儲成本&#xff0c;也方便我們的程序運行和…

Hello World with Spring 3 MVC

在2005年&#xff0c;我對Martin Fowler的這篇文章對Spring進行了介紹。從那時起&#xff0c;我就修改了許多IoC框架&#xff0c;包括Guice &#xff0c; PicoContainer &#xff0c; NanoContainer等。雖然我很喜歡與IoC一起工作&#xff0c;但我必須說Spring在過去的5年中&am…

ansible 安裝

1、簡介 ansible是新出現的自動化運維工具&#xff0c;基于Python開發&#xff0c;集合了眾多運維工具&#xff08;puppet、cfengine、chef、func、fabric&#xff09;的優點&#xff0c;實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基于模塊工作的&#…

JS原型詳解

參考的別人家的博客http://www.cnblogs.com/ljchow/archive/2010/06/08/1753526.html ###JS原型####JS原型&#xff0c;就是原型對象&#xff0c;簡稱原型。不僅構造函數有&#xff0c;普通函數也有* 普通函數&#xff1a;javascript function puTong(){ }; alert(puTong.proto…

c# mysql 插入 和 查詢_C#對數據庫的操作(增刪改查)

1、【在web.config文件中配置】2、【連接字符串】private static readonly string StrCon ConfigurationManager.ConnectionStrings["sqlConnection"].ToString();3、【查詢數據方法】/// /// 查詢數據/// /// 查詢語句/// 參數/// public static DataTable QueryDa…

利用docker在window7下安裝TensorFlow

安裝過程下碰了不少坑&#xff0c;記錄一下安裝過程&#xff0c;方便以后有需要時復用。 1、安裝docker 下載最新版本的docker并且默認安裝即可&#xff0c;安裝后打開Docker Quickstart Terminal&#xff0c;初次進去需要一段時間。 下載網址&#xff1a;https://www.docker.c…

哈希長度擴展攻擊

在這篇文章中&#xff0c;我將盡力避免夏季的低迷&#xff0c;而將重點放在比抱怨天氣更有趣的事情上-哈希長度擴展攻擊。 散列長度擴展攻擊沒什么復雜或復雜的&#xff0c;說實話&#xff0c;這只是關于如何使用散列函數。 正如我以前的一篇文章中所討論的那樣&#xff0c;哈希…

2017年07月03號課堂筆記

2017年07月03號 星期一 多云 空氣質量&#xff1a;輕度污染~中度污染 內容&#xff1a;MySQL第四節課 in和not in&#xff1b;兩個表的內連接&#xff1b;exists和not exsits的使用&#xff1b;all,any和some&#xff1b; 使用子查詢的注意事項&#xff1b;sql優化&#xff08…

excel文件被寫保護怎么解除_u盤被寫保護怎么解除,看完你就知道了

在平常我們使用U盤存儲資料過程中&#xff0c;有時會發現U盤出現無法正常讀寫的現象&#xff0c;具備表現為U盤被寫保護&#xff0c;無法正常執行讀寫操作。對于小編給大家提供以下解決方法&#xff0c;希望對大家能有所幫助。對U盤執行重置操作01上網搜索并下載“USBOOT”程序…