概述
由於redis是單線程執行,因此不用關心併發問題。java
簡單記錄一下redis的操做命令,留做查閱,回頭再整理一下事物等操做。redis
reids中存儲的是kev-value形式, 其中的value有幾種: sql
-
字符串: 就是簡單的string併發
-
字符串列表: 有序可重的列表app
-
字符串集合: 無序去重的dom
-
字符串有序集合: 有序去重的spa
-
哈希: 存儲一張哈希表線程
-
HyperLogLog: 基數操做,即獲取去重集合中的元素個數對象
各種型存儲命令介紹
字符串
簡單的字符串存儲了排序
字符串操做
新建
-
set key value: 設置value
-
setex key 2 value: 設置value,並設置過時時間爲2s
-
psetex key 2000 value: 設置value,並設置過時時間爲2000ms
-
setnx key value: 設置value,當key存在時不設置
-
append key value: 若key存在,將將value拼到原值後邊,不然直接設置
更新
-
getset key value: 設置value並返回舊的value
-
setrange key 2 value: 更新,將value拼到原值偏移量2的後邊
查詢
-
get key: 獲取value
-
getrange key 2 3: 獲取value的2-3的字串, 下標從0開始, 負數表示從後往前
-
strlen key: 獲取字符串長度
字符串批量操做
-
mset key1 value1 [key2 value2 ...]: 批量設置
-
msetnx key1 value1 [key2 value2 ...]: 批量設置,當key存在時不覆蓋
-
mget key1 [key2 ...]: 批量獲取
字符串位操做
好比設置一篇文章的是否閱讀, 能夠將用戶的id做爲偏移量, 1表示閱讀過, 0表示沒有閱讀
-
getbit key offset: 返回偏移量上的值,0或1
-
setbit key offset 1: 設置偏移量上的值
計數操做
簡單理解就是存個數字,由於redis是單線程,因此也能夠用它來防併發
-
incr key: +1,不存在時爲0+1
-
incrby key 2: +2
-
incrbyfloat key 2.4: +2.4
-
decr key: -1
-
decrby key 2.4: -2.4
列表
列表是一個有序可重複的集合,能夠參考java中的 List
插入
-
linsert key before(after) value1 value: 在value1的前邊(後邊)插入value,若成功,返回列表的新長度,若失敗返回-1,若列表爲空,返回0
-
lpush key value1 [value2 ...]: 將值插入到列表頭部
-
rpush key value1 [value2 ...]: 將值插入到列表尾部
-
lpushx key value: 將值插入列表的頭部,若列表不存在,操做無效
-
rpushx key value: 將值插入列表的尾部,若列表不存在,操做無效
-
lset key 2 value: 設置列表下標爲2的值
刪除
-
lrem key count value: 刪除列表中的value
-
count:刪除的個數,整數從前日後,負數從後往前,0刪除全部
-
-
ltrim key 2 3: 列表只保留2-3的元素,刪除其他元素
查詢
-
blpop key1 [key2 ...] timeout: 獲取並移除列表的第一個元素,阻塞timeout秒,若沒有拿到,返回nil
-
brpop key1 [key2 ...] timeout: 獲取並移除列表的最後一個元素,阻塞
-
brpoplpush key1 key2 timeout: 從key1中彈出(刪除)最後一個值插入到key2中,若timeout秒沒有拿到,返回nil
-
lpop key: 彈出列表的第一個元素
-
rpop key: 彈出列表的最後一個元素
-
rpoplpush key1 key2: 從key1中彈出最後一個元素插入到key2中
-
lindex key 2: 獲取列表下標爲2的元素
-
llen key: 獲取列表長度
-
lrange key 2 3: 獲取列表2-3的元素,負數從後往前
集合
集合是一個無序去重的,可參考java中的HashSet
更新
-
sadd key value1 [value2 ...]: 插入元素
-
smove key1 key2 value: 將value從key1移到key2,若key1中value不存在,則不執行操做
-
srem key value1 [value2 ...]: 將元素從集合中刪除
查詢
多個集合操做
-
sdiff key1 [key2 ...]: 返回全部集合的差集(值在key1中,不在其餘集合中0)
-
sdiffstore newKey key1[key2 ...]: 返回全部集合的差集,將結果存儲到newKey中
-
sinter key1 [key2 ...]: 返回全部集合的交集(值再每個集合中都存在)
-
sinterstore newKey key1 [key2 ...]: 返回全部集合的交集,將結果存儲到newKey中
-
sunion key1 [key2 ...]: 返回全部集合的並集
-
sunionstrore newKey key1 [key2 ...]: 返回全部集合的並集,將結果存儲到newKey中
獲取元素
-
spop key [count]: 從集合中隨機彈出一個元素, 若指定count,則彈出count個元素
-
srandmember key [count]: 從集合中隨機獲取一個元素,若指定count,則獲取count個元素,與 spop 不一樣,此命令不會刪除元素
-
scard key: 獲取集合元素數
-
sismember key value: 查看value是否在集合中
-
smembers key: 獲取集合全部元素
-
sscan key cursor [match h*] [count count]: 迭代集合中的元素
-
cursor:遊標,使用命令返回的新遊標做爲下一次迭代的遊標,當返回爲0時,迭代完成
-
count:指定返回的元素數量,默認爲10,每次迭代獲取的數量能夠不相同
-
match:對返回的元素進行篩選,由於是在返回結果後進行篩選,因此可能返回空
-
有序集合
有序集合是去重有序,可參考java中的LindedHashSet
redis中的有序集合經過給每一個元素設置一個關聯的分數,經過分數進行排序,當分數相同時,經過天然排序,即abcd
更新
-
zadd key score1 value1 [score2 value2 ...]: 添加元素,若存在更新分數
-
zincrby key 2.3 value: value的分數+2.3,若value不存在等同於add
刪除
-
zrem key value1 [value2 ...]: 刪除集合中的元素
-
zremrangebylex key min max: 刪除集合中指定範圍的元素,(min max 參考 zlexcount)
-
zremrangebyrank key 2 3: 刪除集合排名2-3的元素
-
zremrangebyscore key min max: 刪除集合中指定範圍分數的元素,(min max 參考 zlexcount)
查詢
獲取個數
-
zcard key: 獲取集合大小
-
zcount key 2 3: 獲取集合中分數在2-3的元素數量
-
zlexcount key min max: 獲取集合中成員在min-max之間的成員數量
-
min:-(負無窮), [a(最小值爲a元素,閉區間), (a(開區間)
-
max: +(正無窮), [a, (a 同上
-
多個集合操做
-
zinterstore newKey num key1 [key2 ...]: 計算多個集合的交集,將結果存儲到newKey中,結果集元素的分數爲各集合元素分數和,num指定後邊跟了幾個集合
-
zunionstore newKey num key1 [key2 ...]: 計算多個集合的並集,將結果存儲到newKey中,結果集元素的分數爲各集合元素分數和,num指定後邊跟了幾個集合
獲取範圍元素
-
zrange key 2 3 [withscores]: 獲取集合中排序爲2-3的元素,負數從後往前,按分數從小到大排序
-
withscores:返回分數值
-
-
zrevrange key 2 3 [withscores]: 相似 zrange, 分數從大到小排序
-
zrangebylex key min max [limit offset count]: 返回集合中指定範圍的元素,(min max 參考 zlexcount)
-
limit offset count: 可參考sql
-
-
zrangebyscore key min max: 返回集合中指定分數範圍的元素,(min max 參考 zlexcount)
-
zrevrangebyscore key max min [withscores]: 相似 zrangebyscore, 分數從大到小
獲取元素信息
-
zrank key value: 返回value的排名
-
zrevrank key value: 返回value的排名,分數從大到小
-
zscore key value: 返回value的分數
-
zscan key cursor [match h*] [count count]: 迭代集合,參數參考 sscan
哈希
存儲一張哈希表,簡單說就是多個kay-value對,能夠用來存儲對象屬性等
更新
-
hmset key field1 value1 [field2 value2 ...]: 批量設置鍵值對
-
hset key field value: 設置鍵值對
-
hsetnx key field value: 設置鍵值對,若已存在則不設置
-
hincrby key field 2: 給字段+2
-
hincrbyfloat key field 2.4: 給字段+2.4
刪除
-
hdel key field1 [field2 ...]: 刪除哈希表的字段
查詢
-
hlen key: 獲取字段數量
-
hexists key field: 查看哈希表中field字段是否存在
-
hget key field: 獲取哈希表中字段的值
-
hkeys key: 獲取全部字段
-
hvals key: 獲取全部值
-
hgetall key: 獲取哈希表的全部字段和值
-
hmget key field1 [field2 ...]: 獲取全部給定字段的值
-
hscan key cursor [match h*] [count count]: 迭代,參數參考 sscan
HyperLogLog
HyperLogLog(什麼鬼名字)是用來作基數統計的,也就是統計一個去重的集合中元素的個數,那直接使用集合不就行了?
使用集合的話,每一個元素都進行存儲,若須要作大量統計,則十分耗費內存,HyperLogLog並不直接存儲元素,無論有多少元素(2^64)都只須要12KB內存空間,也正因如此,並不能經過這個結構直接返回元素,只能計算其中元素的個數,但只是估算,能夠理解。
-
pfadd key value1 [value2 ...]: 將元素添加
-
pfcount key1 [key2 ...]: 返回基數估算值,若多個則返回估算值得和
-
pfmerge newKey key1 [key2 ...]: 將多個合併爲一個,存到newKey中
通用命令
更新
-
del key: 刪除鍵
-
expire key 2: 爲key設置2s過時時間
-
pexpire key 2000: 爲key設置2000ms過時時間
-
expireat key timestamp: 爲key設置過時時間,指定時間戳過時
-
pexpireat key millseconds-timestamp: 爲key設置過時時間,毫秒級時間戳(沒用過)
-
persist key: 移除key過時時間
-
ttl key: 獲取key的剩餘過時時間
-
pttl key: 獲取key的毫秒級剩餘過時時間
-
move key 2: 將key移動到2庫中
-
rename key newKey: 重命名
-
renamenx key newKey: 重命名,若newKey存在則不操做
查詢
-
dump key: 返回序列化的值
-
exists key: 查看key是否存在
-
keys pattern: 獲取全部符合匹配的key
-
pattern:* 表示全部, h* h開頭, 等等
-
-
randomkey: 從當前庫隨機返回一個key
-
type key: 返回存儲的數據類型
庫
-
select 1: 選擇1庫