天天看點

Redis 操作指令大全

Redis 操作指令大全

    • 操作說明
    • String 類型
    • Hash 類型(字段相同時覆寫)
    • List 類型(有序可重複)
    • Set 類型(無序不可重複)
    • ZSET 類型(有序不可重複)
    • 通用的KEY操作
    • BitMap 操作
    • HyperLogLog 操作
    • 資料備份與恢複

操作說明

參考文檔

Redis

Redis DEL 指令 | 菜鳥教程 (runoob.com)

String 類型

設定指定 key 的值

# 格式
set key value 

# 示例:<key,value> -> <China,Taiwan>
set China Beijing
           
Redis 操作指令大全

擷取指定 key 的對應的 value

# 格式
get key

# 示例
get China
           
Redis 操作指令大全

設定并傳回 key 的舊值

# 格式
getset key value

# 示例:第一次将 Japan 的值設定為 Tokyo,第二次設定為 aaa ,并傳回設定前的值
set Japan Tokyo
getset Japan Tokyo
           
Redis 操作指令大全

擷取所有(一個或多個)給定 key 的值

# 格式
mget key1 [key2..]

# 示例
mget China Japan
           
Redis 操作指令大全

設定指定 key 的過期時間

# 将值 value 關聯到 key ,并将 key 的過期時間設為 seconds (以秒為機關)
setex key seconds value

# 将值 value 關聯到 key ,并将 key 的過期時間設為 milliseconds (以毫秒為機關)
petex key milliseconds value

# 示例:設定 America 的過期時間為 10s
SETEX America 10 Washington

# 示例:設定 Kyle 的過期時間為 200ms
SETEX Kyle 200 big
           
Redis 操作指令大全
Redis 操作指令大全

隻有在 key 不存在時設定 key 的值

# 格式:單個
setnx key value
# 格式:多個
msetnx key value [key value ...] 

# 示例:單個
setnx America Washington

# 示例:多個
msetnx Rose 22 Jack 23
           
Redis 操作指令大全
Redis 操作指令大全

傳回 key 所儲存的字元串值的長度

# 格式
strlen key

# 示例
strlen China
           
Redis 操作指令大全

同時設定一個或多個 key-value 對

# 格式
mset key value [key value ...]

# 示例
mset Korea Seoul England London
           
Redis 操作指令大全

設定值自增

# 格式:将 key 中儲存的數字值增一
INCR key

# 格式:将 key 所儲存的值加上給定的增量值(increment)
INCRBY key increment

# 格式:将 key 所儲存的值加上給定的浮點增量值(increment)
INCRBYFLOAT key increment

# 在 3 的基礎上,visit_count 自增 1
set visit_count 0
incr visit_count

# 在目前的值的基礎上,給 visit_count 增加 3
incrby visit_count 3

# 在目前值的基礎上,給 visit_count 增加 0.5
INCRBYFLOAT visit_count 0.5
           
Redis 操作指令大全
Redis 操作指令大全
Redis 操作指令大全

設定值自減

# 格式:将 key 中儲存的數字值 減 1
DECR key

# 格式:key 所儲存的值減去給定的減量值(decrement)
DECRBY key decrement

# 示例,visit_count 自減 1 
DECR visit_count

# 示例,visit_count 自減 3 
DECRBY visit_count 3
           
Redis 操作指令大全

值追加

# 如果 key 已經存在并且是一個字元串, APPEND 指令将指定的 value 追加到該 key 原來值(value)的末尾
APPEND key value

# 示例
set test_str aabb
APPEND test_str cc
           
Redis 操作指令大全

Hash 類型(字段相同時覆寫)

說明

Redis hash 是一個 string 類型的 field 和 value 的映射表,hash 特别适合用于存儲對象

Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)

組成

① key:指定的哈希表

② filed:字段

③ value :字段對應的值

設定哈希表字段的值

# 格式:(單個)設定哈希表 key 中的字段 field 的值設為 value
HSET key field value 
# 示例:設定 kyle 的年齡為 18
HSET kyle age 18

# 格式:(多個)設定哈希表 key 中的字段 field 的值設為 value
HMSET key field1 value1 [field2 value2 ] 
# 示例:設定 Lisa 的年齡 19 ,城市 Beijing
HMSET Lisa age 19 city Beijing
           
