redis學習筆記(二)之數據類型

redis 一共分爲五中基本數據類型:String、Hash、List、Set、Zset,本文只對這五中類型進行基本介紹,羅列一些經常使用的命令。redis

1、字符串類型(String)

字符串類型是redis中最基本的類型,也是使用最頻繁的類型,它可以存儲任何字符串,包括二進制數據,一個字符串類型鍵容許存儲數據的最大容量是512MB,在3.0版本之後會放寬這方面的限制,可是redis做爲一個內存級別的數據庫,512已是一個比較富裕的上限了。

經常使用命令

1)set hello world  數據庫

設置一個鍵爲 hello,值爲world的存儲,設置成功返回OK,屢次設置則會覆蓋app

2)get hellospa

讀取鍵爲hello的值,若獲取不到則返回(nil)code

3)del hello對象

刪除hello這個鍵值對排序

4)setnx hello world索引

這裏的nx=not exist,若是hello鍵不存在,建立並複製爲world,返回1;若是存在,則不會覆蓋,返回0three

5)s1etex hello 10 world隊列

這裏的ex=expired,設置hello的值爲world,而且有效期爲10秒,若是hello鍵存在,則覆蓋原有的,不存在則建立。

10秒內鍵值對存在有效,10秒後則自動消失,此時若是get hello,返回結果是nil。

6)setrange hello 1 O

此命令表示:setrange key offset value,即將key爲hello的字符串的第1位換成O,注意從0開始計數

如:set hello world;執行如上命令後,get hello -> wOrld。

7)批量設置命令

mset key1 1key2 2key3 3;批量設置值;

對應的mget key1 key2 key3,批量獲取值,也有msetnx和mget方法;

8)getset k1 v1

表示先取值,後複製,即返回結果爲原來的k1值,而後將k1的值換爲v1,過程以下

127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> getset k1 111
(nil)
127.0.0.1:6379> get k1
"111"

9)其餘命令

incr和decr方法:對某一個值進行遞增和遞減

(注:包括incr在內的全部redis命令都是原子操做,不管多少個客戶端同時鏈接,都不會出現累加丟失的狀況)

incrby和decrby方法:對某個值進行指定長度的遞增和遞減

append [key]方法:字符串追加方法

strlen [key]方法:獲取字符串的長度

2、散列(Hash)

Hash類型是String類型的field和value的映射表,存儲了字段和字段值的映射,相似於map結構,但字段值只能是字符串。它的特別適合存儲對象,相比較而言,將一個對象類型存儲在Hash類型裏要比存儲在String類型裏佔用更少的內存空間,並方便存取整個對象。它的命令和String命令基礎類似,只是前面多加 一個h

經常使用命令

1)hset user age 12

 hset是hash集合,user是集合名字 age是字段名 12爲其值

hset user name Tom

同一集合能夠有多個字段,

2)hget user age -> 12 

獲取集合中某個字段的值

3)hmset能夠進行批量存儲多個鍵值對:hmset user sex man addr beijing,也可以使用hmget進行批量獲取多個鍵值對。

4)其他命令

一樣也有hsetnx,和setnx大同小異。

hincrby和 hdecrby 集合遞增和遞減

hexists 是否存在key 若是存在返回 不存在返回0

hlen 返回hash集合裏的全部的鍵數值

hdel 刪除指定hash的field

hkeys 返回hash裏全部的字段

hvals 返回hash的全部value

hgetall 返回hash裏全部的key和value

3、列表類型(List)

List類型是一個鏈表結構的集合,經常使用的操做是向列表兩端添加元素,或者得到列表的某一片斷,列表內部是使用雙向鏈表實現,因此向列表兩端添加元素的時間複雜度爲O(1),獲取越接近兩端的元素速度就越快。藉助這個類型,redis還能夠充當隊列使用。

注:list中元素可重複

經常使用命令

1)lpush

從頭部加入元素(棧) 先進後出

lpush list1 "hello"

lpush  list1 "world"

2)rpush

從尾部加入元素(隊列) 先進先出

rpush list2 "1"

rpush list2 "2"

3)linsert

插入元素

linsert list3 before [集合的元素] [插入的元素]

4)取值

lrange list1 0 -1 (表示從頭取到末尾)

127.0.0.1:6379> lpush list3 "one" "two"
(integer) 2
127.0.0.1:6379> lrange list3 0 -1
1) "two"
2) "one"
127.0.0.1:6379> linsert list3 before "one" "three"
(integer) 3
127.0.0.1:6379> lrange list3 0 -1
1) "two"
2) "three"
3) "one"

 

