Redis教程之基础-五种数据基本操作
生活随笔
收集整理的這篇文章主要介紹了
Redis教程之基础-五种数据基本操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
若要修改測試環境的redis數據,首先獲得類型(五中類型字符串、散列、列表、集合、有序集合),
一、通用類型即對key的操作
1 獲得鍵值的數據類型。返回none表示輸入的鍵不存在,string表示字符串,hash 散列類型,list列表,set集合類型,zset(有序集合類型)
type 鍵名
比如:type name
2 獲得所有的keys
keys *
比如:
redis> MSET one 1 two 2 three 3 four 4 # 一次設置 4 個 key
OKredis> KEYS *o*
1) "four"
2) "two"
3) "one"redis> KEYS t??
1) "two"redis> KEYS t[w]*
1) "two"
3 exists 鍵名 判斷一個鍵是否存在,存在則返回1,不存在返回0
redis> SET db "redis"
OKredis> EXISTS db
(integer) 1redis> DEL db
(integer) 1redis> EXISTS db
(integer) 0
4 刪除鍵,成功返回1,失敗返回0。
# 刪除單個 keyredis> SET name huangz
OKredis> DEL name
(integer) 1# 刪除一個不存在的 keyredis> EXISTS phone
(integer) 0
5命令類型:設置/獲得(1個或者多個)、刪除、自增、獲得某個范圍的值。
增刪查找命令對比
二、字符串、整數
1 設置和獲取字符串的值 set/get。 說明:set 設置的key若存在,則會覆蓋。get獲取的key不存在則會返回nil。 redis> GET db (nil)redis> SET db redis OK 2 遞增數字,incr(自增1) 和incrby(增加指定整數) 當數字不存在時,會直接回默認鍵值0,所以第一次遞增后值是1 redis> SET page_view 20 OKredis> INCR page_view (integer) 21 說明:若給一個字符串自增,則會返回 incrby # key 存在且是數字值redis> SET rank 50 OKredis> INCRBY rank 20 (integer) 70redis> GET rank "70" 6 自減 decr(自減1)和decrby(自減指定整數) 7 尾部追加 append # 對不存在的 key 執行 APPENDredis> EXISTS myphone # 確保 myphone 不存在 (integer) 0redis> APPEND myphone "nokia" # 對不存在的 key 進行 APPEND ,等同于 SET myphone "nokia" (integer) 5 # 字符長度# 對已存在的字符串進行 APPENDredis> APPEND myphone " - 1110" # 長度從 5 個字符增加到 12 個字符 (integer) 12redis> GET myphone "nokia - 1110" 8 獲取字符串長度 # 獲取字符串的長度redis> SET mykey "Hello world" OKredis> STRLEN mykey (integer) 11# 不存在的 key 長度為 0redis> STRLEN nonexisting (integer) 0 9 設置鍵值:使用 【字符串:字符串】格式 設置/獲得多個鍵值
三 散列類型命令 命令格式: 一個: hset key field vaue hget key field 多個 hmset key field1 value1 field2 value2 hmget key field1 field2 所有 hgetAll key
1、HSet不分插入和更新,執行插入時返回1,執行更新時返回0
2 設置/獲得多個字段值hmset、hmget、hgetall redis> HMSET pet dog "doudou" cat "nounou" # 一次設置多個域 OKredis> HMGET pet dog cat fake_pet # 返回值的順序和傳入參數的順序一樣 1) "doudou" 2) "nounou" 3) (nil) redis> HSET people jack "Jack Sparrow" (integer) 1redis> HSET people gump "Forrest Gump" (integer) 1redis> HGETALL people 1) "jack" # 域 2) "Jack Sparrow" # 值 3) "gump" 4) "Forrest Gump"
3 判斷是否存在;hexists 4 HSETNX,當不存在時賦值,若已存在則不執行任何操作。 5 增加數字:hincrby 6 刪除:hdel 7只獲取字段名/字段值:hkeys/hvals
四 列表類型命令 1 lpush/rpush,像列表左/右邊增加元素。,返回列表長度。 # 加入單個元素redis> LPUSH languages python (integer) 1# 加入重復元素redis> LPUSH languages python (integer) 2redis> LRANGE languages 0 -1 # 列表允許重復元素 1) "python" 2) "python"# 加入多個元素redis> LPUSH mylist a b c (integer) 3redis> LRANGE mylist 0 -1 1) "c" 2) "b" 3) "a" 2 lpop/rpop,從兩端彈出元素。返回彈出的元素,若無,則返回nil。 redis> LLEN course (integer) 0redis> RPUSH course algorithm001 (integer) 1redis> RPUSH course c++101 (integer) 2redis> LPOP course # 移除頭元素 "algorithm001
3 獲取隊列中元素個數:llen 4 lrange 獲得列表子集 redis> RPUSH fp-language lisp (integer) 1redis> LRANGE fp-language 0 0 1) "lisp"redis> RPUSH fp-language scheme (integer) 2redis> LRANGE fp-language 0 1 1) "lisp" 2) "scheme" 5 刪除列表中前count為value的值。lrem key count value # 先創建一個表,內容排列是 # morning hello morning helllo morningredis> LPUSH greet "morning" (integer) 1 redis> LPUSH greet "hello" (integer) 2 redis> LPUSH greet "morning" (integer) 3 redis> LPUSH greet "hello" (integer) 4 redis> LPUSH greet "morning" (integer) 5redis> LRANGE greet 0 4 # 查看所有元素 1) "morning" 2) "hello" 3) "morning" 4) "hello" 5) "morning"redis> LREM greet 2 morning # 移除從表頭到表尾,最先發現的兩個 morning (integer) 2 # 兩個元素被移除redis> LLEN greet # 還剩 3 個元素 (integer) 3redis> LRANGE greet 0 2 1) "hello" 2) "hello" 3) "morning"redis> LREM greet -1 morning # 移除從表尾到表頭,第一個 morning (integer) 1redis> LLEN greet # 剩下兩個元素 (integer) 2redis> LRANGE greet 0 1 1) "hello" 2) "hello"redis> LREM greet 0 hello # 移除表中所有 hello (integer) 2 # 兩個 hello 被移除redis> LLEN greet (integer) 0 6 獲得/指定索引的元素值 lindex key index lset key index value
7 保留指定列表片段:ltrim redis> LRANGE alpha 0 -1 # alpha 是一個包含 5 個字符串的列表 1) "h" 2) "e" 3) "l" 4) "l" 5) "o"redis> LTRIM alpha 1 -1 # 刪除 alpha 列表索引為 0 的元素 OKredis> LRANGE alpha 0 -1 # "h" 被刪除了 1) "e" 2) "l" 3) "l" 4) "o"
五 集合類型 集合類型是無順序、唯一的、列表類型是有序不唯一。有序指的是index有序。 1 增加/刪除。SADD/SREM. # 添加單個元素redis> SADD bbs "discuz.net" (integer) 1# 添加重復元素redis> SADD bbs "discuz.net" (integer) 0# 添加多個元素redis> SADD bbs "tianya.cn" "groups.google.com" (integer) 2redis> SMEMBERS bbs 1) "discuz.net" 2) "groups.google.com" 3) "tianya.cn" 2 獲得集合所有元素.SMEMBERS key。 # key 不存在或集合為空redis> EXISTS not_exists_key (integer) 0redis> SMEMBERS not_exists_key (empty list or set)# 非空集合redis> SADD language Ruby Python Clojure (integer) 3redis> SMEMBERS language 1) "Python" 2) "Ruby" 3) "Clojure" 獲得元素個數SCARD redis> SADD tool pc printer phone (integer) 3redis> SCARD tool # 非空集合 (integer) 3redis> DEL tool (integer) 1redis> SCARD tool # 空集合 (integer) 0
3 判斷元素是否在集合中。SISMEMBER key member 4 集合間運算;SDIFF、SINTER(交集)、SUNION(并集) 5 從集合中彈出元素SPOP
六 有序集合類型(key- value類型) 1 與列表對比: (1 )列表是通過鏈表實現的獲取靠近兩端的數據速度極快,當元素增多之后,訪問中間元素會變慢。更適合"新鮮事"或者日志,這樣很少訪問中間元素的 (2)有序集合通過散列表和跳躍表實現的,所以即使讀取位于中間的元素也很快(logN) (3)列表中不能簡單調整元素的位置,有序集合可以(通過更改這個元素的分數) (4)有序集合比列表更耗內存。
2 增加元素Zadd key score member. # 添加單個元素redis> ZADD page_rank 10 google.com (integer) 1# 添加多個元素redis> ZADD page_rank 9 baidu.com 8 bing.com (integer) 2redis> ZRANGE page_rank 0 -1 WITHSCORES 1) "bing.com" 2) "8" 3) "baidu.com" 4) "9" 5) "google.com" 6) "10"# 添加已存在元素,且 score 值不變redis> ZADD page_rank 10 google.com (integer) 0redis> ZRANGE page_rank 0 -1 WITHSCORES # 沒有改變 1) "bing.com" 2) "8" 3) "baidu.com" 4) "9" 5) "google.com" 6) "10"# 添加已存在元素,但是改變 score 值redis> ZADD page_rank 6 bing.com (integer) 0redis> ZRANGE page_rank 0 -1 WITHSCORES # bing.com 元素的 score 值被改變 1) "bing.com" 2) "6" 3) "baidu.com" 4) "9" 5) "google.com" 6) "10"
3 獲得元素的分數。zscore key member 4 獲得排名在某個范圍的元素列表。
5獲得分數在某個范圍中的元素
6 增加某個元素的分數 zincrby key increment member。 7 集合中數量。zcard key
8 獲得指定分數范圍內的元素個數 zcount key min max。
9 刪除一個/多個元素 zrem key member。 10 按照排名范圍刪除元素 zremrangebyrank key start stop 11 按照分數范圍刪除元素:移除有序集?key?中,所有?score?值介于?min?和?max?之間(包括等于?min?或?max?)的成員。
redis> ZRANGE salary 0 -1 WITHSCORES # 顯示有序集內所有成員及其 score 值 1) "tom" 2) "2000" 3) "peter" 4) "3500" 5) "jack" 6) "5000"redis> ZREMRANGEBYSCORE salary 1500 3500 # 移除所有薪水在 1500 到 3500 內的員工 (integer) 2redis> ZRANGE salary 0 -1 WITHSCORES # 剩下的有序集成員 1) "jack" 2) "5000"
12 獲得元素的排名。zrank/zrevrank redis> GET db (nil)redis> SET db redis OK
| ? | 字符串 | 散列 | 列表 | 集合 | 有序集合 | ? |
| 設置/新增 | set key | HSET key field value | LPUSH key value RLPUSH key value | SADD key member | ZADD key score member | ? |
| 查詢 | get | HGET key field HKEYS key(返回所有的field) HGETALL key 返回所有的field和value | lrange key start stop lindex key index LINSERT key BEFORE|AFTER pivot value | SCARD(返回集合數量) Smember ?SRANDMEMBER | ZCARD key ZCOUNT key min max | ? |
| 刪除其中一個元素 | del key | hdel key field | lpop/rpop brpop(帶阻塞) | SMOVE SPOP | ZREM key member | 1 設置失效) |
| 修改 | set | hset | LSET key index value | 無 | ? | ? |
二、字符串、整數
1 設置和獲取字符串的值 set/get。 說明:set 設置的key若存在,則會覆蓋。get獲取的key不存在則會返回nil。 redis> GET db (nil)redis> SET db redis OK 2 遞增數字,incr(自增1) 和incrby(增加指定整數) 當數字不存在時,會直接回默認鍵值0,所以第一次遞增后值是1 redis> SET page_view 20 OKredis> INCR page_view (integer) 21 說明:若給一個字符串自增,則會返回 incrby # key 存在且是數字值redis> SET rank 50 OKredis> INCRBY rank 20 (integer) 70redis> GET rank "70" 6 自減 decr(自減1)和decrby(自減指定整數) 7 尾部追加 append # 對不存在的 key 執行 APPENDredis> EXISTS myphone # 確保 myphone 不存在 (integer) 0redis> APPEND myphone "nokia" # 對不存在的 key 進行 APPEND ,等同于 SET myphone "nokia" (integer) 5 # 字符長度# 對已存在的字符串進行 APPENDredis> APPEND myphone " - 1110" # 長度從 5 個字符增加到 12 個字符 (integer) 12redis> GET myphone "nokia - 1110" 8 獲取字符串長度 # 獲取字符串的長度redis> SET mykey "Hello world" OKredis> STRLEN mykey (integer) 11# 不存在的 key 長度為 0redis> STRLEN nonexisting (integer) 0 9 設置鍵值:使用 【字符串:字符串】格式 設置/獲得多個鍵值
三 散列類型命令 命令格式: 一個: hset key field vaue hget key field 多個 hmset key field1 value1 field2 value2 hmget key field1 field2 所有 hgetAll key
1、HSet不分插入和更新,執行插入時返回1,執行更新時返回0
2 設置/獲得多個字段值hmset、hmget、hgetall redis> HMSET pet dog "doudou" cat "nounou" # 一次設置多個域 OKredis> HMGET pet dog cat fake_pet # 返回值的順序和傳入參數的順序一樣 1) "doudou" 2) "nounou" 3) (nil) redis> HSET people jack "Jack Sparrow" (integer) 1redis> HSET people gump "Forrest Gump" (integer) 1redis> HGETALL people 1) "jack" # 域 2) "Jack Sparrow" # 值 3) "gump" 4) "Forrest Gump"
3 判斷是否存在;hexists 4 HSETNX,當不存在時賦值,若已存在則不執行任何操作。 5 增加數字:hincrby 6 刪除:hdel 7只獲取字段名/字段值:hkeys/hvals
四 列表類型命令 1 lpush/rpush,像列表左/右邊增加元素。,返回列表長度。 # 加入單個元素redis> LPUSH languages python (integer) 1# 加入重復元素redis> LPUSH languages python (integer) 2redis> LRANGE languages 0 -1 # 列表允許重復元素 1) "python" 2) "python"# 加入多個元素redis> LPUSH mylist a b c (integer) 3redis> LRANGE mylist 0 -1 1) "c" 2) "b" 3) "a" 2 lpop/rpop,從兩端彈出元素。返回彈出的元素,若無,則返回nil。 redis> LLEN course (integer) 0redis> RPUSH course algorithm001 (integer) 1redis> RPUSH course c++101 (integer) 2redis> LPOP course # 移除頭元素 "algorithm001
3 獲取隊列中元素個數:llen 4 lrange 獲得列表子集 redis> RPUSH fp-language lisp (integer) 1redis> LRANGE fp-language 0 0 1) "lisp"redis> RPUSH fp-language scheme (integer) 2redis> LRANGE fp-language 0 1 1) "lisp" 2) "scheme" 5 刪除列表中前count為value的值。lrem key count value # 先創建一個表,內容排列是 # morning hello morning helllo morningredis> LPUSH greet "morning" (integer) 1 redis> LPUSH greet "hello" (integer) 2 redis> LPUSH greet "morning" (integer) 3 redis> LPUSH greet "hello" (integer) 4 redis> LPUSH greet "morning" (integer) 5redis> LRANGE greet 0 4 # 查看所有元素 1) "morning" 2) "hello" 3) "morning" 4) "hello" 5) "morning"redis> LREM greet 2 morning # 移除從表頭到表尾,最先發現的兩個 morning (integer) 2 # 兩個元素被移除redis> LLEN greet # 還剩 3 個元素 (integer) 3redis> LRANGE greet 0 2 1) "hello" 2) "hello" 3) "morning"redis> LREM greet -1 morning # 移除從表尾到表頭,第一個 morning (integer) 1redis> LLEN greet # 剩下兩個元素 (integer) 2redis> LRANGE greet 0 1 1) "hello" 2) "hello"redis> LREM greet 0 hello # 移除表中所有 hello (integer) 2 # 兩個 hello 被移除redis> LLEN greet (integer) 0 6 獲得/指定索引的元素值 lindex key index lset key index value
7 保留指定列表片段:ltrim redis> LRANGE alpha 0 -1 # alpha 是一個包含 5 個字符串的列表 1) "h" 2) "e" 3) "l" 4) "l" 5) "o"redis> LTRIM alpha 1 -1 # 刪除 alpha 列表索引為 0 的元素 OKredis> LRANGE alpha 0 -1 # "h" 被刪除了 1) "e" 2) "l" 3) "l" 4) "o"
五 集合類型 集合類型是無順序、唯一的、列表類型是有序不唯一。有序指的是index有序。 1 增加/刪除。SADD/SREM. # 添加單個元素redis> SADD bbs "discuz.net" (integer) 1# 添加重復元素redis> SADD bbs "discuz.net" (integer) 0# 添加多個元素redis> SADD bbs "tianya.cn" "groups.google.com" (integer) 2redis> SMEMBERS bbs 1) "discuz.net" 2) "groups.google.com" 3) "tianya.cn" 2 獲得集合所有元素.SMEMBERS key。 # key 不存在或集合為空redis> EXISTS not_exists_key (integer) 0redis> SMEMBERS not_exists_key (empty list or set)# 非空集合redis> SADD language Ruby Python Clojure (integer) 3redis> SMEMBERS language 1) "Python" 2) "Ruby" 3) "Clojure" 獲得元素個數SCARD redis> SADD tool pc printer phone (integer) 3redis> SCARD tool # 非空集合 (integer) 3redis> DEL tool (integer) 1redis> SCARD tool # 空集合 (integer) 0
3 判斷元素是否在集合中。SISMEMBER key member 4 集合間運算;SDIFF、SINTER(交集)、SUNION(并集) 5 從集合中彈出元素SPOP
六 有序集合類型(key- value類型) 1 與列表對比: (1 )列表是通過鏈表實現的獲取靠近兩端的數據速度極快,當元素增多之后,訪問中間元素會變慢。更適合"新鮮事"或者日志,這樣很少訪問中間元素的 (2)有序集合通過散列表和跳躍表實現的,所以即使讀取位于中間的元素也很快(logN) (3)列表中不能簡單調整元素的位置,有序集合可以(通過更改這個元素的分數) (4)有序集合比列表更耗內存。
2 增加元素Zadd key score member. # 添加單個元素redis> ZADD page_rank 10 google.com (integer) 1# 添加多個元素redis> ZADD page_rank 9 baidu.com 8 bing.com (integer) 2redis> ZRANGE page_rank 0 -1 WITHSCORES 1) "bing.com" 2) "8" 3) "baidu.com" 4) "9" 5) "google.com" 6) "10"# 添加已存在元素,且 score 值不變redis> ZADD page_rank 10 google.com (integer) 0redis> ZRANGE page_rank 0 -1 WITHSCORES # 沒有改變 1) "bing.com" 2) "8" 3) "baidu.com" 4) "9" 5) "google.com" 6) "10"# 添加已存在元素,但是改變 score 值redis> ZADD page_rank 6 bing.com (integer) 0redis> ZRANGE page_rank 0 -1 WITHSCORES # bing.com 元素的 score 值被改變 1) "bing.com" 2) "6" 3) "baidu.com" 4) "9" 5) "google.com" 6) "10"
3 獲得元素的分數。zscore key member 4 獲得排名在某個范圍的元素列表。
5獲得分數在某個范圍中的元素
6 增加某個元素的分數 zincrby key increment member。 7 集合中數量。zcard key
8 獲得指定分數范圍內的元素個數 zcount key min max。
9 刪除一個/多個元素 zrem key member。 10 按照排名范圍刪除元素 zremrangebyrank key start stop 11 按照分數范圍刪除元素:移除有序集?key?中,所有?score?值介于?min?和?max?之間(包括等于?min?或?max?)的成員。
redis> ZRANGE salary 0 -1 WITHSCORES # 顯示有序集內所有成員及其 score 值 1) "tom" 2) "2000" 3) "peter" 4) "3500" 5) "jack" 6) "5000"redis> ZREMRANGEBYSCORE salary 1500 3500 # 移除所有薪水在 1500 到 3500 內的員工 (integer) 2redis> ZRANGE salary 0 -1 WITHSCORES # 剩下的有序集成員 1) "jack" 2) "5000"
12 獲得元素的排名。zrank/zrevrank redis> GET db (nil)redis> SET db redis OK
總結
以上是生活随笔為你收集整理的Redis教程之基础-五种数据基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Beta测试应用程序完整指南
- 下一篇: 医药板块走势强劲