redis字符串類型詳解及應(yīng)用場景分析

常用命令

設(shè)置值

set key value [ex seconds] [px milliseconds] [nx|xx]

選項(xiàng)說明:
ex seconds 設(shè)置秒級(jí)過期時(shí)間
px milliseconds 設(shè)置毫秒級(jí)過期時(shí)間
nx 鍵不存在時(shí)才設(shè)置成功罩润,用于添加
xx 鍵存在時(shí)才設(shè)置成功粘捎,用于更新

除了set選項(xiàng)榴芳,redis還提供了setnx,作用與nx選項(xiàng)相同

127.0.0.1:6379> exists hello
(integer) 0
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> setnx hello redis
(integer) 0
127.0.0.1:6379> set hello redis xx
OK
127.0.0.1:6379> get hello
"redis"

獲取值

get key

鍵不存在返回nil

127.0.0.1:6379> get hello
"redis"
127.0.0.1:6379> get test
(nil)

批量設(shè)置與獲取值

mset key value [key value ...]
mget key [key ...]

127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK
127.0.0.1:6379> mget a b c d
1) "1"
2) "2"
3) "3"
4) "4"

批量操作命令可以有效提高效率,減少因?yàn)槎鄺l命令執(zhí)行而產(chǎn)生的網(wǎng)絡(luò)傳輸時(shí)間

計(jì)數(shù)

incr key
incr命令用于對(duì)值做自增操作耻姥,結(jié)果分為:
值不是整數(shù),返回錯(cuò)誤
值是整數(shù),返回自增后的結(jié)果
鍵不存在来农,按照值為0自增,返回結(jié)果為1

127.0.0.1:6379> exists num
(integer) 0
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> incr hello
(error) ERR value is not an integer or out of range

除了incr崇堰,redis還提供了decr(自減), incrby(自增指定數(shù)字), decrby(自減指定數(shù)字), incrbyfloat(自增浮點(diǎn)數(shù))

decr key
incrby key increment
decrby key decrement
incrbyfloat key increment

其他指令

追加值

append key value

127.0.0.1:6379> get name
"redis"
127.0.0.1:6379> append name course
(integer) 11
127.0.0.1:6379> get name
"rediscourse"

字符串長度

strlenkey
每個(gè)中文占3個(gè)字節(jié)

127.0.0.1:6379> set hello '世界'
OK
127.0.0.1:6379> strlen hello
(integer) 6
127.0.0.1:6379> get name
"rediscourse"
127.0.0.1:6379> strlen name
(integer) 11

設(shè)置新值并返回原始值

getset key value

127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> getset hello world
(nil)
127.0.0.1:6379> getset hello redis
"world"

設(shè)置指定位置的字符

setrange key offset value

127.0.0.1:6379> set redis pest
OK
127.0.0.1:6379> setrange redis 0 b
(integer) 4
127.0.0.1:6379> get redis
"best"

獲取部分字符串

getrange key start end

127.0.0.1:6379> getrange redis 0 1
"be"

時(shí)間復(fù)雜度有

字符串相關(guān)指令的時(shí)間復(fù)雜度


image.png

應(yīng)用場景

緩存功能

典型的使用:mysql作為存儲(chǔ)層沃于,redis作為緩存層,用戶獲取數(shù)據(jù)首先從緩存層獲取海诲,如果緩存失效或者不命中繁莹,再去mysql獲取數(shù)據(jù),并更新redis緩存特幔。這樣絕大部分的數(shù)據(jù)都是從redis獲取咨演,能有效地降低mysql的壓力

redis鍵名設(shè)置規(guī)范:推薦用"業(yè)務(wù)名:對(duì)象名:id:[屬性]"作為鍵名。
如mysql的數(shù)據(jù)庫名為vs,用戶表名為user,那么對(duì)應(yīng)的鍵可以用"vs:user:1:name"來表示
在能描述鍵含義的前提下適應(yīng)減少鍵的長度蚯斯,減少由于鍵過長的內(nèi)存浪費(fèi)

共享session

分布式的web服務(wù)將用戶的session信息保存在各自的服務(wù)器薄风,在負(fù)載均衡的分發(fā)下,用戶在訪問頁面時(shí)會(huì)請求到不同的服務(wù)器上拍嵌,由于session不一致遭赂,用戶的登錄信息不能同步,導(dǎo)致用戶需要重新登錄撰茎。
解決方案:將用戶的session統(tǒng)一存入redis進(jìn)入集中管理

限速

為了防止用戶頻繁地進(jìn)行某些操作嵌牺,可能通過redis的過期時(shí)間對(duì)用戶行為進(jìn)行限制。如限制用戶每隔3秒才能進(jìn)行一次搜索,當(dāng)用戶發(fā)起搜索后逆粹,就將key設(shè)置過期時(shí)間為3秒募疮,再次請求時(shí)檢查key是否過期,如果不過期就給予友好提示僻弹。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阿浓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蹋绽,更是在濱河造成了極大的恐慌芭毙,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卸耘,死亡現(xiàn)場離奇詭異退敦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚣抗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門侈百,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翰铡,你說我怎么就攤上這事钝域。” “怎么了锭魔?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵例证,是天一觀的道長。 經(jīng)常有香客問我迷捧,道長织咧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任党涕,我火速辦了婚禮烦感,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膛堤。我一直安慰自己手趣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布肥荔。 她就那樣靜靜地躺著绿渣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪燕耿。 梳的紋絲不亂的頭發(fā)上中符,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音誉帅,去河邊找鬼淀散。 笑死右莱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的档插。 我是一名探鬼主播慢蜓,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼郭膛!你這毒婦竟也來了晨抡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤则剃,失蹤者是張志新(化名)和其女友劉穎耘柱,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棍现,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡调煎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年赵讯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吭敢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娃循,死狀恐怖朴肺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坚洽,我是刑警寧澤戈稿,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站讶舰,受9級(jí)特大地震影響鞍盗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜跳昼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一般甲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹅颊,春花似錦敷存、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帝雇,卻和暖如春涮俄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尸闸。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工彻亲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留孕锄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓苞尝,卻偏偏與公主長得像畸肆,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子野来,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理恼除,服務(wù)發(fā)現(xiàn),斷路器曼氛,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • NOSQL類型簡介鍵值對(duì):會(huì)使用到一個(gè)哈希表豁辉,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù),如redis舀患,volde...
    MicoCube閱讀 3,981評(píng)論 2 27
  • 本文將從Redis的基本特性入手聊浅,通過講述Redis的數(shù)據(jù)結(jié)構(gòu)和主要命令對(duì)Redis的基本能力進(jìn)行直觀介紹餐抢。之后概...
    kelgon閱讀 61,165評(píng)論 23 625
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)旷痕、高可擴(kuò)展、高可用顽冶、大數(shù)據(jù)存儲(chǔ)問題而產(chǎn)生的數(shù)據(jù)庫解決方...
    克魯?shù)吕?/span>閱讀 5,291評(píng)論 0 36
  • 知乎上有一個(gè)問題强重,如果你去到某個(gè)城市绞呈,作為東道主如何帶你認(rèn)識(shí)這個(gè)城市。我不算石家莊土著间景,來這里短短六年時(shí)間佃声,在這里...
    石門吹雪閱讀 409評(píng)論 1 4