偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

 一、前言

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

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

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

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

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

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

[[236960]]

下邊的學(xué)習(xí),主要介紹項(xiàng)目中使用的方式,有興趣的同學(xué)可以clone代碼一起學(xué)習(xí),倉(cāng)庫(kù)地址:

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

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

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

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

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

(3)Spring配置文件位置:

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

(4)Redis和MyBatis代碼位置:

三、Key值設(shè)計(jì)

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

(1)情景假設(shè)

有實(shí)體對(duì)象SecurityUserDTO,如下:

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

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

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

其中:

SU1_縣級(jí)單位_wangwu_0000000035

可以分為四個(gè)部分:

1、簡(jiǎn)化的實(shí)體對(duì)象名稱,就是SecurityUserDTO的簡(jiǎn)寫,為了縮短Key的長(zhǎng)度;

2、unitType的值,***個(gè)查詢條件;

3、userName的值,第二個(gè)查詢條件;

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

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

assembleRedisKeyPrefix()方法:

assemberIdForKey()方法:

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

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

(4)如何查詢:

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

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

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

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

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

因?yàn)镮D在拼接的時(shí)候肯定是***的,因此,刪除的直接拼接為如下形式即可:

四、總結(jié)

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

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

2017-10-25 08:44:03

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

2024-02-26 00:00:00

sessionredis項(xiàng)目

2019-07-22 15:59:21

2012-01-17 11:02:39

2015-04-17 10:21:37

云存儲(chǔ)附加存儲(chǔ)

2017-07-05 14:09:04

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

2022-08-18 09:38:02

Spring跨域

2023-05-11 07:30:10

KV存儲(chǔ)GC優(yōu)化

2022-09-27 08:04:37

Adapter?設(shè)計(jì)模式

2021-08-06 16:57:39

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

2022-06-23 07:05:46

跳板機(jī)服務(wù)器PAM

2012-12-25 10:48:35

IBMdW

2023-01-26 23:46:15

2023-09-17 23:16:46

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

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實(shí)現(xiàn)

2009-06-03 15:38:37

Struts框架RBAC
點(diǎn)贊
收藏

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