redis常用命令

最近學(xué)習(xí)redis,記錄一下

redis官網(wǎng):redis.io

中文官網(wǎng):http://www.redis.net.cn

github地址:https://github.com/antirez/redis

redis和memcached相比,的獨(dú)特之處:

1: redis可以用來(lái)做存儲(chǔ)(storge), 而memccached是用來(lái)做緩存(cache)

這個(gè)特點(diǎn)主要因?yàn)槠溆小背志没钡墓δ?

2: 存儲(chǔ)的數(shù)據(jù)有”結(jié)構(gòu)”,對(duì)于memcached來(lái)說(shuō),存儲(chǔ)的數(shù)據(jù),只有1種類(lèi)型--”字符串”,

而redis則可以存儲(chǔ)字符串,鏈表,哈希結(jié)構(gòu),集合,有序集合

1、Redis下載安裝

1:官方站點(diǎn): redis.io 下載最新版或者最新stable版

2:解壓源碼并進(jìn)入目錄

3: 不用configure

4: 直接make

(如果是32位機(jī)器 make 32bit)

注:易碰到的問(wèn)題,時(shí)間錯(cuò)誤.

原因: 源碼是官方configure過(guò)的,但官方configure時(shí),生成的文件有時(shí)間戳信息,

Make只能發(fā)生在configure之后,

如果你的虛擬機(jī)的時(shí)間不對(duì),比如說(shuō)是2012年

解決: date -s ‘yyyy-mm-ddhh:mm:ss’?? 重寫(xiě)時(shí)間

再 clock -w? 寫(xiě)入cmos

5: 可選步驟: make test? 測(cè)試編譯情況

(可能出現(xiàn): need tcl? >8.4這種情況, yum install tcl)

6: 安裝到指定的目錄,比如 /usr/local/redis

make?PREFIX=/usr/local/redis install

注: PREFIX要大寫(xiě)

7: make install之后,得到如下幾個(gè)文件

redis-benchmark? 性能測(cè)試工具

redis-check-aof? 日志文件檢測(cè)工(比如斷電造成日志損壞,可以檢測(cè)并修復(fù))

redis-check-dump? 快照文件檢測(cè)工具,效果類(lèi)上

redis-cli?客戶(hù)端

redis-server 服務(wù)端

8: 復(fù)制配置文件

Cp /path/redis.conf /usr/local/redis

9: 啟動(dòng)與連接

/path/to/redis/bin/redis-server? ./path/to/conf-file

例:[root@localhostredis]# ./bin/redis-server ./redis.conf

連接: 用redis-cli

#/path/to/redis/bin/redis-cli [-h localhost-p 6379 ]

10: 讓redis以后臺(tái)進(jìn)程的形式運(yùn)行

編輯conf配置文件,修改如下內(nèi)容;

daemonize yes

2、redis各個(gè)類(lèi)型操作命令

set key value

設(shè)置key和value

get key

獲取key對(duì)應(yīng)的值

keys *

獲取當(dāng)前庫(kù)的所有key

exist key

返回key是否存在

type key

返回key存儲(chǔ)的值的類(lèi)型 有string,link,set,order set, hash

del key

刪除key

rename key newkey

重命名key

renamenx key newkey

當(dāng)庫(kù)里有newkey時(shí)不做任何操作,如果沒(méi)有newkey則進(jìn)行重命名

select db

切換redis數(shù)據(jù)庫(kù)

move key db

移動(dòng)key到對(duì)應(yīng)的庫(kù)下

expire key 整數(shù)

設(shè)置key的生命周期 整數(shù)單位是秒

ttl key

查詢(xún)key的生命周期 返回的是秒數(shù) 注:對(duì)于不存在的key返回-2,已過(guò)期的key或者不過(guò)期的key都返回-1

pexpire key 整數(shù)

設(shè)置key的生命周期 整數(shù)單位是毫秒

pttl key

查詢(xún)key的生命周期 返回的是毫秒數(shù) 注:對(duì)于不存在的key返回-2,已過(guò)期的key或者不過(guò)期的key都返回-1

