精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:大數據采集存儲 → 正文

Redis存儲Key實現方式:模式匹配 —— 模式匹配

責任編輯:fjin 作者:徐劉根 |來源:企業網D1Net  2018-07-19 15:50:16 本文摘自:Java后端技術

一、前言

Redis是Key-Value數據庫,存儲的時候需要一個唯一的Key值,查詢的時候根據根據key值進行查詢,但是Redis畢竟只是key-value存儲,所以有很多局限性。例如:

(1)無法實現多條件組合的查詢,如:

 

 

硬要實現的話需要多條命令并計算并集或交集。

(2)模糊查詢中文比較費勁;

因此,如何設計一個合適的Key來優化我們的查詢操作,是一個比較有意義的事情。

對于Key的設計網上有很多資料,但對我來說,都太過于凌亂,并沒有找到一個合適的方案。下邊,和大家一起學習一種較為簡單的模式匹配方式的Key值設計方法。

 

 

下邊的學習,主要介紹項目中使用的方式,有興趣的同學可以clone代碼一起學習,倉庫地址:

https://git.oschina.net/xuliugen/redis-demo.git

二、項目結構

SSM框架(Spring+Spring MVC+MyBatis),除了實現了對Redis的存儲,還通過注解的方式實現了數據庫的讀寫分離功能,實現了Spring對數據庫和Redis的事務管理,JSR303校驗,以及簡單的領域驅動DDD思想項目。

(1)項目結構:

(2)數據庫腳本:

 

 

 

 

 

 

(3)Spring配置文件位置:

 

 

其中,db-redis.xml文件中,如下代碼表示開啟Redis事務:

 

 

(4)Redis和MyBatis代碼位置:

 

 

三、Key值設計

上述,大致看了依托的項目結構,還沒有開始Redis Key值得設計,因此可以跳過,下邊主要學習一下,如何設計一種Key實現模式匹配查詢方式。

(1)情景假設

有實體對象SecurityUserDTO,如下:

 

 

這里假設用戶對象最常用的查詢條件是:用戶名(userName)和單位類型(unitType),因此,對于數據庫設計的時候,我們應該對這兩個屬性加上索引(題外話,完全和Key的設計無關!只是在于點一下這種最常見的數據庫加索引的方式)。

 

 

數據庫做了索引,那我,我們將數據存儲到Redis中的時候,如何在把他取出來那?

(2)首先,看一下最終存放在Redis中的數據格式:

 

 

其中:

SU1_縣級單位_wangwu_0000000035

可以分為四個部分:

 

 

1、簡化的實體對象名稱,就是SecurityUserDTO的簡寫,為了縮短Key的長度;

2、unitType的值,第一個查詢條件;

3、userName的值,第二個查詢條件;

4、ID的值,十位數值,前邊不足十位補0;

(3)如何拼接,核心代碼如下:

 

 

assembleRedisKeyPrefix()方法:

 

 

assemberIdForKey()方法:

 

 

到這里,基本已經知道了大致拼接的過程,因此存放到Redis的數據是如下格式:

 

 

注:可以SecurityUserController#addUser(SecurityUserDTO userDTO)方法測試效果。

(4)如何查詢:

查詢的話可以參考SecurityUserController#listByCondition()方法:

 

 

查詢的時候,也是需要根據查詢條件構造Key值,然后讀取數據。

如果,查詢條件都有的話,構造的Key值如下:

 

 

如果,查詢條件只有一個的話,構造的Key值如下:

 

 

(5)修改數據和刪除數據:

因為ID在拼接的時候肯定是唯一的,因此,刪除的直接拼接為如下形式即可:

 

 

四、總結

拼接Key的方式很簡單,以常用的查詢條件屬性作為拼接Key的依據,當然還可以通過其他的方式,但最主要的是如何去實踐。

 

關鍵字:存儲

本文摘自:Java后端技術

x Redis存儲Key實現方式:模式匹配 掃一掃
分享本文到朋友圈
當前位置:大數據采集存儲 → 正文

Redis存儲Key實現方式:模式匹配 —— 模式匹配

責任編輯:fjin 作者:徐劉根 |來源:企業網D1Net  2018-07-19 15:50:16 本文摘自:Java后端技術

一、前言

