Redis支持五種數據類型
- string (字符串)
- hash (哈希)
- list (列表)
- set (集合)
- zset (sorted set:有序集合)
注意 key 不要太長,最好不要超過1024字節,可以也不要太短,最好統一命名規範;
1. String(字符串)
string是redis最基本的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value。
string類型是二進制安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象 。
string類型是Redis最基本的數據類型,一個鍵最大能存儲512MB。
常見命令
# 賦值
set key value
#範例
set usernmae 大喬
# 取值
get key
# 範例
get username
# 取值賦值(先取值,然後在修改對應key的值)
getset key value
#範例
getset username 小喬
# 刪除值
del key
# 範例
del username
# 數值遞增一(對應值不存在默認0在加一,如果存在一個字符串就報錯)
incr key
# 範例
incr num
# 數值遞減(遞減一,值不存在默認0在減一)
decr key
#範例
decr num
# 將指定的value 增加指定的值(值不存在就默認是0,值是字符串就報錯)
incrby key value
#範例
incrby num 5
# 將指定的value 減指定的值(值不存在就默認是0,值是字符串就報錯)
decrby key value
#範例
decrby num 10
# 字符串拼接(存在就拼接,不存在就創建)
append key value
#範例
append name aaa
set key value 是在Redis 中存儲一個值;get key 獲取對應key 的值。多個相同key 最後一個key會將前面的覆蓋掉。
注意:一個鍵最大能存儲512MB。
2. Hash (哈希)
Redis hash 是一個鍵值對集合。Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。類似Java裏面的Map<String,Object>
# 賦值
hset key field value
#範例
hset myhash username tom
hset myhash age 18
# 取值
hget key field
# 範例
hget myhash age
# 一次取多個值
hget myhash username age
#獲取屬性和屬性值
hgetall myhash
# 刪除
hdel key field
# 範例(返回0 表示值在hash中不存在)
hdel myhash age
# 刪除整個集合
del key
# 範例
del myhash
# 給Hash中數字類型的值進行增加操作
hincrby key field value
# 範例
hincrby myhash age 10 # 給myhash集合中的age 值加10
# 判斷指定中key中某個屬性是否存在,存在返回1
hexists key field
# 範例
hexista myhash password
# 獲取指定key中所有的屬性和值
hgetall key
# 範例
hgetall myhash
# 獲取指定key中所有的屬性
hkeys key
# 範例
hkeys myhash
# 獲取指定key中所喲的值
hvals key
# 範例
hvals myhash
# 獲取指定key的長度
hlen key
# 範例
hlen myhash
注意:每個 hash 可以存儲 2的32次方 - 1 個鍵值對(40多億)。
3. List (列表)
Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
語法
# 左側添加[集合不存在就創建,存在就添加]
lpush key value [value...]
# 範例
lpush list a b c d e f g
# 右側添加
rpush key value [value...]
# 範例
rpush list2 1 2 3 4 5
# 查看list列表
lrange key start stop
# 範例
lrange list 1 4
# 左邊彈出[獲取集合左邊的第一個元素。彈出後集閤中此數據不存在]
lpop key
# 範例
lpop list
# 右邊彈出
rpop key
# 範例
rpop list
# 獲取list集合長度[集合不存在就返回0]
llen key
# 範例
llen list
# 僅當關聯的集合中存在的時候,在關聯的集合中頭部插入一個值
lpushx key value
# 範例
lpushx list 5
# 僅當關聯key存在時候在對應的集合右邊插入一個值
rpushx key value
# 範例
rpushx list 10
# 移除指定集合中指定的值[count 是負數從後面開始遍歷]
lrem key count value
# 範例
lrem list
注意 列表最多可存儲 2 的 23次方 - 1元素 (4294967295, 每個列表可存儲40多億)。
4. Set (字符串集合)
Redis的Set是string類型的無序集合。它是通過HashTable實現實現的。
# 添加元素
sadd key member [member ...]
# 範例
sadd myset a b c
# 刪除元素
srem key member [member ...]
srem myset a b
# 查看 set 中所有的值
smembers key
# 範例
smembers myset
# 判斷參數中是否有指定的值[0-不存在;1-存在]
sismember key member
# 範例
sismember myset 8
# 差集運算。和key的順序有關
sdiff key [key ...]
# 範例
sadd myal a b c
sadd mybl a c 1 2
sdiff myal mybl
5. zset(sorted set:有序字符串集合)
zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double類型的分數。
redis正是通過分數來爲集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重複。
sorted-set 和set區別
- sorted-set 中添加,刪除,跟新一個元素效率高。
- sorted-set 中的成員在集合中的位置是有序的
# 添加元素[元素存在就用新分數替代就分數]
zadd key 分數 元素 分數 元素 ......
# 範例
zadd mysort 70 zhangsan 80 wangwu
# 獲得分數
zscore key 元素
# 範例
zscore mysort zhangsan
# 獲取zset數量
zcard key
# 範例
zcard mysort
# 刪除某個元素
zrem key member [member ...]
# 範例
zrem mysort wangwu
6. 通用命令
6.1 查看所有key
keys *
6.2 like 查詢
keys my?
查看一my開頭的所有key
6.3 刪除指定的某個key
del key [key key ....]
刪除指定的一個key或者多個key
6.4 判斷某個key是否存在
exists key
查看指定的可以是否存在;1-存在;0-不存在。
6.5 對key設置過期時間(單位秒)
expire key 時間
6.6 查看指定key剩餘時間
ttl key
6.7 獲取指定key的類型
type key
6.8 不同數據切換
select index
6.9 移動指定key到不同的數據中(move)
move key index
6.9 清空數據
flushall