自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Redis存儲Key的一種設(shè)計實現(xiàn)方式:模式匹配

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

 一、前言

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

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

硬要實現(xiàn)的話需要多條命令并計算并集或交集。

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

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

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

[[236960]]

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

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

二、項目結(jié)構(gòu)

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

(1)項目結(jié)構(gòu):

(2)數(shù)據(jù)庫腳本:

(3)Spring配置文件位置:

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

(4)Redis和MyBatis代碼位置:

三、Key值設(shè)計

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

(1)情景假設(shè)

有實體對象SecurityUserDTO,如下:

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

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

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

其中:

SU1_縣級單位_wangwu_0000000035

可以分為四個部分:

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

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

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

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

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

assembleRedisKeyPrefix()方法:

assemberIdForKey()方法:

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

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

(4)如何查詢:

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

查詢的時候,也是需要根據(jù)查詢條件構(gòu)造Key值,然后讀取數(shù)據(jù)。

如果,查詢條件都有的話,構(gòu)造的Key值如下:

如果,查詢條件只有一個的話,構(gòu)造的Key值如下:

(5)修改數(shù)據(jù)和刪除數(shù)據(jù):

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

四、總結(jié)

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

責任編輯:武曉燕 來源: Java后端技術(shù)
相關(guān)推薦

2017-10-25 08:44:03

NVMe SSD數(shù)據(jù)存儲

2024-02-26 00:00:00

sessionredis項目

2019-07-22 15:59:21

2012-01-17 11:02:39

2015-04-17 10:21:37

云存儲附加存儲

2022-08-18 09:38:02

Spring跨域

2017-07-05 14:09:04

系統(tǒng)設(shè)計與架構(gòu)java云計算

2022-09-27 08:04:37

Adapter?設(shè)計模式

2023-05-11 07:30:10

KV存儲GC優(yōu)化

2021-08-06 16:57:39

存儲Redis數(shù)據(jù)類型

2022-06-23 07:05:46

跳板機服務器PAM

2012-12-25 10:48:35

IBMdW

2023-01-26 23:46:15

2023-09-17 23:16:46

緩存數(shù)據(jù)庫

2011-02-25 13:52:18

Proftpd管理

2011-02-25 13:52:18

Proftpd管理

2022-06-06 15:44:24

大數(shù)據(jù)數(shù)據(jù)分析思維模式

2021-11-05 21:33:28

Redis數(shù)據(jù)高并發(fā)

2013-05-22 15:31:07

AOP的CGlib實現(xiàn)

2009-06-03 15:38:37

Struts框架RBAC
點贊
收藏

51CTO技術(shù)棧公眾號