Redis是Key-Value數據庫,存儲的時候需要一個唯一的Key值,查詢的時候根據根據key值進行查詢,但是Redis畢竟只是key-value存儲,所以有很多局限性。例如:

(1)無法實現多條件組合的查詢,如:

 

 

硬要實現的話需要多條命令并計算并集或交集。

(2)模糊查詢中文比較費勁;

因此,如何設計一個合適的Key來優化我們的查詢操作,是一個比較有意義的事情。

對于Key的設計網上有很多資料,但對我來說,都太過于凌亂,并沒有找到一個合適的方案。下邊,和大家一起學習一種較為簡單的模式匹配方式的Key值設計方法。

 

 

下邊的學習,主要介紹項目中使用的方式,有興趣的同學可以clone代碼一起學習,倉庫地址:

https://git.oschina.net/xuliugen/redis-demo.git

二、項目結構

SSM框架(Spring+Spring MVC+MyBatis),除了實現了對Redis的存儲,還通過注解的方式實現了數據庫的讀寫分離功能,實現了Spring對數據庫和Redis的事務管理,JSR303校驗,以及簡單的領域驅動DDD思想項目。

(1)項目結構:

(2)數據庫腳本:

 

 

 

 

 

 

(3)Spring配置文件位置:

 

 

其中,db-redis.xml文件中,如下代碼表示開啟Redis事務:

 

 

(4)Redis和MyBatis代碼位置:

 

 

三、Key值設計

上述,大致看了依托的項目結構,還沒有開始Redis Key值得設計,因此可以跳過,下邊主要學習一下,如何設計一種Key實現模式匹配查詢方式。

(1)情景假設

有實體對象SecurityUserDTO,如下:

 

 

這里假設用戶對象最常用的查詢條件是:用戶名(userName)和單位類型(unitType),因此,對于數據庫設計的時候,我們應該對這兩個屬性加上索引(題外話,完全和Key的設計無關!只是在于點一下這種最常見的數據庫加索引的方式)。

 

 

數據庫做了索引,那我,我們將數據存儲到Redis中的時候,如何在把他取出來那?

(2)首先,看一下最終存放在Redis中的數據格式:

 

 

其中:

SU1_縣級單位_wangwu_0000000035

可以分為四個部分:

 

 

1、簡化的實體對象名稱,就是SecurityUserDTO的簡寫,為了縮短Key的長度;

2、unitType的值,第一個查詢條件;

3、userName的值,第二個查詢條件;

4、ID的值,十位數值,前邊不足十位補0;

(3)如何拼接,核心代碼如下:

 

 

assembleRedisKeyPrefix()方法:

 

 

assemberIdForKey()方法:

 

 

到這里,基本已經知道了大致拼接的過程,因此存放到Redis的數據是如下格式:

 

 

注:可以SecurityUserController#addUser(SecurityUserDTO userDTO)方法測試效果。

(4)如何查詢:

查詢的話可以參考SecurityUserController#listByCondition()方法:

 

 

查詢的時候,也是需要根據查詢條件構造Key值,然后讀取數據。

如果,查詢條件都有的話,構造的Key值如下:

 

 

如果,查詢條件只有一個的話,構造的Key值如下:

 

 

(5)修改數據和刪除數據:

因為ID在拼接的時候肯定是唯一的,因此,刪除的直接拼接為如下形式即可:

 

 

四、總結

拼接Key的方式很簡單,以常用的查詢條件屬性作為拼接Key的依據,當然還可以通過其他的方式,但最主要的是如何去實踐。

 

關鍵字:存儲

本文摘自:Java后端技術

電子周刊
回到頂部

關于我們聯系我們版權聲明隱私條款廣告服務友情鏈接投稿中心招賢納士

企業網版權所有 ©2010-2024 京ICP備09108050號-6 京公網安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 淮滨县| 台北市| 承德县| 漳州市| 禄劝| 辽中县| 原平市| 河津市| 铁岭县| 新竹市| 平罗县| 崇信县| 永福县| 迁安市| 梧州市| 元江| 盈江县| 望奎县| 涟源市| 南开区| 远安县| 渝中区| 疏附县| 太仆寺旗| 舟山市| 太和县| 五大连池市| 鸡东县| 绥滨县| 忻州市| 高雄市| 新晃| 隆林| 醴陵市| 浮山县| 黄石市| 措勤县| 永和县| 衢州市| 蓬莱市| 天峨县|