persist key

把指定key設(shè)置永久有效

flushdb

清空當(dāng)前庫(kù)

2.1、Redis 字符串 (Strings)

set key value [ex 秒數(shù)] / [px 毫秒數(shù)] ?[nx] /[xx]

如: set a 1 ex 10 , 10秒有效

Set a 1 px 9000 ?, 9秒有效

注: 如果ex,px同時(shí)寫(xiě),以后面的有效期為準(zhǔn)

如 set a 1 ex 100 px 9000, 實(shí)際有效期是9000毫秒

nx: 表示key不存在時(shí),執(zhí)行操作

xx: 表示key存在時(shí),執(zhí)行操作

mset ?即multi set

一次性設(shè)置多個(gè)鍵值

mset key1 v1 key2 v2 ....

mget key1 key2 ..keyn

獲取多個(gè)key的值

setrange key offset value

把字符串的offset偏移字節(jié),改成value

append key value

把value追加到key的原值上

getrange key start stop

是獲取字符串中 [start, stop]范圍的值 注意: 對(duì)于字符串的下標(biāo),左數(shù)從0開(kāi)始,右數(shù)從-1開(kāi)始

getset key newvalue

獲取并返回舊值,設(shè)置新值

incr key

指定的key的值加1,并返回加1后的值

注意:

1:不存在的key當(dāng)成0,再incr操作

2: 范圍為64有符號(hào)

incrby key number

指定key的值加指定數(shù)

decr key

指定的key的值減1,并返回減1后的值

decrby key number

指定的key的值減去指定數(shù)

2.2、Redis 列表(Lists)

lpush key value

把值插入到鏈接頭部

rpush key value

把值插入到鏈接尾部

lpop key

返回并刪除鏈表頭元素

rpop key

返回并刪除鏈表尾元素

lrem key count value

從key鏈表中刪除 value值

注: 刪除count的絕對(duì)值個(gè)value后結(jié)束

Count>0 從表頭刪除

Count<0 從表尾刪除

lrange key start ?stop

返回鏈表中[start ,stop]中的元素

規(guī)律: 左數(shù)從0開(kāi)始,右數(shù)從-1開(kāi)始

ltrim key start stop

剪切key對(duì)應(yīng)的鏈接,切[start,stop]一段,并把該段重新賦給key

lindex key index

返回index索引上的值

llen key

計(jì)算鏈接表的元素個(gè)數(shù)

linsert ?key after|before search value

作用: 在key鏈表中尋找’search’,并在search值之前|之后,.插入value

注: 一旦找到一個(gè)search后,命令就結(jié)束了,因此不會(huì)插入多個(gè)value

例如:

test:1>lrange char 0 -1

1) ?"b"

2) ?"c"

3) ?"d"

test:1>linsert char after d h

"4"

test:1>lrange char 0 -1

1) ?"b"

2) ?"c"

3) ?"d"

4) ?"h"

test:1>

rpoplpush source dest

作用: 把source的尾部拿出,放在dest的頭部,

并返回 該單元值

場(chǎng)景: task + bak 雙鏈表完成安全隊(duì)列

Task列表 ? ? ? ? ? ? ? ? ? ? ? ? ? ? bak列表

業(yè)務(wù)邏輯:

1:Rpoplpush task bak

2:接收返回值,并做業(yè)務(wù)處理

3:如果成功,rpop bak 清除任務(wù). 如不成功,下次從bak表里取任務(wù)

例如:

test:1>lrange char 0 -1

1) ?"b"

2) ?"c"

3) ?"d"

4) ?"h"

test:1>rpoplpush char bak

"h"

test:1>lrange char 0 -1

1) ?"b"

2) ?"c"

3) ?"d"

test:1>lrange bak 0 -1

1) ?"h"

test:1>

brpop ,blpop ?key timeout

作用:等待彈出key的尾/頭元素,

Timeout為等待超時(shí)時(shí)間

如果timeout為0,則一直等待

場(chǎng)景: 長(zhǎng)輪詢(xún)Ajax,在線聊天時(shí),能夠用到

