String是最簡單的類型,一個key對應一個Value,string類型是二進位安全的。redis的string可以包含任何數據類型,比如jpg圖片或者序列化的對象。 Redis hash 是一個string類型的filed和value的映射表、它的添加、刪除操作都是0、1(平均操作)。Hash特... ...
該文使用centos6.5 64位 redis-3.2.8
[root@localhost bin]# netstat -tunpl |grep 6379 查看redis 是否啟動成功
一、String類型
String是最簡單的類型,一個key對應一個Value,string類型是二進位安全的。redis的string可以包含任何數據類型,比如jpg圖片或者序列化的對象。
1、set方法:設置key對應的值為string類型的value,如果該key已經存在,則覆蓋key對應的value值。所以在redis中key只能有一個。 127.0.0.1:6379> set name lijie 2、get:根據key獲取value值 127.0.0.1:6379> get name 3、Setnx:設置key對應的值為tring類型的value,如果key已經存在,返回0 表示無法再對該key設置新值,返回1 表示設置新值成功,nx是not exit的意思。 127.0.0.1:6379> setnx name zs (integer) 0 127.0.0.1:6379> setnx age 20 (integer) 1 4、setex:設置key對應的值為string類型的value,並指定該key-value對應的有效期。 127.0.0.1:6379> setex color 10 red OK 立即查詢 127.0.0.1:6379> get color "red" 10秒後查詢 127.0.0.1:6379> get color (nil) 5、Setrange:設置指定key的value值的子字元竄。 127.0.0.1:6379> set email [email protected] OK 127.0.0.1:6379> get email "[email protected]" 127.0.0.1:6379> setrange email 6 163.com (integer) 14 127.0.0.1:6379> get email "[email protected]" 6、Mset:一次設置多個key-value,返回OK表示全部設置成功,返回0表示全部失敗 127.0.0.1:6379> mset name1 zs name2 ls OK 127.0.0.1:6379> get name1 "zs" 127.0.0.1:6379> get name2 "ls" 7、msetnx:一次設置多個key-value,返回1表示全部設置成功,返回0表示全部失敗。該方式不會覆蓋已經存在的key 127.0.0.1:6379> msetnx name3 kk name4 mm name2 LL (integer) 0 127.0.0.1:6379> get name3 (nil) 127.0.0.1:6379> get name4 (nil) 8、getset:設置key值,並返回key的舊值 127.0.0.1:6379> getset name4 UU (nil) 127.0.0.1:6379> get name4 "UU" 127.0.0.1:6379> getset name4 RR "UU" 9、getrange:獲取key對應value的子字元串 127.0.0.1:6379> get email "[email protected]" 127.0.0.1:6379> getrange email 0 4 "jalja" 10、mget:一次獲取多個key對應的value值,不存在返回nil 127.0.0.1:6379> mget name1 name2 name3 name4 name5 1) "zs" 2) "ls" 3) (nil) 4) "RR" 5) (nil) 11、incr:對key對應的value做加加操作,並返回新值 127.0.0.1:6379> get age "20" 127.0.0.1:6379> incr age (integer) 21 12、incrby:與incr類似,加指定值,key不存在的時候會設置key,並認為該key原來的value=0 127.0.0.1:6379> get age "21" 127.0.0.1:6379> incrby age 9 (integer) 30 127.0.0.1:6379> incrby age -5 (integer) 25 127.0.0.1:6379> incrby height 10 (integer) 10 13、decr:對key對應的value做遞減操作 127.0.0.1:6379> get height "10" 127.0.0.1:6379> decr height (integer) 9 127.0.0.1:6379> decr height (integer) 8 14、decrby:對key對應的value減去指定的值 127.0.0.1:6379> get height "8" 127.0.0.1:6379> decrby height 3 (integer) 5 127.0.0.1:6379> decrby height -3 (integer) 8 15、append:對key對應的vlaue字元串追加,返回新字元串的長度 127.0.0.1:6379> get name1 "zs" 127.0.0.1:6379> append name1 ML (integer) 4 127.0.0.1:6379> get name1 "zsML" 16、strlen:獲取key對應value的長度 127.0.0.1:6379> get name1 "zsML" 127.0.0.1:6379> strlen name1 (integer) 4
二、Hash 類型
Redis hash 是一個string類型的filed和value的映射表、它的添加、刪除操作都是0、1(平均操作)。Hash特別適合存儲對象。相較於對象的每個欄位存成單個string類型。將一個對象存儲在hash類型中會占用更少的記憶體,並且可以更方便存取整個對象。
1、hset:設置hash filed 為指定值,如果key不存在,則先創建。 127.0.0.1:6379> hset user:001 name zs (integer) 1 127.0.0.1:6379> hget user:001 name "zs" 設置一個user:001 的用戶的name為zs(可以將user:001看做一個表) 2、 hsetnx:設置hash filed 為指定值,如果key不存在,則先創建。如果存在則返回0表示設置失敗。 127.0.0.1:6379> hsetnx user:001 name ML (integer) 0 127.0.0.1:6379> hsetnx user:001 age 1 (integer) 1 3、hmset:同時設置hash的多個file 127.0.0.1:6379> hmset user:002 name MM age 20 OK 127.0.0.1:6379> hget user:002 name "MM" 127.0.0.1:6379> hget user:002 age "20" 4、hmget:獲取全部指定的hash filed 127.0.0.1:6379> hmget user:002 name age 1) "MM" 2) "20" 5、hincrby:對hash filed加上指定的值 127.0.0.1:6379> hget user:002 age "20" 127.0.0.1:6379> hincrby user:002 age 5 (integer) 25 127.0.0.1:6379> hincrby user:002 age -5 (integer) 20 6、hexists:測試指定的filed是否存在,返回1表示存在,返回0表示不存在 127.0.0.1:6379> hexists user:002 name (integer) 1 127.0.0.1:6379> hexists user:002 age (integer) 1 127.0.0.1:6379> hexists user:002 height (integer) 0 7、hlen:返回指定hash的field的數量 127.0.0.1:6379> hlen user:002 (integer) 2 8、hdel 刪除指定hash 的filed欄位,返回1表示刪除成功0:表示刪除失敗 127.0.0.1:6379> hget user:002 age "20" 127.0.0.1:6379> hdel user:002 age (integer) 1 127.0.0.1:6379> hdel user:002 age (integer) 0 127.0.0.1:6379> hget user:002 age (nil) 9、hkeys:返回hash 的所有filed 127.0.0.1:6379> hkeys user:001 1) "name" 2) "age" 127.0.0.1:6379> hkeys user:002 1) "name" 10、hvals:返回hash的所有value 127.0.0.1:6379> hvals user:001 1) "zs" 2) "1" 127.0.0.1:6379> hvals user:002 1) "MM"
三、List類型
List是一個鏈表結構,主要功能是push、pop,獲取一個範圍的所有值等等,操作中key理解為鏈表的名字。Redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。我們可以通過push、pop操作鏈表的頭部或者鏈表尾部添加元素,這樣list既可以作為棧,又可以作為隊列。
1、Lpush:在key對應list的頭部添加字元串元素,返回list中元素的個數 127.0.0.1:6379> lpush list1 "hello" (integer) 1 127.0.0.1:6379> lpush list1 "word" (integer) 2 2、lrange:獲取list中的元素, 127.0.0.1:6379> lrange list1 0 -1(0:第一個,-1:最後一個) 1) "word" 2) "hello" 3、rpush:在key對應的list尾部添加元素 127.0.0.1:6379> rpush list2 10 (integer) 1 127.0.0.1:6379> rpush list2 11 (integer) 2 127.0.0.1:6379> lrange list2 0 -1 1) "10" 2) "11" 4、Linsert:在key對應list的特定位置前或後添加字元串 127.0.0.1:6379> lrange list2 0 -1 1) "10" 2) "11" 127.0.0.1:6379> linsert list2 before 11 10.5 (integer) 3 127.0.0.1:6379> lrange list2 0 -1 1) "10" 2) "10.5" 3) "11" 5、lset:更改list中指定下標的元素,返回ok表示設置成功 127.0.0.1:6379> lrange list2 0 -1 1) "10" 2) "10.5" 3) "11" 127.0.0.1:6379> lset list2 1 10.00 OK 127.0.0.1:6379> lrange list2 0 -1 1) "10" 2) "10.00" 3) "11" 6、lrem:從key對應list中刪除n個和value相同的元素(n<0 從尾部刪除,n=0 全部刪除) 127.0.0.1:6379> lrange list 0 -1 1) "two" 2) "one" 3) "one" 127.0.0.1:6379> lrem list 1 one (integer) 1 127.0.0.1:6379> lrange list 0 -1 1) "two" 2) "one" 7、ltrim:保留list中指定範圍的數據 127.0.0.1:6379> lrange list2 0 -1 1) "10" 2) "10.00" 3) "11" 4) "12" 127.0.0.1:6379> ltrim list2 1 2 OK 127.0.0.1:6379> lrange list2 0 -1 1) "10.00" 2) "11" 8、lpop:從list的頭部刪除元素,並返回該元素 127.0.0.1:6379> lrange list 0 -1 1) "two" 2) "one" 127.0.0.1:6379> lpop list "two" 127.0.0.1:6379> lrange list 0 -1 1) "one" 9、rpop:從list尾部刪除元素,並返回該元素 10、rpoplpush:從第一個list的尾部刪除元素,並添加到第二個list的頭部 127.0.0.1:6379> lrange list 0 -1 1) "one" 127.0.0.1:6379> lrange list1 0 -1 1) "word" 2) "hello" 127.0.0.1:6379> rpoplpush list1 list "hello" 127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "one" 127.0.0.1:6379> lrange list1 0 -1 1) "word" 11、lindex 返回名稱為key的list中index位置的元素 127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "one" 127.0.0.1:6379> lindex list 1 "one" 12、llen:返回指定key對應list的長度 127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "one" 127.0.0.1:6379> llen list (integer) 2
四、Sets類型
Set是一個string類型的無序集合,不允許重覆。Set是通過hash table實現的。添加、刪除、查找的複雜度都是0(1)。對集合我們可以取並集、交集、差集。通過這些操作我們可以實現sns中的好友推薦和blog的tag功能。
1、 sadd:向key對應的set集合中添加元素,返回1表示添加成功,返回0 表示失敗 127.0.0.1:6379> sadd myset1 one (integer) 1 127.0.0.1:6379> sadd myset1 two (integer) 1 2、Smembers:查看set集合中的元素 127.0.0.1:6379> smembers myset1 1) "two" 2) "one" 3、srem:刪除key對應set集合中的元素,返回1表示刪除成功 0表示失敗 127.0.0.1:6379> srem myset1 two (integer) 1 4、spop:隨機刪除set中的一個元素並返回該元素 127.0.0.1:6379> smembers myset1 1) "three" 2) "one" 3) "four" 127.0.0.1:6379> spop myset1 "four" 127.0.0.1:6379> smembers myset1 1) "three" 2) "one" 5、sdiff:返回給定set集合的差集 (以在前的set集合為標準) 127.0.0.1:6379> smembers myset1 1) "three" 2) "one" 127.0.0.1:6379> smembers myset2 1) "two" 2) "one" 127.0.0.1:6379> sdiff myset1 myset2 1) "three" 127.0.0.1:6379> sdiff myset2 myset1 1) "two" 6、sdiffstore:返回所有給定set集合的差集,並將差集添加到另外一個集合中 127.0.0.1:6379> smembers myset1 1) "three" 2) "one" 127.0.0.1:6379> smembers myset2 1) "two" 2) "one" 127.0.0.1:6379> sdiffstore myset3 myset1 myset2 (integer) 1 127.0.0.1:6379> smembers myset3 1) "three" 7、sinter:返回所有給定集合的交集 127.0.0.1:6379> smembers myset1 1) "three" 2) "one" 127.0.0.1:6379> smembers myset2 1) "two" 2) "one" 127.0.0.1:6379> sinter myset1 myset2 1) "one" 8、sinterstore:返回所有給定集合key的交集,並將結果存為另一個key 127.0.0.1:6379> smembers myset1 1) "three" 2) "one" 127.0.0.1:6379> smembers myset2 1) "two" 2) "one" 127.0.0.1:6379> sinterstore myset4 myset1 myset2 (integer) 1 9、返回所有給定集合的並集 127.0.0.1:6379> smembers myset1 1) "three" 2) "one" 127.0.0.1:6379> smembers myset2 1) "two" 2) "one" 127.0.0.1:6379> sunion myset1 myset2 1) "three" 2) "two" 3) "one" 10、sunionstore 返回所有給定集合的並集,並將結果存入另一個集合 127.0.0.1:6379> smembers myset1 1) "three" 2) "one" 127.0.0.1:6379> smembers myset2 1) "two" 2) "one" 127.0.0.1:6379> sunionstore myset5 myset1 myset2 (integer) 3 11、smove:從第一個集合中移除元素並將該元素添加到另一個集合中。 127.0.0.1:6379> smembers myset1 1) "three" 2) "one" 127.0.0.1:6379> smembers myset5 1) "three" 2) "two" 3) "one" 127.0.0.1:6379> smove myset5 myset1 two (integer) 1 127.0.0.1:6379> smembers myset5 1) "three" 2) "one" 127.0.0.1:6379> smembers myset1 1) "three" 2) "two" 3) "one" 12、Scard:返回set集合中元素的個數 127.0.0.1:6379> smembers myset1 1) "three" 2) "two" 3) "one" 127.0.0.1:6379> scard myset1 (integer) 3 13、sismember:測試member元素是否是名稱為key的set集合 返回1:表示是 0:不是 127.0.0.1:6379> smembers myset1 1) "three" 2) "two" 3) "one" 127.0.0.1:6379> sismember myset1 tree (integer) 0 127.0.0.1:6379> sismember myset1 three (integer) 1 14、srandmember:隨機返回set集合中的一個元素,但不刪除該元素 127.0.0.1:6379> smembers myset1 1) "three" 2) "two" 3) "one" 127.0.0.1:6379> srandmember myset1 "one"
五、Sorted set (zset)類型
Sorted set是set的一個升級版,他在set的基礎上增加了一個順序屬性,這一屬性在添加元素的時候可以指定,每次指定後,zset會自動重新按新的值挑戰順序。可以理解為有兩列的mysql表,一列存value,一列存順序。操作key理解為zset的名字
1、zadd:向有序集合zset中添加元素並指定順序,如果該元素已存在就更新元素順序。 127.0.0.1:6379> zadd myzset1 1 one (integer) 1 127.0.0.1:6379> zadd myzset1 2 two (integer) 1 2、zrange:從zset集合中取元素 [withscores] 輸出元素順序號 127.0.0.1:6379> zadd myzset1 1 one (integer) 1 127.0.0.1:6379> zadd myzset1 2 two (integer) 1 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 3、zrem:刪除zset集合中指定的元素 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 127.0.0.1:6379> zrem myzset1 two (integer) 1 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "1" 4、zincrby:若zset中已經存在元素member、則該元素的score增加incrment否則向該集合中添加該元素,其score的值為increment 例:改變myset1中one元素的順序值 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "1" 127.0.0.1:6379> zincrby myzset1 2 one "3" 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 5、zrank:返回zset中元素member的排名(score從小到大排序)即下標 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 3) "four" 4) "4" 5) "five" 6) "5" 127.0.0.1:6379> zrank myzset1 four (integer) 1 6、zrevrank:返回zset集合中member元素的排名(按照score倒敘)即下標 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 3) "four" 4) "4" 5) "five" 6) "5" 127.0.0.1:6379> zrevrank myzset1 four (integer) 1 127.0.0.1:6379> zrevrank myzset1 five (integer) 0 7、zrevrange:從zset集合中倒敘(score倒敘)獲取元素 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 3) "four" 4) "4" 5) "five" 6) "5" 127.0.0.1:6379> zrevrange myzset1 0 -1 withscores 1) "five" 2) "5" 3) "four" 4) "4" 5) "one" 6) "3" 8、zrangebyscore:從zset集合中根據score順序獲取元素 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 3) "four" 4) "4" 5) "five" 6) "5" 127.0.0.1:6379> zrangebyscore myzset1 4 5 withscores 1) "four" 2) "4" 3) "five" 4) "5" 9、zcount:返回集合中score在給定區間的數量 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 3) "four" 4) "4" 5) "five" 6) "5" 127.0.0.1:6379> zcount myzset1 3 4 (integer) 2 10:zcard:返回zset集合中所有元素個數 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 3) "four" 4) "4" 5) "five" 6) "5" 127.0.0.1:6379> zcard myzset1 (integer) 3 11、zremrangebyrank:刪除集合中排名(下標)在給定區間的元素 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 3) "four" 4) "4" 5) "five" 6) "5" 127.0.0.1:6379> zremrangebyrank myzset1 1 2 (integer) 2 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 12、zremrangebyscore::刪除集合中順序(score值)在給定區間的元素 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "one" 2) "3" 3) "four" 4) "4" 5) "five" 6) "5" 127.0.0.1:6379> zremrangebyscore myzset1 3 4 (integer) 2 127.0.0.1:6379> zrange myzset1 0 -1 withscores 1) "five" 2) "5"