常用命令
設(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ù)雜度
應(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是否過期,如果不過期就給予友好提示僻弹。