5)替換元素——lset

lset list1 0 "A" , 把第0個元素替換爲A

6)刪除元素

lrem list3 1 「two」 ,刪除一個two元素

ltrim方法: 保留指定key的值範圍內的數據

lpop方法:從list的頭部刪除元素,並返回刪除元素

rpop方法:從list的尾部刪除元素,並返回刪除元素

7)其餘命令

rpoplpush方法: 第一步從尾部刪除元素,而後第二步並從頭部加入元素

lindex方法: 返回名稱爲key的list中 index位置的元素

llen方法:返回元素的個數

4、集合類型(Set)

set中的每一個元素都不一樣且無序,集合和列表類型有類似之處,可是也很容易區分:

存儲內容

集合類型(Set)

列表類型(List)

有序性

惟一性

 

集合類型經常使用操做是像集合中加入或刪除元素、判斷元素是否存在等,內部使用值爲空的散列表實現,因此這些操做的複雜度都爲O(1),多個集合類型的鍵之間還能夠進行並集、交集、差集的運算。

經常使用命令

1)添加、查看元素

sadd ,smembers

127.0.0.1:6379> sadd set1 aaa
(integer) 1
127.0.0.1:6379> smembers set1
1) "aaa"

2)刪除元素

srem 刪除方法:srem set1 aaa  //刪除aaa元素

spop隨機刪除方法:spop set1 //隨機刪除某個元素,返回刪除的key

3)集合之間的比較操做

sdiff方法: 返回倆個集合的不一樣元素(哪一個集合在前面就以哪一個集合爲標準)

sdiffstore方法: 將返回的不一樣元素存儲到另一個集合裏

127.0.0.1:6379> smembers set1
1) "bbb"
2) "aaa"
3) "ddd"
4) "ccc"
5) "eee"
127.0.0.1:6379> smembers set2
1) "eee"
2) "aaa"
3) "ff"
4) "ccc"
127.0.0.1:6379> sdiffstore set3 set1 set2
(integer) 2
127.0.0.1:6379> smembers set3
1) "bbb"
2) "ddd"

sinter方法:返回集合的交集

sinterstroe方法: 返回交集結果,存入set3中

sunion方法: 取並集

sunionstore方法:取得並集,存入set3中

smove方法: 從一個set集合移動到另外一個set集合裏  

smove set1 set2 aaa  //將set1中的元素aaa移動到set2中(至關於剪切複製)

scard方法: 查看集合裏元素個數

sismember方法: 判斷某元素是否爲集合中的元素  返回1表明是集合中的元素,0表明不是

srandmember方法: 隨機返回一個元素

5、有序集合類型(Zset)

它與集合類型區別在於「有序」二字,有序集合在某些方面與列表類型也比較相似:

1)兩者都是有序的;

2)兩者均可以得到某一範圍內的元素;

固然也有明顯的區別:

1)List經過鏈表實現,獲取兩端數據極快,而取中間的數據較慢;

2)Zset是使用散列表和跳躍表實現,即便位於中間的數據讀取也很快,複雜度爲: O(log(N));

3)List不能簡單的調整元素的位置,可是Zset能夠;

4)Zset比List更耗費內存。

經常使用命令:

1)添加方法——zadd

zadd zset1 1 one

 向有序集合中添加一個元素,該元素若是存在,則更新順序,在重複插入的時候 會根據順序屬性更新,其中的「1」爲插入時指定的下標。

2)刪除方法

zrem 刪除名稱爲key的zset中的元素member

zremrangebyrank 刪除 1到1(只刪除索引1)

zremrangebyscore 刪除指定序號

3)zincrby 以指定值去自動遞增或者減小,用法和以前的incrby相似

4)zrangebyscore  找到指定區間範圍的數據進行返回

5)排序索引

zrank 返回排序索引 從小到大排序(升序排序以後再找索引) 注意 一個是順序號 一個是索引 zrank返回的是索引

zrevrank 返回排序索引 從大到小排序(降序排序以後再找索引)

6)zcard 返回集合裏全部元素的個數

7)zcount  返回集合中score在給定區間中的數量

8)zremrangebyrank zset [from] [to](刪除索引)

9)zremrangebyscore zset [from] [to] (刪除指定序號)

相關文章
相關標籤/搜索