Redis 操作指令大全
Redis 操作指令大全

字段不存在時設定哈希表字段的值

# 格式:隻有在字段 field 不存在時,設定哈希表字段的值
HSETNX key field value 

# 示例:如果 kyle 不存在字段 city ,就設定該字段的值為 Tianjing
HSETNX kyle city Tianjing
           
Redis 操作指令大全

檢視字段是否存在

# 格式:檢視哈希表 key 中,指定的字段是否存在
HEXISTS key field 

# 示例
HEXISTS kyle age 
           
Redis 操作指令大全

擷取哈希表中指定字段的值

# 格式:擷取存儲在哈希表中指定字段的值
HGET key field  
# 示例
HGET kyle age 

# 格式:擷取多個字段的值
HMGET key field1 [field2]
# 示例:擷取 kyle 的 age 和 city 字段
HMGET kyle age city
           
Redis 操作指令大全
Redis 操作指令大全

擷取指定 key 的字段和值

# 格式:擷取在哈希表中指定 key 的所有字段和值
HGETALL key 

# 示例:擷取 Lisa 對應的所有字段和值
HGETALL Lisa 
           
Redis 操作指令大全

擷取所有的哈希表中的字段

# 格式:擷取所有哈希表中的字段
HKEYS key 

# 示例:擷取 Lisa 的所有字段名稱
HKEYS Lisa
           
Redis 操作指令大全

擷取所有哈希表中的字段對應的值

# 格式:擷取所有哈希表中的字段對應的值
HVALS key 

# 示例:擷取 Lisa 的所有字段的值
HVALS Lisa 
           
Redis 操作指令大全

傳回 key 所儲存的字元串值的長度

# 格式:擷取哈希表中字段的數量
HLEN key 

# 示例:擷取 Lisa 的字段長度,統計的是字段的數量
HLEN Lisa
           
Redis 操作指令大全

整數值增加

# 格式:為哈希表 key 中的指定字段的整數值加上增量 increment
HINCRBY key field increment 

# 示例:Lisa 的年齡增加 1
HINCRBY Lisa age 1
           
Redis 操作指令大全

浮點數值自增

# 格式:為哈希表 key 中的指定字段的浮點數值加上增量 increment 
HINCRBYFLOAT key field increment 

# 示例: Lisa 的年齡增加 1.5
HINCRBYFLOAT Lisa age 1.5
           
Redis 操作指令大全

删除指定字段

# 格式:删除一個或多個哈希表字段 
HDEL key field1 [field2] 

# 示例:删除 Lisa 的 age 字段
HDEL Lisa age
           
Redis 操作指令大全

List 類型(有序可重複)

說明

Redis清單是簡單的字元串清單,按照插入順序排序。你可以添加一個元素到清單的頭部(左邊)或者尾部(右邊)

一個清單最多可以包含 2的32次方 - 1 個元素 (4294967295, 每個清單超過40億個元素)

将一個值或多個值插入到清單的頭部

# 格式:将一個值或多個值插入到清單的頭部,清單不存在則建立
LPUSH key value1 [value2] 

# 示例:向 student 清單中頭部添加 Lisa、Rose、Jack
LPUSH student Lisa Rose Jack
           
Redis 操作指令大全
Redis 操作指令大全

将一個值插入到已存在的清單的頭部

# 格式:将一個值插入到已存在的清單頭部,如果清單存在則插入,清單不存在則無法插入
LPUSHX key value 

# 示例:向已存在的清單 student 中插入 kyle,成功插入
LPUSHX student kyle 

# 示例:向不存在的清單 customer 中插入 kyle,插入失敗
LPUSHX customer kyle
           
Redis 操作指令大全
Redis 操作指令大全

将一個值或多個值插入到清單的尾部

# 格式:在清單中添加一個或多個值到尾部
RPUSH key value1 [value2] 

# 示例:向 student 清單中尾部添加 zhangsan
RPUSH student zhangsan
           
Redis 操作指令大全

将一個值插入到已存在的清單的尾部

# 格式:将一個值插入到已存在的清單的尾部,清單不存在則無法插入;清單存在則插入
RPUSHX key value 

 # 示例
RPUSHX key lisi 
           