2.3、bitmaps(位圖)

getbit key offset

獲取值的二進(jìn)制表示,對(duì)應(yīng)位上的值(從左,從0編號(hào))

setbit ?key offset value

設(shè)置offset對(duì)應(yīng)二進(jìn)制位上的值

返回: 該位上的舊值

注意:

1:如果offset過(guò)大,則會(huì)在中間填充0,

2: offset最大大到多少

3:offset最大2^32-1,可推出最大的的字符串為512M

bitop operation destkey key1 [key2 ...]

對(duì)key1,key2..keyN作operation,并將結(jié)果保存到 destkey 上。

operation 可以是 AND 、 OR 、 NOT 、 XOR

注意: 對(duì)于NOT操作, key不能多個(gè)

2.4、Redis 集合 (Sets)

set集合的性質(zhì): 唯一性,無(wú)序性,確定性

sadd key ?value1 value2

往集合key中增加元素

smembers key

查看key中的所有元素

srem value1 value2

刪除集合中集為 value1 value2的元素

返回值: 忽略不存在的元素后,真正刪除掉的元素的個(gè)數(shù)

spop key

返回并刪除集合中key中1個(gè)隨機(jī)元素

srandmember key

返回集合key中一個(gè)隨機(jī)數(shù)

sismember key value

判斷元素是否在集合key中存在,存在:1,不存在:0

scard key

查看key中元素個(gè)數(shù)

smove source dest value

把source中的value刪除,并添加到dest集合中

例如:

test:2>smembers sett

1) ?"e"

2) ?"b"

3) ?"d"

4) ?"c"

5) ?"a"

test:2>scard sett

"5"

test:2>smove sett dest a

"1"

test:2>smembers dest

1) ?"a"

test:2>smembers sett

1) ?"e"

2) ?"b"

3) ?"d"

4) ?"c"

sinter ?key1 key2 key3 ...

求出key1 key2 key3 三個(gè)集合中的交集,并返回

例如:

test:2>sadd sur1 a b c d e

"5"

test:2>sadd sur2 b c e f g

"5"

test:2>sadd sur3 c e g b a

"5"

test:2>sinter sur1 sur2 sur3

1) ?"e"

2) ?"c"

3) ?"b"

test:2>

sinterstore dest key1 key2 key3

求出key1 key2 key3 三個(gè)集合中的交集,并賦給dest

例如:

test:2>sinterstore dest sur1 sur2 sur3

"3"

test:2>smembers dest

1) ?"e"

2) ?"b"

3) ?"c"

test:2>

sunion key1 key2 key3

返回key1 key2 key3三個(gè)集合的并集

test:2>sunion sur1 sur2 sur3

1) ?"e"

2) ?"f"

3) ?"b"

4) ?"d"

5) ?"g"

6) ?"a"

7) ?"c"

test:2>

sdiff key1 key2 key3

返回key1與key2 key3的差集,即key1-key2-key3

test:2>sdiff sur1 sur2 sur3

1) ?"d"

test:2>

2.5、Redis 有序集合 (Sorted sets)

zadd key score1 value1 score2 value2 ..

添加元素

test:3>zadd age 1 a 2 b 3 c 4 d

"4"

zrange key 0 -1

查看key所有元素

zrem key value1 value2 ..

刪除集合中的元素

test:3>zrem age d

"1"

test:3>zrange age 0 -1

1) ?"a"

2) ?"b"

3) ?"c"

test:3>

zremrangebyscore key min max

按照socre來(lái)刪除元素,刪除score在[min,max]之間的

test:3>zrange age 0 -1

1) ?"a"

2) ?"b"

3) ?"c"

4) ?"d"

5) ?"e"

6) ?"f"

test:3>zremrangebyscore age 2 3

"2"

test:3>zrange age 0 -1

1) ?"a"

2) ?"d"

3) ?"e"

4) ?"f"

test:3>

zremrangebyrank key start end

按排名刪除元素,刪除名次在[start,end]之間的

