redis常規命令記錄

 

 

概述

由於redis是單線程執行,因此不用關心併發問題。java

簡單記錄一下redis的操做命令,留做查閱,回頭再整理一下事物等操做。redis

reids中存儲的是kev-value形式, 其中的value有幾種: sql

  1. 字符串: 就是簡單的string併發

  2. 字符串列表: 有序可重的列表app

  3. 字符串集合: 無序去重的dom

  4. 字符串有序集合: 有序去重的spa

  5. 哈希: 存儲一張哈希表線程

  6. 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庫

相關文章
相關標籤/搜索