redis入門篇

redis入門篇

    一、redis簡介

    redis是key-value數據結構的內存數據庫。

    至於具體特點,會在本系列最後一一列出,先看redis的入門。

    二、redis的五種數據類型和指令

    1、對key的操作指令

    判斷key是否存在->exists key,代碼及結果如下:

127.0.0.1:6379> exists name
(integer) 1

    刪除指定的key->del key1...keyN,返回刪除key的個數,代碼及結果如下:

127.0.0.1:6379> del name one
(integer) 1
    返回指定格式的key->keys pattern,代碼及結果如下:
127.0.0.1:6379> keys *
1) "hey"
2) "newint"
3) "list"
    隨機返回數據庫中的一個key,若無key則返回空串->randomkey,代碼及結果如下:
127.0.0.1:6379> randomkey
"list"
127.0.0.1:6379> randomkey
"hey"
    對key重命名,若newkey存在會執行成功並覆蓋->rename oldkey newkey,代碼及結果如下:
127.0.0.1:6379> rename list cool
OK

    對key重命名,若newkey存在會返回0->renamenx oldkey newkey(在之後大多指令會用到nx後綴),代碼以及結果如下:

127.0.0.1:6379> renamenx list hey
(integer) 0
127.0.0.1:6379> rename list hey
OK
    設置key的過期時間->expire key seconds,查看key的過期時間->ttl key,代碼及結果如下:
127.0.0.1:6379> expire a 10
(integer) 1
127.0.0.1:6379> ttl a
(integer) 7
127.0.0.1:6379> ttl a
(integer) 5
127.0.0.1:6379> ttl a
(integer) 5
127.0.0.1:6379> ttl a
(integer) 4
127.0.0.1:6379> ttl a
(integer) 3
127.0.0.1:6379> ttl a
(integer) 2
127.0.0.1:6379> get a
(nil)

    選擇數據庫index,redis有邏輯分區的16個數據庫,互相不干擾,可以通過select index來選擇。

    可以將當前數據庫的key挪動到指定index的數據庫->move key index,代碼及結果如下:

127.0.0.1:6379> move newint 1
(integer) 1
127.0.0.1:6379> get newint
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get newint
"5"

    2、redis的String類型,以及他的相關指令

    這是redis最簡單的數據類型,value的最大上限爲一個G,可以存放圖片的序列化二進制文件。

    get和set方法可以設置和獲取值,代碼以及結果如下:

127.0.0.1:6379> set string abc
OK
127.0.0.1:6379> get string
"abc"
    getset key value可以先獲取key的值再設置key的value,此操作類似hashmap中的put,如下:
127.0.0.1:6379> getset string bcd
"abc"

    setnx key value,在此前說過,帶nx後綴的都是對存在key的情況進行處理,此操作若不存在key則設置加入key並設置值,若存在則返回0。

    mget、mset、msetnx都可以批量的操作key,value,意味着more吧,可能,代碼如下:

127.0.0.1:6379> mset string abc string2 bcd string3 tf
OK
127.0.0.1:6379> mget string string2 string3
1) "abc"
2) "bcd"
3) "tf"
    incr和decr可以對一個int類型的string進行++,--操作,若不是int類型的,則會返回錯誤,如下:
127.0.0.1:6379> incr int
(integer) 6
127.0.0.1:6379> decr int
(integer) 5

    incrby key count,decrby key count可以對int類型的數據進行加減法操作,其實也可以通過incrby一個負數實現decrby的效果。

    3.hash類型

    hash類型是一個key-value對應的數據類型,相當於又對應了一個hash表出來。

    hset key filed value和hget key filed分別可以設置一個key的filed的value和獲取一個key的filed的value,代碼如下:

127.0.0.1:6379> hset hash one one 
(integer) 1
127.0.0.1:6379> hget hash one
"one"

    hmset和hmget則對應這上訴的批操作。

    hincrby key filed count,可以對指定filed的value進行加法操作,並返回結果值:

127.0.0.1:6379> hincrby hash two 5
(integer) 7
    hexists key filed,可以對該hash底下是否含有指定filed進行判斷:
127.0.0.1:6379> hexists hash two
(integer) 1
    hdel key filed,可以刪除指定的filed(可刪除多個filed):
127.0.0.1:6379> hdel hash two one
(integer) 2

    hlen key,返回該hash的長度,hkeys key,返回該hash所有的key,hvals key,返回該hash所有的value,hgetall key,返回該hash所有的filed和value。

    4、list類型

    list是一個雙向鏈表數據結構的存儲,key對應的value可以理解爲一個鏈表。

    lpush可以在一個鏈表的頭部進行插入操作,代碼如下:

127.0.0.1:6379> lpush list a b c d
(integer) 4

    rpush則在鏈表的尾部進行插入操作,其實就理解成左右就好了。

    llen返回當前鏈表的長度。

    lrange key start end返回指定區間的所有集合,代碼如下:

127.0.0.1:6379> lrange list 0 3
1) "d"
2) "c"
3) "b"
4) "a"
     ltrim key start end用於截取指定區間的所有集合,有點類似java中的subString,代碼如下:
127.0.0.1:6379> ltrim list 0 1
OK
127.0.0.1:6379> llen list
(integer) 2
    lset key index value用於設置指定index的值,代碼如下:
