成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Redis的模糊查詢?cè)谏a(chǎn)環(huán)境出現(xiàn)嚴(yán)重的性能問題

數(shù)據(jù)庫 其他數(shù)據(jù)庫 Redis
Redis是一個(gè)高性能高效率的key-value存儲(chǔ)的nosql數(shù)據(jù)庫,由于數(shù)據(jù)是存儲(chǔ)在內(nèi)存中,因此訪問速度非常快,由于項(xiàng)目涉及到數(shù)據(jù)庫的查詢非常多,而數(shù)據(jù)變大并不是非常頻繁,所以在項(xiàng)目中采用Redis分擔(dān)大部分MySQL的壓力。

Redis是一個(gè)高性能高效率的key-value存儲(chǔ)的nosql數(shù)據(jù)庫,由于數(shù)據(jù)是存儲(chǔ)在內(nèi)存中,因此訪問速度非常快,由于項(xiàng)目涉及到數(shù)據(jù)庫的查詢非常多,而數(shù)據(jù)變大并不是非常頻繁,所以在項(xiàng)目中采用Redis分擔(dān)大部分MySQL的壓力。

在項(xiàng)目中實(shí)際使用我用的Redis提供的客戶端連接工具包jedis,在項(xiàng)目中引入jedis.Jar即可。

  1. public static Set<String> searchLike(String like_key) { 
  2.    //線上環(huán)境模糊查詢帶來嚴(yán)重的性能問題,杜絕使用 
  3.    if(!Config.IS_BUG){ 
  4.         return null
  5.    } 
  6.    Jedis jedis = RedisApi.getJedis(); 
  7.    boolean is_ok = true
  8.    try { 
  9.         if (jedis == null) { 
  10.            return null
  11.         } 
  12.         return jedis.keys(like_key); 
  13.     } catch (Exception e) { 
  14.         // TODO: handle exception 
  15.         is_ok = false
  16.        return null
  17.     } finally { 
  18.         close(jedis, is_ok); 
  19.    } 

每當(dāng)用戶登錄成功之后,都會(huì)生成一個(gè)cookie,分別存在客戶端和Redis數(shù)據(jù)庫,cookie的key由cookie值+用戶ID組成:cookie字符串+"_"+用戶ID,例如用戶cookie為“d9fb0ea5955fcf0a2183c5076”,用戶ID為 19092,那Redis中存儲(chǔ)的key就是 d9fb0ea5955fcf0a2183c5076_19092,最終的key-vlaue就是: 

  1. {"d9fb0ea5955fcf0a2183c5076_19092":d9fb0ea5955fcf0a2183c5076} 

而在用戶不斷的登錄成功,就不斷地產(chǎn)生這樣的記錄,久而久之,會(huì)積累出非常多的無用的key,浪費(fèi)redis的空間,也加重了redis查詢的負(fù)擔(dān),因此想到使用Redis的模糊查詢來清掉無用的cookie的key。

而Redis的客戶端jedis操作是通過jedis.keys(keys)來完成的,keys可以使用通配符來匹配Redis中的key。

通配符說明:

*: 0到任意多個(gè)字符 eg: searchLike("test*")

?: 1個(gè)字符

比如現(xiàn)在需要清除某個(gè)用戶所有的無用的cookie的key,,則可以寫成“ *_19092 ”。

  1. String key_like = "*_19092"
  2. Set<String> keys = RedisApi.searchLike(key_like); 

這樣就可以查出所有這個(gè)用戶的keys,調(diào)用jedis提供的批量刪除key的方法即可達(dá)到目的。

  1. String key_like = "*_19092"
  2. Set<String> keys = RedisApi.searchLike(key_like); 

到這里從需求到邏輯到編碼一氣呵成,簡(jiǎn)單測(cè)試沒什么問題后,就發(fā)布到線上,由于平時(shí)網(wǎng)站的流量不算非常高,所以運(yùn)行了幾天也沒發(fā)生什么異常,直到今天早上,擁有幾十萬粉絲的公眾號(hào)發(fā)推文,推文的內(nèi)容直接鏈接到網(wǎng)站,因此說瞬間流量是非常高。 


運(yùn)行了大約十分鐘之后,運(yùn)營(yíng)突然發(fā)瘋的過來說網(wǎng)站訪問非常慢,甚至出現(xiàn)錯(cuò)誤碼,心里一慌,趕緊上去看日志,我了個(gè)乖乖啊,簡(jiǎn)直是嚇人,error日志想流水一樣蹦出來,但五一不例外都是下面圖示的錯(cuò)誤:從Redis池中獲取不大連接數(shù),馬上上redis服務(wù)器查看,發(fā)現(xiàn)CPU已經(jīng)到達(dá)了100%以上。 


能讓Redis的CPU到100%的,我想出了一下幾個(gè)可能:

  1. 連接數(shù)過多,占用連接的時(shí)間過長(zhǎng)
  2. 存儲(chǔ)的值過大,存取均很占用CPU和內(nèi)存
  3. 慢查詢,事其它操作等待時(shí)間超時(shí)
  4. redis阻塞,某個(gè)操作把Redis阻塞,導(dǎo)致CPU飆升

由于項(xiàng)目上線時(shí)間已經(jīng)很久,前三個(gè)可能基本都在平時(shí)查看Redis服務(wù)器性能的過程中排除掉,因此很大概率是第四個(gè),突然想起前幾天做的功能,有個(gè)模糊查詢,該不是這個(gè)問題吧?我到網(wǎng)站輸入“Redis 模糊查詢 性能”,出來非常多關(guān)于redis模糊查詢性能急劇下降的的情況,而且建議生產(chǎn)環(huán)境下禁用redis的模糊查詢,于是我把模糊查詢這塊業(yè)務(wù)直接注釋掉,重新上線,運(yùn)行了半天,再?zèng)]出現(xiàn)這個(gè)問題,因此可以斷定就是模糊查詢搞的鬼。