Redis 操作指令大全

在清單的元素前或者後插入元素

# 格式:在清單的元素前或者後插入元素
# 注意:在清單中出現的第一個元素前插入元素,不會出現在多個相同的元素前都插入
# 例如:清單中有多個元素 lisi ,在 lisi 前插入lisan,隻會在從左到右的第一個 lisi 前插入
LINSERT key BEFORE|AFTER pivot value 

 # 示例:在 lisi 的前面插入 lisan
LINSERT student BEFORE lisi lisan 
           
Redis 操作指令大全

檢視list當中所有的資料

# 格式:檢視list當中所有的資料
LRANGE key start stop

# 示例
LRANGE student 0 -1
           
Redis 操作指令大全

通過索引擷取清單中的元素

# 格式:通過索引擷取清單中的元素
# 注意:索引是從 0 開始
LINDEX key index 

# 示例
LINDEX student 0 
           
Redis 操作指令大全

通過索引設定清單元素的值

# 格式:通過索引設定清單元素的值
LSET key index value 

# 示例:把索引為 3 的元素改為 kk
LSET student 3 kk
           
Redis 操作指令大全

擷取清單長度

# 格式:擷取清單長度
LLEN key 

# 示例
LLEN student 
           
Redis 操作指令大全

移出并擷取清單的第一個元素

# 格式:移出并擷取清單的第一個元素
LPOP key 

# 示例
LPOP student
           
Redis 操作指令大全

移除清單的最後一個元素

# 格式:移除清單的最後一個元素,傳回值為移除的元素
RPOP key 

# 示例:
RPOP student
           
Redis 操作指令大全

移出并擷取清單的第一個元素,沒有元素則阻塞直到逾時

# 格式:移出并擷取清單的第一個元素, 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止
# 注意:機關為 秒 s
BLPOP key1 [key2 ] timeout 

# 示例:從 emp 清單中彈出一個元素,沒有元素則阻塞等待 10s
BLPOP emp 10
           
Redis 操作指令大全

移出并擷取清單的第一個元素,沒有元素則阻塞直到逾時

# 格式:移出并擷取清單的最後一個元素, 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止
BRPOP key1 [key2 ] timeout 

# 示例:從 emp 清單中彈出一個元素,沒有元素則阻塞等待 2000ms
BRPOP emp 10 
           
Redis 操作指令大全

移除清單的最後一個元素,并添加到另外一個清單

# 格式:移除清單的最後一個元素,并将該元素添加到另一個清單并傳回
RPOPLPUSH source destination 

# 示例:從 emp 中移除一個元素并添加到 teacher 清單中
RPOPLPUSH emp teacher 
           
Redis 操作指令大全

從清單中彈出一個值,将彈出的元素插入到另外一個清單中并傳回它,沒有元素則阻塞直到逾時

# 格式:從清單中彈出一個值,将彈出的元素插入到另外一個清單中并傳回它;
# 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止
# 注意:時間為 秒 s
BRPOPLPUSH source destination timeout 

# 示例:從 teacher 清單中移除一個元素并添加到 emp 清單中
BRPOPLPUSH emp teacher 10
           
Redis 操作指令大全

對一個清單進行修剪(trim),讓清單隻保留指定區間内的元素

# 格式:對一個清單進行修剪(trim),就是說,讓清單隻保留指定區間内的元素,不在指定區間之内的元素都将被删除
LTRIM key start stop 

# 示例:對 student 表的元素進行裁剪,隻保留 2 到 4 之間的元素 
LTRIM student 2 4
           
Redis 操作指令大全

删除指定 key 的清單

# 格式:删除指定 key 的清單,一個或多個
DEL key1 key2

# 示例:删除清單 student
DEL student
           
Redis 操作指令大全

Set 類型(無序不可重複)

說明

① Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重複的資料

② Redis 中集合是通過哈希表實作的,是以添加,删除,查找的複雜度都是 O(1)

③ 集合中最大的成員數為 2的32次方 - 1 (4294967295, 每個集合可存儲40多億個成員)

向集合添加一個或多個成員

# 格式:向集合添加一個或多個成員
SADD key member1 [member2] 

# 示例:向 city1 集合添加元素
SADD city1 Beijing Tianjing Shanghai Wuhan
           
