redis常用命令

最近學習redis,記錄一下

redis官網:redis.io

中文官網:http://www.redis.net.cn

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

redis和memcached相比,的獨特之處:

1: redis可以用來做存儲(storge), 而memccached是用來做緩存(cache)

這個特點主要因為其有”持久化”的功能.

2: 存儲的數據有”結構”,對于memcached來說,存儲的數據,只有1種類型--”字符串”,

而redis則可以存儲字符串,鏈表,哈希結構,集合,有序集合

1、Redis下載安裝

1:官方站點: redis.io 下載最新版或者最新stable版

2:解壓源碼并進入目錄

3: 不用configure

4: 直接make

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

注:易碰到的問題,時間錯誤.

原因: 源碼是官方configure過的,但官方configure時,生成的文件有時間戳信息,

Make只能發生在configure之后,

如果你的虛擬機的時間不對,比如說是2012年

解決: date -s ‘yyyy-mm-ddhh:mm:ss’?? 重寫時間

再 clock -w? 寫入cmos

5: 可選步驟: make test? 測試編譯情況

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

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

make?PREFIX=/usr/local/redis install

注: PREFIX要大寫

7: make install之后,得到如下幾個文件

redis-benchmark? 性能測試工具

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

redis-check-dump? 快照文件檢測工具,效果類上

redis-cli?客戶端

redis-server 服務端

8: 復制配置文件

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

9: 啟動與連接

/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以后臺進程的形式運行

編輯conf配置文件,修改如下內容;

daemonize yes

2、redis各個類型操作命令

set key value

設置key和value

get key

獲取key對應的值

keys *

獲取當前庫的所有key

exist key

返回key是否存在

type key

返回key存儲的值的類型 有string,link,set,order set, hash

del key

刪除key

rename key newkey

重命名key

renamenx key newkey

當庫里有newkey時不做任何操作,如果沒有newkey則進行重命名

select db

切換redis數據庫

move key db

移動key到對應的庫下

expire key 整數

設置key的生命周期 整數單位是秒

ttl key

查詢key的生命周期 返回的是秒數 注:對于不存在的key返回-2,已過期的key或者不過期的key都返回-1

pexpire key 整數

設置key的生命周期 整數單位是毫秒

pttl key

查詢key的生命周期 返回的是毫秒數 注:對于不存在的key返回-2,已過期的key或者不過期的key都返回-1

persist key

把指定key設置永久有效

flushdb

清空當前庫

2.1、Redis 字符串 (Strings)

set key value [ex 秒數] / [px 毫秒數] ?[nx] /[xx]

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

Set a 1 px 9000 ?, 9秒有效

注: 如果ex,px同時寫,以后面的有效期為準

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

nx: 表示key不存在時,執行操作

xx: 表示key存在時,執行操作

mset ?即multi set

一次性設置多個鍵值

mset key1 v1 key2 v2 ....

mget key1 key2 ..keyn

獲取多個key的值

setrange key offset value

把字符串的offset偏移字節,改成value

append key value

把value追加到key的原值上

getrange key start stop

是獲取字符串中 [start, stop]范圍的值 注意: 對于字符串的下標,左數從0開始,右數從-1開始

getset key newvalue

獲取并返回舊值,設置新值

incr key

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

注意:

1:不存在的key當成0,再incr操作

2: 范圍為64有符號

incrby key number

指定key的值加指定數

decr key

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

decrby key number

指定的key的值減去指定數

2.2、Redis 列表(Lists)

lpush key value

把值插入到鏈接頭部

rpush key value

把值插入到鏈接尾部

lpop key

返回并刪除鏈表頭元素

rpop key

返回并刪除鏈表尾元素

lrem key count value

從key鏈表中刪除 value值

注: 刪除count的絕對值個value后結束

Count>0 從表頭刪除

Count<0 從表尾刪除

lrange key start ?stop

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

規律: 左數從0開始,右數從-1開始

ltrim key start stop

