Redis 數據類型詳解

1.redis數據類型
Redis包含5種數據類型
string(字符串)、hash(哈希表) list(雙向列表)、set(集合)和zset(有序集合)
(1)字符串 string:和我們平時研究的字符串定義一樣 key value(必須是字符串) name ssss
命令:
set命令:設置一個鍵和值,鍵存在則只覆蓋,返回ok

set 鍵 值 例如: >set name zhangsan

get命令:獲取一個鍵的值,返回值

get 鍵 例如:>get name

setnx命令:設置一個不存在的鍵和值(防止覆蓋),

setnx 鍵 值 若鍵已存在則返回0表示失敗

setex命令:設置一個指定有效期的鍵和值(單位秒)

setex 鍵 [有效時間] 值 例如: >setex color 10 red
不寫有效時間則表示永久有效,等價於set

setrange命令:替換子字符串 (替換長度由子子串長度決定)

setrange 鍵 位置(從0開始) 子字串
setrange name 4 aa 將name鍵對應值的第4個位置開始替換

mset命令:批量設置鍵和值,成功則返回ok

mset 鍵1 值1 鍵2 值2 鍵3 值3 ....

msetnx命令:批量設置不存在的鍵和值,成功則返回ok

msetnx 鍵1 值1 鍵2 值2 鍵3 值3 ....

getset命令:獲取原值,並設置新值

getset 鍵名 新的值
getrange命令:獲取指定範圍的值
getrange 鍵 0 4 //獲取指定0到4位置上的值

mget命令: 批量獲取值

mget 鍵1 鍵2 鍵3....

incr命令: 指定鍵的值做加加操作,返回加後的結果。

鍵 例如: >incr 鍵名
incrby命令: 設置某個鍵加上指定值
incrby 鍵 m //其中m可以是正整數或負整數

decr命令: 指定鍵的值做減減操作,返回減後的結果。

decr 鍵 例如: >decr kid
decrby命令: 設置某個鍵減上指定值
decrby 鍵 m //其中m可以是正整數或負整數

append命令:給指定key的字符串追加value,返回新字符串值的長度

append 鍵 追加字串

strlen求長度 >strlen 鍵名 //返回對應的值。
(2)哈希類型(hash)
Redis hash 是一個string類型的field和value的映射表,hash特別適合用於存儲對象。
Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)。
Hash表也稱散列表,也有直接譯作哈希表,Hash表是一種特殊的數據結構,它能夠快速定位到想要查找的記錄,根據哈希的表名,直接定位
結構如下:

命令:
hset命令:設置一個哈希表的鍵和值

hset hash名(hash表名) 鍵 值
如:>hset user:001 name zhangsan

hsetnx命令:設置一個哈希表中不存在的鍵和值

hsetnx hash名 鍵 值 //成功返回1,失敗返回0
如:>hsetnx user:001 name zhangsan

hmset命令:批量設置
-》hmset user:001 鍵1 值1 鍵2 值2
hmget命令 批量獲取
hget命令: 獲取執行哈希名中的鍵對應值
hget user:001 name

hexists user:001 name //是否存在, 若存在返回1

hlen user:001 //獲取某哈希user001名中鍵的數量

hdel user:001 name //刪除哈希user:001 中name鍵
->del user:001 //刪除當前hash表數據

hkeys user:002 //返回哈希名爲user:002中的所有鍵。
hvals user:002 //返回哈希名爲user:002中的所有值。
hgetall user:002 //返回哈希名爲user:002中的所有鍵和值。
(3)鏈表(lists)
在Redis中,List類型是按照插入順序排序的字符串鏈表。和數據結構中的普通鏈表一樣,
我們可以在其頭部(left)和尾部(right)添加新的元素。在插入時,如果該鍵並不存在,
Redis將爲該鍵創建一個新的鏈表。與此相反,如果鏈表中所有的元素均被移除,那麼該鍵也將會被從數據庫中刪除。
List中可以包含的最大元素數量是4294967952。

從元素插入和刪除的效率視角來看,如果我們是在鏈表的兩頭插入或刪除元素,這將會是非常高效的操作,
即使鏈表中已經存儲了百萬條記錄,該操作也可以在常量時間內完成。然而需要說明的是,
如果元素插入或刪除操作是作用於鏈表中間,那將會是非常低效的。

命令:

lpush list1 "world" //在list1頭部壓入一個字串
lpush list1 "hello" // 在list1頭部壓入一個字串
lrange list1 0 -1 //獲取list1中內容
0:表示開頭 -1表示結尾。

rpush list2 "world" //在list2尾部壓入一個字串
rpush list2 "hello" // 在list2尾部壓入一個字串
lrange list2 0 -1 //獲取list2中內容
0:表示開頭 -1表示結尾。

linsert list2 before "hello" "there"
在key對應list的特定位置前或後添加字符串

lset list2 1 "four"
修改指定索引位置上的值

lrem list2 2 "hello" //刪除前兩個hello值
lrem list2 -2 "hello" //刪除後兩個hello值
lrem list2 0 "hello" //刪除所有hello值

ltrim mylist8 1 -1 //刪除此範圍外的值

lpop list2 //從list2的頭部刪除元素,並返回刪除元素
rpop list2 //從list2的尾部刪除元素,並返回刪除元素
rpoplpush list1 list2 //將list1的尾部一個元素移出到list2頭部。並返回

lindex list2 1 //返回list2中索引位置上的元素
llen list2 //返回list2上長度

(4)set(集合)和zset(有序集合)
在Redis中,我們可以將Set類型看作爲沒有排序的字符集合,
和List類型一樣,我們也可以在該類型的數據值上執行添加、刪除或判斷某一元素是否存在等操作
zset是在set的基礎上增加了順序,形成一個有序的集合

如圖所示:

命令:

sadd myset "hello" //向myset中添加一個元素
成功返回1,失敗(重複)返回0

smembers myset //獲取myset中的所有元素

srem myset "one" //從myset中刪除一個one
成功返回1,失敗(不存在)返回0

spop myset //隨機返回並刪除myset中的一個元素

sdiff myset1 myset2 //返回兩個集合的差集
以myset1爲標準,獲取myset2中不存在的。

其他Redis常用命令

  1. 鍵值相關命令

    keys //返回鍵(key)
    keys list
    //返回名以list開頭的所有鍵(key)
    exists list1 //判斷鍵名爲list1的是否存在
    存在返回1, 不存在返回0
    del list1 //刪除一個鍵(名爲list1)

    expire list1 10 //設置鍵名爲list1的過期時間爲10秒後
    ttl list1 //查看鍵名爲list1的過期時間,若爲-1表示以過期

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章