Redis 操作指令大全

傳回集合中的所有成員

# 格式:傳回集合中的所有成員
SMEMBERS key 

# 示例:傳回集合 city1 中的所有成員
SMEMBERS city1
           
Redis 操作指令大全

擷取集合的成員數

# 格式:擷取集合的成員數
SCARD key 

# 示例:擷取集合 city1 的成員數
SCARD city1 
           
Redis 操作指令大全

傳回給定所有集合的差集

# 格式:傳回給定所有集合的差集
SDIFF key1 [key2] 

 # 示例:傳回集合 city1 和 集合 city2 中的差集
SDIFF city1 city2
           
Redis 操作指令大全

傳回給定所有集合的差集并存儲在指定集合

# 格式:傳回給定所有集合的差集并存儲在 destination
SDIFFSTORE destination key1 [key2] 
 
 # 示例:傳回集合 city1 和 集合 city2 中的差集并存儲在 city3 集合中
SDIFFSTORE city3 city1 city2
           
Redis 操作指令大全

傳回給定所有集合的交集

# 格式:傳回給定所有集合的交集
SINTER key1 [key2] 

# 示例:傳回 city1 city2 的交集
SINTER city1 city2
           
Redis 操作指令大全

傳回給定所有集合的交集并存儲在指定集合

# 格式:傳回給定所有集合的交集并存儲在 destination 中
SINTERSTORE destination key1 [key2] 

# 示例:傳回集合 city1 和 集合 city2 中的差集并存儲在 city4 集合中
SINTERSTORE city4 city1 city2
           
Redis 操作指令大全

判斷元素是否存在

# 格式:判斷 member 元素是否是集合 key 的成員
SISMEMBER key member 

# 示例:判斷 Beijing 是否為 city1 中的成員
SISMEMBER city1 Beijing
           
Redis 操作指令大全

移動元素到指定集合

# 格式:将 member 元素從 source 集合移動到 destination 集合
SMOVE source destination member 

# 示例:将 Beijing 從 city1 中移動到 city5 中
SMOVE city1 city5 Beijing
           
Redis 操作指令大全

移除并傳回集合中的一個随機元素

# 格式:移除并傳回集合中的一個随機元素
SPOP key 

# 示例:從 city1 中傳回一個随機元素
SPOP city1 
           
Redis 操作指令大全

傳回集合中一個或多個随機數

# 格式:傳回集合中一個或多個随機數
SRANDMEMBER key [count] 

# 示例:傳回集合 city3 中 2 個随機數
SRANDMEMBER city3 2 
           
Redis 操作指令大全

移除集合中一個或多個成員

# 格式:移除集合中一個或多個成員
SREM key member1 [member2] 

# 示例:移出集合 city1 中的 Wuhan
SREM city1 Wuhan 
           
Redis 操作指令大全

傳回所有給定集合的并集

# 格式:傳回所有給定集合的并集
SUNION key1 [key2] 

# 示例:傳回 city1 和 city2 集合的并集
SUNION city1 city2
           
Redis 操作指令大全

将指定集合的并集存儲在指定集合中

# 格式:所有給定集合的并集存儲在 destination 集合中
SUNIONSTORE destination key1 [key2] 

# 示例:将 city1 和 city2 的并集存儲在 city7 中
SUNIONSTORE city7 city1 city2
           
Redis 操作指令大全

ZSET 類型(有序不可重複)

說明

① Redis有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員

② 它用來儲存需要排序的資料,例如排行榜,一個班的國文成績,一個公司的員工工資,一個論壇的文章等

③ 有序集合中,每個元素都帶有score(權重),以此來對元素進行排序

組成(舉例)

以國文成績為例,key是考試名稱(期中考試、期末考試等),member是學生名字,score是成績

① key

② member

③ score

向有序集合添加一個或多個成員

# 格式:向有序集合添加一個或多個成員
ZADD key score1 member1 [score2 member2] 

# 示例:向 項目1 集合添成員姓名和分數
ZADD project1 90 zhangsan 80 lisi 93 Kyle 75 Lisa 62 Rose
           
Redis 操作指令大全

擷取有序集合的成員數

# 格式:擷取有序集合的成員數
ZCARD key 

