key 操作 刪除 key:del key 查看所有的 key(一次性遍歷整個資料庫,生產上慎重使用):keys [pattern] 利用 cursor 分頁查詢記錄(漸進的遍歷整個資料庫,生產上推薦):scan cursor [MATCH pattern] [COUNT count] 序列化給定 ...
key 操作
- 刪除 key:del key
- 查看所有的 key(一次性遍歷整個資料庫,生產上慎重使用):keys [pattern]
利用 cursor 分頁查詢記錄(漸進的遍歷整個資料庫,生產上推薦):scan cursor [MATCH pattern] [COUNT count]
scan 0 match '*order*' count 20
- 序列化給定 key,並返回被序列化的值:dump key
- 檢查給定 key 是否存在:exists key
- 為 key 設置過期時間(秒)/ (時間戳)/(毫秒):expire key seconds / expireat key timestamp / pexpire key milliseconds
- 移除 key 的過期時間,key 將持久保存:persist key
- 以毫秒為單位返回 key 的剩餘過期時間:pttl key
- 返回 key 所存儲的值得類型:type key
- 返回從當前資料庫中隨機選擇的一個key:randomkey
原子的重命名一個key :rename oldkey newkey
Redis 的超時處理機制?
- 當 client 主動訪問 key 會先對 key 進行超時判斷,過時的 key 會立刻刪除。
- master 的後臺,會每秒做 10 次如下操作 — 隨機選取 100 個key校驗是否過期,如果有25個以上的 key 過期了,立刻額外隨機選取下 100 個key(不計算在10次之內)。
Redis 的中文顯示問題?
在 redis-cli 中使用中文時,必須打開 --raw 選項,才能正常顯示中文。
/usr/bin/redis-cli --raw
string 操作
- 保存 key 和 value(nx 表示 key 不存在的時候才賦值,xx 相反):set key value [ex 秒數] / [px 毫秒數] [nx] /[xx]
- 僅當 key 不存在的時候才賦值(常用來做分散式鎖):setnx key value
- 原子的設置 key 的值,並返回 key 的舊值(配合 setnx 實現分散式鎖):getset key value
- 批量設置 key、value 的值:mset key1 value1 ... keyN valueN
- 獲取/批量獲取 value 值:get key / mget key1....keyN
- 對 key 的值做加1或減1操作:incr/decr key
- 對 key 的值指定加/減某個數值:incrby/decrby key integer、incrbyfloat key floatnumber
- 對 key 的 value 追加值:append key value
- 返回截取過的 key 的字元串值,註意並不修改 key 的值:substr key start end
- 位操作(位置相反,右邊表示低位,offset 過大,則會在中間填充0):setbit key offset value、getbit key offset
list 操作
- 向列表左邊插入元素:lpush key value [value ...]
- 從列表右邊移出元素:rpop key
在 key 對應 list 的特定位置之前或之後添加字元串元素:linsert key before|after pivot value
linsert mylist before "world" "there"
- 返回 key 對應 list 的長度:llen key
- 通過索引獲取列表中的元素:lindex key index
- 獲取列表指定範圍內的元素(-1 表示最後一個元素):lrange key start end
- 保留指定區間內元素:ltrim key start end
- 設置list中指定下標的元素值:lset key index value
從列表右邊移出元素的阻塞方式,採取先到先服務原則,timeout 未獲取到則返回 nil:brpop key [key ...] timeout
set 操作
- 添加元素:sadd key value
- 移除元素,成功返回1:srem key
- 移除集合中的一個隨機元素並返回:spop key
- 返回集合中一個或多個隨機數:srandmember key count
- 根據 key 獲得集合中的所有成員:smembers key
- 判斷 member 是否在 set 中:sismember key member
- 獲取集合的成員數:scard key
- 把 member 從 source 集合轉移到 des 集合:smove source des member
- 返回給定集合的差集:sdiff key1 key2
- 返回給定集合的並集:sunion key1 key2
- 返回給定集合的交集:sinter key1 key2...keyN
zset 操作
- 添加元素到集合:zadd key score member
- 刪除元素:zrem key member
- 返回集合中的元素數量:zcard key
- 返回指定元素對應的 score:zscore key element
- 增加對應 member 的 score 值,保持有序,返回更新後的 score 值:zincrby key incr member
- 返回指定元素在集合中的排名,順序/逆序:zrank/zrevrank key member
- 返回有序集合中,指定範圍內的元素:zrange key start end (zrange key 0 -1)
- 返回有序集合中,指定分數區間內的元素(可以指定 inf 為無窮,withscores 表示需要返回分數):zrangebyscore key min max (zrangebyscore key -inf inf withscores)
評分的聚合:zunionstore destination numkeys key [key ...] [weights weight] [aggregate sum | min | max]
zunionstore award 2 visits votes weights 1 2 aggregate sum
- destination:表示生成的目標集合
- numkeys:需要聚合的集合數量,對應後面的 key [key ...] 數量和
- weights:乘法因數,預設為 1,每個給定有序集的所有成員的 score 值在傳遞給聚合函數(aggregation function)之前都要先乘以該因數
- aggregate:集合函數,有 sum、min、max
hash 操作
- 存儲/批量存儲 hash 值:hset key field value / hmset key field1 value1 field2 value2
- 獲取/批量獲取 hash 值:hget key field / hmget key filed1....fieldN
- 得到 hash 中的所有值:hgetall key
- 測試指定 field 是否存在:hexists key field
- 刪除一個或多個哈希欄位:hdel key field1 [field2]
- 返回 hash 的所有 field:hkeys key
- 返回指定 hash 的 field 數量:hlen key
HyperLogLog 操作
HyperLogLog 主要解決大數據應用中的非精確計數(可能多也可能少,但是會在一個合理的範圍) 操作,它可以接受多個元素作為輸入,並給出輸入元素的基數估算值,基數指的是集合中不同元素的數量。
HyperLogLog 的優點是,即使輸入元素的數量或者體積非常非常大,計算基數所需的空間總是固定的、並且是很小的。在 Redis 裡面,每個 HyperLogLog 鍵只需要花費 12 KB 記憶體,就可以計算接近 2^64 個不同元素的基數。關於數據誤差,在一個大小為 12k 的 key 所存儲的 hyperloglog 集合基數計算的誤差約是%0.81。
因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。
HyperLogLog 的這個數據結構可以非常省記憶體的去統計各種計數,比如註冊 IP 數、每日訪問 IP 數、頁面實時UV 、線上用戶數等。
- 將元素添加至 HyperLogLog :pfadd key element [element ...]
- 返回給定 HyperLogLog 的基數估算值(多個 HyperLogLog 會先對 HyperLogLog 作並集處理):pfcount key [key ...]
- 合併多個 HyperLogLog:pfmerge destkey sourcekey [sourcekey ...]