test:3>zrange age 0 -1

1) ?"a"

2) ?"d"

3) ?"e"

4) ?"f"

test:3>zremrangebyrank age 0 1

"2"

test:3>zrange age 0 -1

1) ?"e"

2) ?"f"

test:3>

zrank key member

查詢(xún)member的排名(升續(xù) 0名開(kāi)始)

test:3>zrange age 0 -1

1) ?"a"

2) ?"b"

3) ?"c"

4) ?"d"

5) ?"e"

6) ?"f"

test:3>zrank age d

"3"

zrevrank key memeber

查詢(xún) member的排名(降續(xù) 0名開(kāi)始)

test:3>zrange age 0 -1

1) ?"a"

2) ?"b"

3) ?"c"

4) ?"d"

5) ?"e"

6) ?"f"

test:3>zrank age d

"3"

test:3>zrevrank age e

"1"

zrange key start stop [WITHSCORES]

把集合排序后,返回名次[start,stop]的元素

默認(rèn)是升續(xù)排列

Withscores 是把score也打印出來(lái)

test:3>zrange age 2 3

1) ?"c"

2) ?"d"

test:3>zrange age 2 3 withscores

1) ?"c"

2) ?"3"

3) ?"d"

4) ?"4"

zrevrange key start stop

作用:把集合降序排列,取名字[start,stop]之間的元素

test:3>zrevrange age 1 2

1) ?"e"

2) ?"d"

test:3>zrevrange age 1 2 withscores

1) ?"e"

2) ?"5"

3) ?"d"

4) ?"4"

zrangebyscore ?key min max [withscores] limit offset N

作用: 集合(升續(xù))排序后,取score在[min,max]內(nèi)的元素,

并跳過(guò) offset個(gè), 取出N個(gè)

test:3>zrange age 0 -1

1) ?"a"

2) ?"b"

3) ?"c"

4) ?"d"

5) ?"e"

6) ?"f"

test:3>zrange age 0 -1 withscores

1) ?"a"

2) ?"1"

3) ?"b"

4) ?"2"

5) ?"c"

6) ?"3"

7) ?"d"

8) ?"4"

9) ?"e"

10) ?"5"

11) ?"f"

12) ?"6"

test:3>zrangebyscore age 1 4 limit 1 2 withscores

1) ?"b"

2) ?"2"

3) ?"c"

4) ?"3"

test:3>

zcard key

返回元素個(gè)數(shù)

zcount key min max

返回[min,max] 區(qū)間內(nèi)元素的數(shù)量

test:3>zcount age 1 5

"5"

zinterstore destination numkeys key1 [key2 ...]

[weights weight [weight ...]]

[aggregate SUM|MIN|MAX]

求key1,key2的交集,key1,key2的權(quán)重分別是 weight1,weight2

聚合方法用: sum |min|max

聚合的結(jié)果,保存在dest集合內(nèi)

注意: weights ,aggregate如何理解?

答: 如果有交集, 交集元素又有socre,score怎么處理?

Aggregate sum->score相加 ? , min 求最小score, max 最大score

另: 可以通過(guò)weigth設(shè)置不同key的權(quán)重, 交集時(shí),socre * weights

test:3>zadd s1 1 a 2 b 3 c 4 d

"4"

test:3>zadd s2 2 a 4 b 5 e 6 g

"4"

test:3>zinterstore dest 2 s1 s2

"2"

test:3>zrange dest 0 -1

1) ?"a"

2) ?"b"

test:3>zrange dest 0 -1 withscores

1) ?"a"

2) ?"3"

3) ?"b"

4) ?"6"

test:3>zinterstore dest 2 s1 s2 aggregate sum

"2"

test:3>zrange dest 0 -1 withscores

1) ?"a"

2) ?"3"

3) ?"b"

4) ?"6"

test:3>zinterstore dest 2 s1 s2 aggregate min

"2"

test:3>zrange dest 0 -1 withscores

1) ?"a"

2) ?"1"

3) ?"b"

4) ?"2"

test:3>zinterstore dest 2 s1 s2 aggregate max