# 示例:傳回集合 project1 中的成員數
ZCARD project1 
           
Redis 操作指令大全

計算在有序集合中指定區間分數的成員數

# 格式:計算在有序集合中指定區間分數的成員數
ZCOUNT key min max 

# 示例:擷取集合 project1 中分數在 90 到 100 的成員數
ZCOUNT project1 90 100  
           
Redis 操作指令大全

有序集合中對指定成員的分數加上增量 increment

# 格式:有序集合中對指定成員的分數加上增量 increment
ZINCRBY key increment member 

# 示例:給 project1 中的 lisi 加 5 分
ZINCRBY project1 5 lisi 
           
Redis 操作指令大全

擷取交集并存儲在新的有序集合中

# 格式:計算給定的一個或多個有序集的交集并将結果集存儲在新的有序集合 key 中
ZINTERSTORE destination numkeys key [key ...] 

# 示例:計算 project1 和 project2 有序集的交集并存儲在 result1 集合中
# 2 指的是 2個集合
ZINTERSTORE result1 2 project1 project2
           
Redis 操作指令大全

傳回有序集中指定區間内的成員(升序)

# 格式:通過索引區間傳回有序集合指定區間内的成員
ZRANGE key start stop [WITHSCORES] 

# 示例:傳回 city1 city2 的交集
ZRANGE result1 0 -1
           
Redis 操作指令大全

傳回分數區間的成員

# 格式:通過分數傳回有序集合指定區間内的成員
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 

# 示例:傳回集合 project1 中 分數在 90  到 100 的成員
ZRANGEBYSCORE project1 90 100
           
Redis 操作指令大全

傳回有序集合中指定成員的索引

# 格式:傳回有序集合中指定成員的索引
ZRANK key member 

# 示例:傳回 project1 中 zhangsan 的索引
ZRANK project1 zhangsan 
           
Redis 操作指令大全
Redis 操作指令大全

移除有序集合中的一個或多個成員

# 格式:移除有序集合中的一個或多個成員
ZREM key member [member ...] 

# 示例:移除 project1 中 zhangsan
ZREM project1 zhangsan
           
Redis 操作指令大全

傳回有序集中指定區間内的成員(降序)

# 格式:傳回有序集中指定區間内的成員,通過索引,分數從高到低
ZREVRANGE key start stop [WITHSCORES] 

# 示例:傳回 project1 指定區間内的成員
ZREVRANGE project1 0 -1
           
Redis 操作指令大全

傳回有序集合中指定成員的排名

# 格式:傳回有序集合中指定成員的排名,有序內建員按分數值遞減(從大到小)排序
# 注意:排名是從 0 開始的
ZREVRANK key member 

# 示例:傳回集合 project1 中 lisi 的排名
ZREVRANK project1 lisi 
           
Redis 操作指令大全

傳回有序集中,成員的分數值

# 格式:傳回有序集中,成員的分數值
ZSCORE key member 

# 示例:傳回 project1 中 lisi 的分數值
ZSCORE project1 lisi 
           
Redis 操作指令大全

通用的KEY操作

說明

對所有類型都适用,因為都是 <Key,Value> 類型

删除key

# 格式:該指令用于在 key 存在時删除 key
DEL key

# 示例
DEL project2
           
Redis 操作指令大全

序列化給定 key ,并傳回被序列化的值。

# 格式:序列化給定 key ,并傳回被序列化的值
DUMP key 

# 示例
DUMP kyle
           
Redis 操作指令大全

檢查 key 是否存在

# 格式:檢查給定 key 是否存在
EXISTS key 

# 示例
EXISTS kyle
           
Redis 操作指令大全

設定過期時間 (秒)

# 格式:為給定 key 設定過期時間,以秒計
EXPIRE key seconds

# 示例:給 Jack 設定過期時間 10 s
EXPIRE Jack 10
           
Redis 操作指令大全

設定過期時間 (毫秒)

# 格式:設定 key 的過期時間以毫秒計
PEXPIRE key milliseconds 

# 示例:給 Jack 設定過期時間 2000 ms
PEXPIRE Jack 2000
           

查找key

# 格式:查找所有符合給定模式( pattern)的 key 
KEYS pattern 

# 示例:傳回所有的key
keys *
# 示例:傳回字首為 city 的 key
keys city*
           