剪切key對應的鏈接,切[start,stop]一段,并把該段重新賦給key

lindex key index

返回index索引上的值

llen key

計算鏈接表的元素個數

linsert ?key after|before search value

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

注: 一旦找到一個search后,命令就結束了,因此不會插入多個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的頭部,

并返回 該單元值

場景: task + bak 雙鏈表完成安全隊列

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

業務邏輯:

1:Rpoplpush task bak

2:接收返回值,并做業務處理

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

例如:

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為等待超時時間

如果timeout為0,則一直等待

場景: 長輪詢Ajax,在線聊天時,能夠用到

2.3、bitmaps(位圖)

getbit key offset

獲取值的二進制表示,對應位上的值(從左,從0編號)

setbit ?key offset value

設置offset對應二進制位上的值

返回: 該位上的舊值

注意:

1:如果offset過大,則會在中間填充0,

2: offset最大大到多少

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

bitop operation destkey key1 [key2 ...]

對key1,key2..keyN作operation,并將結果保存到 destkey 上。

operation 可以是 AND 、 OR 、 NOT 、 XOR

注意: 對于NOT操作, key不能多個

2.4、Redis 集合 (Sets)

set集合的性質: 唯一性,無序性,確定性

sadd key ?value1 value2

往集合key中增加元素

smembers key

查看key中的所有元素

srem value1 value2

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

返回值: 忽略不存在的元素后,真正刪除掉的元素的個數

spop key

返回并刪除集合中key中1個隨機元素

srandmember key

返回集合key中一個隨機數

sismember key value

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

scard key

查看key中元素個數

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 三個集合中的交集,并返回

例如:

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 三個集合中的交集,并賦給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三個集合的并集

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來刪除元素,刪除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

查詢member的排名(升續 0名開始)

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

查詢 member的排名(降續 0名開始)

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]的元素

默認是升續排列

Withscores 是把score也打印出來

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

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

并跳過 offset個, 取出N個

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

返回元素個數

zcount key min max

返回[min,max] 區間內元素的數量

test:3>zcount age 1 5

"5"

zinterstore destination numkeys key1 [key2 ...]

[weights weight [weight ...]]

[aggregate SUM|MIN|MAX]

求key1,key2的交集,key1,key2的權重分別是 weight1,weight2

聚合方法用: sum |min|max

聚合的結果,保存在dest集合內

注意: weights ,aggregate如何理解?

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

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

另: 可以通過weigth設置不同key的權重, 交集時,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域的值設為value

注:如果沒有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]

作用: 設置field1->N 個域, 對應的值是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中元素的數量

test:4>hlen user

"2"

test:4>

hexists key field

作用: 判斷key中有沒有field域

test:4>hexists user username

"1"

test:4>hexists user age

"0"

test:4>

hinrby key field value

作用: 是把key中的field域的值增長整型值value

test:4>hincrby user age 1

"21"

test:4>

hincrbyfloat ?key field value

作用: 是把key中的field域的值增長浮點值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>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容

  • 1、String類型:存儲的數據都是string類型的 1、set name fangzy //設置值 name...
    fangzy0723閱讀 345評論 0 0
  • 查看當前所有的KEY KEYS *KEYS zhang* #查看前綴為zhang的所有鍵; 查看當前redis...
    Zhang21閱讀 10,393評論 0 3
  • Redis提供了豐富的命令(command)對數據庫和各種數據類型進行操作,這些command可以在Linux終端...
    OzanShareing閱讀 534評論 0 2
  • 我家男女一比一 to 多多 4個月前,深夜11點,其實過了12點,你就剛好37周了,理論上來說算是一個足月寶寶了,...
    清風尤靈閱讀 545評論 0 50
  • 今夜又下起了雨,窗外的雨聲淅淅瀝瀝的,而屋內卻十分的燥熱。或許是屋內的人的內心太不平靜了吧。 夜晚,是一個適合碼字...
    Miss夏晚閱讀 207評論 0 0