小丸子學Redis系列之——Data types(一)

wxjzqym發表於2015-12-15

Redis相比其他key-value型別的資料庫來說有其特有的優勢,其中兩點比較突出的就是支援資料持久化和支援各種複雜的資料結構。
本文就來簡單介紹下Redis 3.0支援的資料型別,以及各個資料型別支援的一些常見操作,所以演示都以redis-cli工具來演示。
目前Redis 3.0支援的資料型別有:
1.strings——Binary-safe strings
2.Lists——集合中的字串元素順序是由元素插入的順序決定的,這種型別我們通常稱之為連結串列
3.Sets——集合中的字串元素是唯一的且無序的
4.Sorted sets——類似於Sets型別但是集合中每個元素都會關聯一個浮點數(稱之為score),並且按照元素對應的score進行排序
5.Hashes——該型別被對映成一組欄位和欄位值組成,非常適合儲存物件
6.Bit arrays (or simply bitmaps)——該型別主要針對bit陣列的操作
7.HyperLogLogs——一種機率型別的資料結構,主要用於評估集合的基數


Reis Strings

1.set和get命令——設定和獲取一個string value
1.1 基本用法
[rdsusr01@vm1 ~]$ redis-cli -h 192.168.157.128 -p 16379
192.168.157.128:16379> set name sohoboy
OK
192.168.157.128:16379> get name
"sohoboy"
192.168.157.128:16379> set name kickboy
OK
192.168.157.128:16379> get name
"kickboy"
注:set命令會覆蓋已存在的key中的value,即使這個key用一個non-string value關聯。

1.2 set命令的引數
set key nx:key如果已存在,那麼設定key的動作將失敗
set key xx:key如果已存在,那麼設定key的動作將成功
192.168.157.128:16379> get name
"kickboy"
192.168.157.128:16379> set name oldboy nx
(nil)
192.168.157.128:16379> get name
"kickboy"
192.168.157.128:16379> set name oldboy xx
OK
192.168.157.128:16379> get name
"oldboy"

2.incr命令——將string value解析成一個整數,然後在此基礎上加1
類似的命令還有decr,increby,decrby,incr和decr功能相反,*by的增加/減少的數量可以指定
192.168.157.128:16379> set count 3
OK
192.168.157.128:16379> incr count
(integer) 4
192.168.157.128:16379> incr count
(integer) 5
192.168.157.128:16379> get count
"5"
192.168.157.128:16379> incrby count 25
(integer) 30
192.168.157.128:16379> get count
"30"
192.168.157.128:16379> decr count
(integer) 29
192.168.157.128:16379> get count
"29"
192.168.157.128:16379> decrby count 9
(integer) 20
192.168.157.128:16379> get count
"20"

3.mset和mget命令——一次性設定和獲取多個key的value
192.168.157.128:16379> mset db1 oracle db2 mysql db3 mongodb db4 redis
OK
192.168.157.128:16379> mget db1 db2 db3 db4
1) "oracle"
2) "mysql"
3) "mongodb"
4) "redis"

4.通用命令——exists,del,type,這些命令不侷限於Redis String型別的key
exists:指定的key如果存在則返回1,不存在返回0
del:刪除一個key以及key關聯的value
type:返回key中儲存的value的型別
192.168.157.128:16379> exists name
(integer) 1
192.168.157.128:16379> type name
string
192.168.157.128:16379> del name
(integer) 1
192.168.157.128:16379> exists name
(integer) 0

5.expire和ttl命令——設定key的過期時間以及檢查key的存活時間,單位是秒
192.168.157.128:16379> set name sohoboy
OK
192.168.157.128:16379> expire name 10
(integer) 1
192.168.157.128:16379> ttl name
(integer) 7
192.168.157.128:16379> ttl name
(integer) 3
192.168.157.128:16379> ttl name
(integer) -2
192.168.157.128:16379> get name
(nil)

6.pexpire和pttl命令——設定key的過期時間以及檢查key的存活時間,單位是毫秒
192.168.157.128:16379> set name oldboy
OK
192.168.157.128:16379> pexpire name 9855
(integer) 1
192.168.157.128:16379> pttl name
(integer) 7113
192.168.157.128:16379> pttl name
(integer) 5096
192.168.157.128:16379> pttl name
(integer) 3551
注:這裡在補充幾個相關的命令和引數
persist:去掉設定了過期時間的key,使其持久化
set key ex:設定key的超時時間,單位是秒
set key px:設定key的超時時間,單位是毫秒
192.168.157.128:16379> set name oldboy ex 11
OK
192.168.157.128:16379> ttl name
(integer) 8
192.168.157.128:16379> ttl name
(integer) 5
192.168.157.128:16379> set name oldboy px 8933
OK
192.168.157.128:16379> pttl name
(integer) 5175
192.168.157.128:16379> pttl name
(integer) 4018
192.168.157.128:16379> persist name
(integer) 1

7.getrange和setrange命令——返回key的子串和重寫key的子串
192.168.157.128:16379> set slogan "I am a handsome man"
OK
192.168.157.128:16379> get slogan
"I am a handsome man"
192.168.157.128:16379> getrange slogan 7 -5
"handsome"
192.168.157.128:16379> getrange slogan 30 -2
""
192.168.157.128:16379> getrange slogan 0 100
"I am a handsome man"
192.168.157.128:16379> setrange slogan -3 woman
(error) ERR offset is out of range
192.168.157.128:16379> get slogan
"I am a handsome man"
192.168.157.128:16379> setrange slogan 7 glamour
(integer) 19
192.168.157.128:16379> get slogan
"I am a glamoure man"
192.168.157.128:16379> setrange slogan 30  yes
(integer) 33
192.168.157.128:16379> get slogan
"I am a glamoure man\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00yes"

8.getbit和setbit命令——獲取和設定key中儲存的string value對應的offset的bit
192.168.157.128:16379> set word a
OK
192.168.157.128:16379> getbit word 1
(integer) 1
192.168.157.128:16379> getbit word 0
(integer) 0
192.168.157.128:16379> getbit word 3
(integer) 0
192.168.157.128:16379> getbit word 7
(integer) 1
192.168.157.128:16379> getbit word 8
(integer) 0
192.168.157.128:16379> bitcount word
(integer) 3
192.168.157.128:16379> setbit word 3 1
(integer) 0
192.168.157.128:16379> getbit word 3
(integer) 1
192.168.157.128:16379> setbit word 3 0
(integer) 1
注:字元"a"對應的二進位制位是"1100001"
至此關於Redis Strings型別的key的一些常用操作介紹到這,下面的文章會陸續介紹其他資料型別。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20801486/viewspace-1872810/,如需轉載,請註明出處,否則將追究法律責任。

相關文章