Redis 操作指令大全

移除 key 的過期時間

# 格式:移除 key 的過期時間,key 将持久保持
PERSIST key 

# 示例:移除 Korea 的過期時間
PERSIST Korea 
           
Redis 操作指令大全

傳回 key 的剩餘的過期時間(毫秒)

# 格式:以毫秒為機關傳回 key 的剩餘的過期時間
PTTL key 

# 示例:傳回 China 的過期時間
PTTL China
           
Redis 操作指令大全

傳回 key 的剩餘的過期時間(秒)

# 格式:以秒為機關,傳回給定 key 的剩餘生存時間(TTL, time to live)
TTL key 

# 示例:移除 project1 中 zhangsan
TTL Japan 
           
Redis 操作指令大全

随機傳回一個 key

# 格式:從目前資料庫中随機傳回一個 key
RANDOMKEY 
           
Redis 操作指令大全

修改 key 的名稱

# 格式:修改 key 的名稱
RENAME key newkey 

# 格式:僅當 newkey 不存在時,将 key 改名為 newkey 
RENAMENX key newkey 

# 示例:修改 project2 的名稱為 project3
RENAME project2 project3 
           

傳回 key 所儲存的值的類型

# 格式:傳回 key 所儲存的值的類型
TYPE key 

# 示例:傳回 city7的類型
TYPE city7
           
Redis 操作指令大全

BitMap 操作

什麼是 BitMap

計算機最小的存儲機關是位

bit

Bitmaps

是針對位的操作的,相較于 String、Hash、Set 等存儲方式更加節省空間,

Bitmaps

不是一種資料結構,操作是基于

String

結構的,一個

String

最大可以存儲

512M

,那麼一個

Bitmaps

則可以設定

2^32

個位

BitMap 操作

Bitmaps 單獨提供了一套指令,是以在

Redis

中使用

Bitmaps

和使用字元串的方法不太相同。可以把

Bitmaps

想象成一個以位為機關的數組,數組的每個單元隻能存儲

1

,數組的下标在

Bitmaps

中叫做偏移量

Redis 操作指令大全

案例:通過 BitMap 高效統計日活躍使用者數量

将每個獨立使用者(重複通路不算)是否通路過網站存放在

Bitmaps

中, 将通路的使用者記做

1

, 沒有通路的使用者記做

, 用偏移量作為使用者的

id

Redis 操作指令大全

設定值

注意:第一次初始化

Bitmaps

時, 假如偏移量非常大, 那麼整個初始化過程執行會比較慢, 可能會造成

Redis

的阻塞

# 格式:設定 BitMap 的 key、偏移量、value
SETBIT key offset value

# 示例:
# key 為 dau:users:2016-04-05 
# 偏移量為使用者 id
# 1 代表使用者已通路
setbit dau:users:2020-04-28 11 1
setbit dau:users:2020-04-28 15 1
setbit dau:users:2020-04-28 19 1
setbit dau:users:2020-04-28 23 1
setbit dau:users:2020-04-28 88 1
           
Redis 操作指令大全

擷取值

# 格式:根據 key 和偏移量擷取 值
GETBIT key offset

# 示例:擷取日活統計中日期為2016-04-05中 使用者 id 為 19 的使用者是否通路過 
getbit dau:users:2020-04-28 19
           
Redis 操作指令大全

統計數量

# 格式:擷取指定偏移量範圍内的使用者數量
BITCOUNT key [start end]

# 示例:擷取日期為 2016-04-05 的使用者通路時數量
bitcount dau:users:2020-04-28
           
Redis 操作指令大全

Bitop複合操作介紹

bitop 是一個複合操作, 它可以做多個

Bitmaps

and

(交集) 、 or(并集) 、 not(非) 、 xor(異或) 操作并将結果儲存在destkey 中

# 格式:按照指定的複合操作把一個或多個 bitmap 的結果存儲到 destkey 中
# operation 為複合操作的類型:and、or、not、xor
# destkey 為将複合操作的結果儲存的地方
BITOP operation destkey key [key, …]
           

計算交集

# 示例:計算 2020-04-28_29 和 2020-04-29 的交集,并将交集結果存儲到 dau:users:result_and:2020-04-28_29
bitop and dau:users:result_and:2020-04-28_29 dau:users:2020-04-28 dau:users:2020-04-29
           