"2"

test:3>zrange dest 0 -1 withscores

1) ?"a"

2) ?"2"

3) ?"b"

4) ?"4"

test:3>zinterstore dest 2 s1 s2 weights 2 1 aggregate sum

"2"

test:3>zrange dest 0 -1 withscores

1) ?"a"

2) ?"4"

3) ?"b"

4) ?"8"

2.6、Redis 哈希/散列 (Hashes)

hset key field value

作用: 把key中 filed域的值設(shè)為value

注:如果沒(méi)有field域,直接添加,如果有,則覆蓋原field域的值

test:4>hset user username lisi

"1"

test:4>hset user age 28

"1"

test:4>hset user gender male

"1"

hmset key field1 value1 [field2 value2 field3 value3 ......fieldn valuen]

作用: 設(shè)置field1->N 個(gè)域, 對(duì)應(yīng)的值是value1->N

test:4>hmset user username zhangsan age 30 gender female

"OK"

test:4>

hget key field

作用: 返回key中field域的值

test:4>hget user username

"zhangsan"

test:4>

hmget key field1 field2 fieldN

作用: 返回key中field1 field2 fieldN域的值

test:4>hmget user username age gender

1) ?"zhangsan"

2) ?"30"

3) ?"female"

test:4>

hgetall key

作用:返回key中,所有域與其值

test:4>hgetall user

1) ?"username"

2) ?"zhangsan"

3) ?"age"

4) ?"30"

5) ?"gender"

6) ?"female"

test:4>

hdel key field

作用: 刪除key中 field域

test:4>hdel user age

"1"

test:4>hgetall user

1) ?"username"

2) ?"zhangsan"

3) ?"gender"

4) ?"female"

test:4>

hlen key

作用: 返回key中元素的數(shù)量

test:4>hlen user

"2"

test:4>

hexists key field

作用: 判斷key中有沒(méi)有field域

test:4>hexists user username

"1"

test:4>hexists user age

"0"

test:4>

hinrby key field value

作用: 是把key中的field域的值增長(zhǎng)整型值value

test:4>hincrby user age 1

"21"

test:4>

hincrbyfloat ?key field value

作用: 是把key中的field域的值增長(zhǎng)浮點(diǎn)值value

test:4>hincrbyfloat user age 0.5

"21.5"

test:4>

hkeys key

作用: 返回key中所有的field

test:4>hkeys user

1) ?"username"

2) ?"gender"

3) ?"age"

test:4>

kvals key

作用: 返回key中所有的value

test:4>hvals user

1) ?"zhangsan"

2) ?"female"

3) ?"21.5"

test:4>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、String類(lèi)型:存儲(chǔ)的數(shù)據(jù)都是string類(lèi)型的 1、set name fangzy //設(shè)置值 name...
    fangzy0723閱讀 366評(píng)論 0 0
  • 查看當(dāng)前所有的KEY KEYS *KEYS zhang* #查看前綴為zhang的所有鍵; 查看當(dāng)前redis...
    Zhang21閱讀 10,503評(píng)論 0 3
  • Redis提供了豐富的命令(command)對(duì)數(shù)據(jù)庫(kù)和各種數(shù)據(jù)類(lèi)型進(jìn)行操作,這些command可以在Linux終端...
    OzanShareing閱讀 571評(píng)論 0 2
  • 我家男女一比一 to 多多 4個(gè)月前,深夜11點(diǎn),其實(shí)過(guò)了12點(diǎn),你就剛好37周了,理論上來(lái)說(shuō)算是一個(gè)足月寶寶了,...
    清風(fēng)尤靈閱讀 587評(píng)論 0 50
  • 今夜又下起了雨,窗外的雨聲淅淅瀝瀝的,而屋內(nèi)卻十分的燥熱?;蛟S是屋內(nèi)的人的內(nèi)心太不平靜了吧。 夜晚,是一個(gè)適合碼字...
    Miss夏晚閱讀 265評(píng)論 0 0

友情鏈接更多精彩內(nèi)容