【替代方案】

有問題肯定是要解決的,既然模糊查詢行不通的,那就得想別的辦法達(dá)到目的,想到Redis有Set這這種存儲(chǔ)結(jié)構(gòu),因此可以把用戶的所有cookie key都放到一個(gè)用戶專屬的Set中,每次用戶登錄成功之后,都把之前Set里的cookie key清除,然后再把***的key放進(jìn)去,這樣就可以達(dá)到同樣的目的了。 

  1. String setKey = "prefix_customer_cookie_list_10920"
  2.        String token="ss2ssssss"
  3.         //取出所有的用戶的cookie key 
  4.         Set<String> list = RedisApi.getSet(setKey); 
  5.        if (list != null && list.size() > 0) { 
  6.             //刪除用戶所有的cookie key 
  7.             RedisApi.removeFromSet(setKey, list.toArray(new String[0])); 
  8.         } 
  9.        //把***的cookie key加入到Set中 
  10.         RedisApi.addSet(setKey, token); 

 

責(zé)任編輯:龐桂玉 來源: 數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2022-09-04 21:17:03

高可用Linkerd

2011-09-19 10:43:19

Nuget

2020-02-25 15:47:05

ElasticsearLucene地方

2021-12-03 07:27:29

EFCore生產(chǎn)環(huán)境

2015-10-28 16:20:10

短生命周期容器原生云計(jì)算

2020-12-25 09:00:00

Kubernetes容器開發(fā)

2015-08-03 09:08:29

2009-06-25 16:45:31

Hibernate

2020-09-14 07:35:40

Redis命令框架

2020-09-14 15:30:23

開發(fā)技能代碼

2019-09-18 20:46:57

容器生產(chǎn)環(huán)境數(shù)據(jù)中心

2023-11-14 17:40:32

2022-05-26 09:00:00

網(wǎng)站抓取Lightrun開發(fā)

2012-02-07 09:56:06

無代理防毒產(chǎn)品

2009-04-24 10:49:57

Oracle性能優(yōu)化錯(cuò)誤

2011-05-20 10:05:13

Oracle性能優(yōu)化

2010-09-08 15:19:46

生產(chǎn)環(huán)境性能測(cè)試風(fēng)險(xiǎn)

2024-08-14 14:20:00

2021-03-10 07:20:42

Redis命令數(shù)據(jù)

2010-10-29 16:41:12

Oracle模糊查詢
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美日韩久久久久 | xxxcom在线观看 | 日本在线视频不卡 | 午夜在线观看免费 | 亚洲三级视频 | 亚洲福利网 | 久久精品国产免费高清 | 在线观看亚洲欧美 | 国产精品www| 久久在线看 | 国产一区二 | 亚洲激情一区二区三区 | 日韩免费视频一区二区 | av在线一区二区三区 | 国产视频久久 | 国产亚洲成av人片在线观看桃 | 91精品国产色综合久久 | 一级片视频免费 | 国产十日韩十欧美 | 免费观看一级黄色录像 | 伊人狠狠干| 99热在线免费 | 国精产品一品二品国精在线观看 | 欧美一级免费观看 | 国产成人叼嘿视频在线观看 | 一区二区三 | 久久这里只有精品首页 | 高清黄色 | 日韩精品激情 | 欧美日韩精品久久久免费观看 | 8x国产精品视频一区二区 | 亚洲成人免费 | 日韩精品av| 中文字幕一区二区三区精彩视频 | av免费看在线| 国产精品免费看 | 黄色电影在线免费观看 | 欧美日韩精品中文字幕 | 福利片在线| 97色在线视频 | a级黄色网 |