Redis 操作指令大全
Redis 操作指令大全

計算并集

# 示例:計算 2020-04-28_29 和 2020-04-29 的并集,并将交集結果存儲到 unique:users:result:2020-04-28_29
bitop or unique:users:result_or:2020-04-28_29 unique:users:2020-04-28 unique:users:2020-04-29
           

HyperLogLog 操作

什麼是 HyperLogLog

Redis 在

2.8.9

版本添加了

HyperLogLog

結構,

HyperLogLog

是用來做基數統計的算法,

HyperLogLog

的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定 的、并且是很小的,每個鍵隻需要花費

12 KB

記憶體,就可以計算接近

2^64

個不同元素的基數

注意: HyperLogLog 隻會根據輸入元素來計算基數,而不會儲存輸入元素本身,不能傳回我們存儲的元素本身

HyperLogLog 的誤差

HyperLogLog 提供不精确的去重計數方案,雖然不精确但是也不是非常不精确,标準誤差是

0.81%

,不過這對于頁面使用者通路量是沒影響的,因為這種統計可能是通路量非常巨大,但是又沒必要做到絕對準确,通路量對準确率要求沒那麼高,但是性能存儲方面要求就比較高了,而

HyperLogLog

正好符合這種要求,不會占用太多存儲空間,同時性能不錯

案例:使用者通路量統計

要統計一個頁面的通路量(PV),可以直接用

redis

計數器或者直接存資料庫都可以實作,如果要統計一個頁面的使用者通路量(UV),一個使用者一天内如果通路多次的話,也隻能算一次,這樣,我們可以使用

SET

集合來做,因為SET集合是有去重功能的,key存儲頁面對應的關鍵字,

value

存儲對應的

userid

,這種方法是可行的

但如果通路量較多,假如有幾千萬的通路量,需要頻繁建立

SET

集合對象,是以我們使用

HyperLogLog

檢視幫助

help @hyperloglog
           
Redis 操作指令大全

添加值

# 格式:添加一個或多個 value 到指定的 key 中
pfadd key value

# 示例:
# key:goods102.html 頁面在 20201020 的 uv 量
# value:使用者 id
pfadd uv_goods102.html_20201020 user_243
           
Redis 操作指令大全

統計數量

# 格式:擷取指定 key 的基數
pfcount key

# 示例:goods102.html 頁面在 20201020 的 uv 量
pfcount uv_goods102.html_20201020
           
Redis 操作指令大全

合并

# 格式:合并 key1 和 key2,并将結果存儲在 destination
pfmerge destination  key1 [key2] 

# 示例:統計 20201020 和20201021 兩個日期的使用者量
pfmerge uv_result uv_goods102.html_20201020 uv_goods102.html_20201021
           
Redis 操作指令大全

資料備份與恢複

資料備份(RDB) 方式一:檔案配置(預設開啟)

# 找到 redis.conf 配置檔案
vim redis.conf

# 第 202 行進行配置,配置後重新開機 redis 
# 配置說明:
# 表示在 900 秒内,有 1 個 key 發生變化,就會生成一份 redis 的快照
# 表示在 300 秒内,有 10 個 key 發生變化,就會生成一份 redis 的快照
# ...
save 900 1
save 300 10
save 60 10000
           

資料備份(RDB) 方式二:執行指令

# 執行 SAVE 指令,該指令将在 redis 安裝目錄中建立 dump.rdb 檔案
# 指令說明:該指令會阻塞 Redis 主程序,直到儲存完成為止,在主程序阻塞期間,伺服器不能處理用戶端的任何請求
SAVE 
           
Redis 操作指令大全
Redis 操作指令大全

資料備份(RDB) 方式三:執行指令

# 執行 BGSAVE 指令,該指令将在 redis 安裝目錄中建立 dump.rdb 檔案
 # 指令說明:該指令使用異步線程執行,直到儲存完成為止,不會阻塞,伺服器可以正常處理用戶端的任何請求
 BGSAVE
           

資料恢複

# 1.擷取資料目錄
config get dir

# 2.将 dump.rdb 檔案移動到該目錄中
           
Redis 操作指令大全