127.0.0.1:6379> lset list 0 z
OK
127.0.0.1:6379> lrange list 0 2
1) "z"
2) "c"
    lrem key count value,從頭部(count爲正數)或者尾部(count爲負數),刪除指定數量匹配到爲value的值,並返回刪除數量,代碼如下:
127.0.0.1:6379> lrem list 1 z
(integer) 1
127.0.0.1:6379> lrange list 0 2
1) "c"
    lpop key和rpop分別從頭部或者尾部刪除並返回刪除元素,代碼如下:
127.0.0.1:6379> lpop list
"c"

     blpop key1...... keyN timeout 從左到右掃描,返回對第一個非空 list 進行 lpop 操作並返回,比如 blpop list1 list2 list3 如果 list 不存在 list2,list3 都是非空則對 list2 做lpop 並返回從 list2 中刪除的元素。如果所有的 list 都是空或不存在,則會阻塞timeout秒,timeout 爲 0 表示一直阻塞。當阻塞時,如果有 client 對 key1...keyN 中的任意 key進行 push 操作,則第一在這個 key 上被阻塞的 client 會立即返回。如果超時發生,則返回nil。

    blpop和brpop實際上就是對lpop和rpop的變形,輪訓多個list,pop成功則返回;保證在能操作多個list的lpop和rpop同時,又能在當list都爲空時進行阻塞,當timeout爲0時,表示一直阻塞。

    5、set類型

    set類型是一種無序的集合,無序具體表現如下:

127.0.0.1:6379> sadd set a b c d e f
(integer) 6
127.0.0.1:6379> smembers set
1) "a"
2) "d"
3) "b"
4) "f"
5) "c"
6) "e"

    此上也剛好解釋了sadd key value[]和smembers key的作用。另外的,set是一個非重複集合,如下:

127.0.0.1:6379> sadd set a
(integer) 0
127.0.0.1:6379> sadd set b
(integer) 0

    srem key value,可以刪除指定元素,代碼如下:

127.0.0.1:6379> srem set a b c
(integer) 3
127.0.0.1:6379> smembers set
1) "d"
2) "f"
3) "e"
    spop key count,隨機刪除並返回set中的元素:
127.0.0.1:6379> spop set 1
1) "d"
127.0.0.1:6379> spop set 2
1) "e"
2) "f"
    srandmember key,隨機返回但是不刪除set中的元素:
127.0.0.1:6379> srandmember set
"a"
127.0.0.1:6379> srandmember set
"a"
127.0.0.1:6379> srandmember set
"c"
    smove set1 set2 member,將set1中的member移動到set2中,代碼如下:
127.0.0.1:6379> sadd set1 2
(integer) 1
127.0.0.1:6379> smove set1 set 2
(integer) 1
127.0.0.1:6379> smembers set
1) "c"
2) "b"
3) "a"
4) "d"
5) "2"
    scard set,返回set的大小:代碼如下:
127.0.0.1:6379> scard set
(integer) 5
    sismember set member,判斷set中是否存在member,返回1或者0,代碼如下:
127.0.0.1:6379> sismember set 2
(integer) 1
    sinter set1 set2,返回兩個set的交集,代碼如下:
127.0.0.1:6379> sadd set1 a b
(integer) 2
127.0.0.1:6379> sinter set set1
1) "b"
2) "a"
    sinterstore keyset set1 set2,在上者的基礎上,將交集保存在keyset中,代碼如下:
127.0.0.1:6379> sinterstore keyset  set set1
(integer) 2
127.0.0.1:6379> smembers keyset
1) "b"
2) "a"

    sunion,sunionstore,sdiff,sdiffstore同上,只不過處理的是並集和差集。

    6、sorted set類型

    顧名思義,該類型在set基礎上增加了排序的功能。實現方式是讓每一個set集合中的元素又擁有了其對應的score,set根據其對應的score實現排序。

    zadd zset score value,添加元素並給元素一個score,若存在value則覆蓋:

127.0.0.1:6379> zadd zset 5 c
(integer) 1
    zrange zset start end,這個和list的lrange很像,都是返回指定區間中的元素,只不過此返回的是按照score從小到大排序的元素集合,zrevrange恰好相反,返回的是score從大到小排序的元素集合:
127.0.0.1:6379> zrange zset 0 3
1) "c"
2) "b"
3) "a"
    zrank zset member(返回的是member的score從小到大的排名,zrevrank恰好相反,返回的是score從大到小的排名),返回zset中元素的排名,如此時的c,應該返回的是0:
127.0.0.1:6379> zrank zset c
(integer) 0
    zrem zset member,刪除指定的成員,這個操作set以及list都有:
127.0.0.1:6379> zrem zset c
(integer) 1
    zrangebyscore zset min max,在zrange的基礎上,返回指定score區間內的元素集合:
127.0.0.1:6379> zrangebyscore zset 0 100
1) "b"
2) "a"

    zincrby zset num member,可以對member對應的score進行加num操作。

    zcount zset min max,返回指定score區間內元素的個數。

    zcard,和scard類似,返回元素的個數:

127.0.0.1:6379> zcard zset
(integer) 2
    zscore zset member,顧名思義,返回對應元素的對應的score:
127.0.0.1:6379> zscore zset a
"100"
    zremrangebyrank zset min max,zremrangebyscore zset min max,分別通過排名和score區間刪除集合。
發佈了73 篇原創文章 · 獲贊 13 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章