-------------------Redis基本數據類型-------------------
一、String 字符串
一、概念
一、String 是redis最基本的類型,value 不只能夠是 String,也能夠是數字;使用 Strings 類型,能夠徹底實現目前 Memcached 的功能,而且效率更高。還能夠享受 Redis 的定時持久化(能夠選擇 RDB 模式或者 AOF 模式);string類型是二進制安全的。意思是redis的string能夠包含任何數據,好比jpg圖片或者序列化的對象;string類型是Redis最基本的數據類型,一個鍵最大能存儲512MB。
二、命令
一、set:設置key對應的值爲string類型的value。
>set "name" "hello"
二、setnx(set if not exists):將key設置值爲value,若是key不存在,這種狀況下等同set命名;當key值存在,什麼也不作。
>setnx "name" "hello"
三、setex:設置key對應字符串value,而且設置key在給定的seconds時間以後超時過時。
>setex "color" 10 "red"
>get "color" --- red
十秒事後
>get "color" --- (nil)
四、setrange:覆蓋key對應的string的一部分,從指定的offset處開始,覆蓋value的長度。
>set "email" "redis@126.com" --- "ok"
>setrange "email" 6 "gmail.com" --- (integer) 14
>get "email" --- redis@gmail.com
五、mset:一次設置多個值,成功返回ok表示全部的值都設置了,失敗返回0表示沒有任何值被設置。
>mset "key1" "python" "key2" "c++" --- "ok"
>get "key1" --- "hello"
>get "key2" --- "world"
六、mget:一次獲取多個key的值,若是對應key不存在,則對應返回nil。
>mget "key1" "key2" "key3"
七、msetnx:對應給定的keys到他們相應的values上。只要有一個key已經存在,msetnx一個操做也不會執行。
>msetnx "key1" "hello" "key2" "world" --- (integer) 0
八、getset:設置key的值,並返回key的舊值。
>get "name" --- "hello"
>getset "name" "newName" --- "hello"
>get "name" --- "newName"
九、getrange key start end:獲取指定key的value值的字符串。是由start和end的位移決定的。
>get "name" --- "newName"
>getrange "name" 1 3 --- "ewN"
十、incr 對key的值加1 操做
>set "age" 18 --- "ok"
>incr "age" --- (integer) 19
>get "age" ---"19"
十一、incrby:用incr相似,加指定值,key不存在的時候會設置key,並認爲原來的value值爲0。
>incrby age 5 ---(integer) 24
>incrby age1111 5 --- (integer) 5
>get age1111 --- "5"
十二、decr:對key的值作的事漸減操做,decr一個不存在key,則設置key爲1.
>get age --- "24"
>decr age --- "23"
1三、decrby:同decr,減指定值,key不存在的時候會設置key,並認爲原來的value值爲1.
>get age --- "23"
>decrby age 10 --- "13"
1四、append:給指定key的字符串值追加value,返回新字符串值的長度。例如咱們向name的值追加一個"redis"字符串:
>set "name" "value" --- OK
>append "name" "_newValue" --- (integer) 14
>get "name" ---"value_newValue"
二、Hash 哈希
一、概念:
Redis hash 是一個string類型的field和value的映射表,hash特別適合用於存儲對象;Redis中每一個hash能夠存儲2的32次方-1個鍵值對(40多億)
二、命令:
一、hset:設置指定的hash field1。
>hset "myhash" "field1" "hello" --- (integer) 1
二、hsetnx:只在key指定的哈希集中不存在的字段時,設置字段的值。若是key指定的哈希集不存在,會建立一個新的哈希集並與 key 關聯。若是字段已存在,該操做無效果。
>hsetnx "myhash" "field1" "hello"。 --- (integer) 1
三、hmset:同時設置hash多個field。
>hmset "myhash" "field1" "hello" "field2" "world" ---OK
四、hget:獲取指定的hash值的field。
>hget "myhash" "field1" --- "hello"
五、hgetall:獲取全部的hash值的數據。
>hgetall "myhash" ---
1) "field1"
2) "hello"
3) "field2"
4) "world"
六、hmget:獲取hash值的多個field值。
>hmget "myhash" "field1" "field2" "field3" ---
1) "hello"
2) "world"
3) (nil)
七、hincrby:指定的hash field值,加上給定的值。
>hset "myhash" "field3" "0" --- (integer) 1
>hincrby "myhash" "field3" 1 --- (integer) 1
>hincrby "myhash" "field3" -8 --- (integer) -7
八、hexists:測試指定field是否存在。
>hexists "myhash" "field1" --- (integer) 1
>hexists "myhash" "field9" --- (integer) 0
九、hkeys:查看指定哈希中全部的key值。
>hkeys "myhash" ---
1) "field1"
2) "field2"
3) "field3"
十、hdel:從key指定的哈希集中移除指定的域。
>hdel "myhash" "field1" --- (integer) 1
十一、hlen:返回指定hash的field數量。
>hlen "myhash" --- (integer) 2
十二、hvals:返回指定hash中全部的value值。
>hvals "myhash" ---
1) "world"
2) "-7"
三、List 列表
一、概念:
列表類型能夠存儲一個有序的字符串列表,經常使用的操做時向列表兩端添加元素,或者得到列表的某一個片斷;列表類型內部是使用雙向鏈表(double linked list)實現的,因此向列表兩端添加元素的時間複雜度爲O(I),獲取越接近兩端的元素,速度就越快。
二、命令:
一、lpush:從左邊向list列表中插入數據。
>lpush "mylist" "100001"
>lpush "mylist" "100002"
>lpush "mylist" "100003" "100004"
二、rpush:從右邊向list列表中插入數據。
>rpush "mylist" "100005"
>rpush "mylist" "100006"
三、lpop:從列表左側將數據彈出。
>lpop "mylist" --- "100004"
四、rpop:從列表右側將數據彈出。
>rpop "mylist" --- "100006"
五、llen:獲取列表中元素的個數。
>llen "mylist":--- (integer) 4
六、lrange key start stpo:返回索引從start到stop之間的全部元素(包含兩端元素)。
>lrange "mylist" 0 -1 ---
1) "100003"
2) "100002"
3) "100001"
4) "100005"
七、lrem key count value:刪除列表中前count個值爲value的元素,返回刪除的個數
一、count>0時 lrem 命令從列表左邊開始刪除前count個值爲value的元素。
二、count<0時 lrem命令從列表右邊開始刪除前count個值爲value的元素。
三、count=0時 lrem命令會刪除全部值爲value的元素。
>lpush "mylist" 2 2 2 --- (integer) 7
>rpush "mylist" 2 2 --- (integer) 10
>lrem "mylist" 1 2 --- (integer) 1
>lrem "mylist" -2 2 --- (integer) 2
>lrem "mylist" 0 2 --- (integer) 2
八、lindex key index:根據索引下標獲取指定的列表元素。
>lindex "mylist" 1 --- "100002"
九、ltrim key start end:能夠刪除指定索引範圍以外的全部元素,其指定列表範圍的方法和lrange命令相同。
>ltrim "mylist" 0 -2 --- OK
十、linsert key before|after privot value:首先會在列表中從左到右查找值爲pivot的元素,而後根據第二個參數是before仍是after來決定將value插入到該元素的前面仍是後面,返回插入後列表元素的個數
>lrange "mylist" 0 -1 ---
1) "100003"
2) "100002"
3) "100001"
4) "100005"
>linsert "mylist" before "100003" "3"
>linsert "mylist" after "100003" "4"
1) "3"
2) "100003"
3) "4"
4) "100002"
十一、rpoplpush source destination:將元素從一個列表轉到另外一個列表。
>rpoplpush "mylist" "mylistnew" --- "100002"
>lrange "mylistnew" 0 -1
1) "100002"
四、Set 集合
一、概念:
在集合中的每一個元素都是不一樣的,且沒有順序。一個集合類型(set)鍵能夠存儲至多2的32次-1個字符串。集合類型的經常使用操做時向集合中加入或刪除元素、判斷某個元素是否存在等,因爲集合類型在Redis內部是使用值爲空的散列表(hash table)實現,因此這些操做的時間複雜度都是O(I)。最方便的是多個集合類型鍵之間還能夠進行並集、交集、差集運算。
二、集合與列表的區別:
列表具備有序性,集合具備惟一性。
二、命令:
一、sadd:用來向集合中添加一個或多個元素,若是鍵不存在則會自動建立。由於在一個集合中不能有相同的元素,因此若是要加入的元素已經存在於集合中聚會忽略這個元素。
>sadd letters a ---
>sadd letters a b c ---
二、smembers key:命令會返回集合中的全部元素
>smembers letters
三、sismember key member:判斷一個元素是否在集合中是一個時間複雜度爲O(I)的操做,不管集合中有多少個元素,sismember命令始終能夠極快的返回結果。當值存在是sismembers 命令返回1 ,當值不存在或鍵不存在是返回0
>sismember letters a
>sismember letters d
四、集合間運算
一、sdiff key:對多個集合執行差集運算。
>sadd setA 1 2 3
>sadd setB 2 3 4
>sdiff setA setB
>sdiff SetB setA
二、sinter key:對多個集合執行交集運算。
>sinter setA setB
三、sunion key:對多個集合執行並集運算。
>sunion setA setB
五、scard key:獲取集合中元素個數。
>smembers letters
>scard letters
六、spop letters:從集合中彈出一個元素。
>spop letters
>smembers letters
五、zset(Sorted set:有序集合)
一、概念:
在集合類型的基礎上有序集合類型爲集合中的每一個元素都關聯了一個分數,這使得咱們不只能夠完成插入,刪除和判斷元素是否存在等集合類型支持的操做,還可以得到分數最高(或最低)的前N個元素,得到指定分數範圍內的元素等與分數有關的操做。雖然集合中每一個元素不一樣,可是他們的分數能夠相同。
二、有序集合與列表比較:
一、類似處:
一、兩者都是有序的。
二、兩者均可以得到某一範圍的元素。
二、區別:
一、列表類型是經過鏈表實現,獲取靠近兩端的數據速度快,當元素增長後,訪問中間數據的速度會變慢。
二、有序集合類型是使用散列和跳躍表實現的,因此即便讀取位於中間部分的數據速度也很快(時間複雜度O(log(N)))。
三、列表中不能簡單的調整某個元素的位置,可是有序集合能夠
四、有序集合要比列表類型更消耗內存。
二、命令:
一、zadd:用來向有序集合中加入一個元素和該元素的分數,若是該元素已經存在則會用心的分數替換原來的分數。zadd命令的返回值是新加入到集合中的元素的個數。
>zadd scoreboard 89 Tom 67 Peter 100 David --- (integer) 3
注:分數不只是整數,還支持雙精度浮點數.
二、zscore key member:獲取元素的分數
>zscore scoreboard Tom --- "89"
三、zrange key start top:按照元素分數從小到大的順序返回索引從start到stop之間的全部元素
>zrange scoreboard 0 -1
1) "Peter"
2) "Tom"
3) "David"
四、zrevrange key start top:按照元素分數從大到小的順序放回索引從start到stop之間的全部元素
>zrevrange scoreboard 0 -1
1) "David"
2) "Tom"
3) "Peter"
五、zrangebyscore key min max:按照元素分數從小到大的順序返回分數在min和max之間的元素。
>zrangebyscore scoreboard 85 100
1) "Tom"
2) "David"
六、zincrby key increment member:增長一個元素的分數,返回值是更改後的分數。
>zincrby scoreboard 4 Tom --- "93"