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,失敗(重複)返回0smembers myset //獲取myset中的所有元素
srem myset "one" //從myset中刪除一個one
成功返回1,失敗(不存在)返回0spop myset //隨機返回並刪除myset中的一個元素
sdiff myset1 myset2 //返回兩個集合的差集
以myset1爲標準,獲取myset2中不存在的。
其他Redis常用命令
-
鍵值相關命令
keys //返回鍵(key)
keys list //返回名以list開頭的所有鍵(key)
exists list1 //判斷鍵名爲list1的是否存在
存在返回1, 不存在返回0
del list1 //刪除一個鍵(名爲list1)expire list1 10 //設置鍵名爲list1的過期時間爲10秒後
ttl list1 //查看鍵名爲list1的過期時間,若爲-1表示以過期