標籤:

Redis學習筆記(一)

Redis學習筆記(一)

Redis學習筆記(一)

Redis概述

Redis是一個開源的內存數據結構存儲器,被用作key-value資料庫、緩存和消息代理。它支持多種數據結構包括字元串、哈希表、列表、集合、支持範圍查詢的有序集合、點陣圖、hyperloglogs和支持半徑查詢的地理空間索引(geospatial indexes)。Redis具有內建的複製功能、支持Lua腳本、多種LRU緩存驅逐策略、不同級別的硬碟持久化等功能,通過Redis Sentinel提供高可用性和Redis Cluster提供自動分區。Redis的官方網站是: Redis

Redis支持的數據類型及其主要命令

字元串(strings)

Redis strings是我們可以用Redis key關聯的最簡單的一種數據結構,由於Redis key也是字元串,因此我們使用String的時候是把一個字元串映射到另一個字元串上。String是二進位安全的,可以包含任何數據。它的應用場景非常廣泛,比如可以緩存HTML片段或者靜態頁面,也可以作為線程安全的計數器。

常用的命令有以下這些:

SET key value [EX seconds] [PX milliseconds] [NX|XX]

將字元串value關聯到key上。

GET key (MGET key [key ...])

返回key所關聯的字元串值。括弧中的是批量獲取的版本

INCR key

key關聯的字元串表示的數字原子性增加1

類似的還有

INCRBY key increment key關聯的字元串增加指定值offsetDECR key key關聯的字元串減少1DECRBY key decrement key關聯的字元串增加指定值offset

另外,String還有一些位操作:

GETBIT key offset 對key所存儲的字元串值,獲取指定偏移量上的位SETBIT key offset value 對key所儲存的字元串值,設置或清除指定偏移量上的位

哈希表(Hashes)

Redis Hash是一個鍵值對集合,很容易用它來表示對象這個概念,而且你可以往裡面放置幾乎沒有限制的field數量,只要不超過可用內存。

常用的命令有以下這些:

HSET key field value 將哈希表key中的域field的值設為value。HGET key field 返回哈希表key中給定域field的值。HKEYS key 返回哈希表key中的所有域。HLEN key 返回哈希表 key 中域的數量。HGETALL key 返回哈希表 key 中,所有的域和值。

列表(lists)

Redis List是通過鏈表實現的,這意味著從表頭插入(LPUSH)和表尾插入(RPUSH)是在O(1)的時間內完成的。但是缺點在於隨機訪問的速度很慢。如果需要訪問一個大集合的中間部分元素,可以考慮使用在將要介紹的有序集合。

常用的命令有以下這些:

LPUSH key value [value ...] 將一個或多個值value插入到列表key的表頭。LPOP key (BLPOP key [key ...] timeout) 移除並返回列表key的頭元素。括弧是阻塞版本。RPUSH key value [value ...] 將一個或多個值value插入到列表 key 的表尾(最右邊)。RPOP key (BRPOP key [key ...] timeout) 移除並返回列表key的尾元素。括弧是阻塞版本。

集合(sets)

Redis sets是字元串strings的無序集合,可以用於測試某個元素是否存在,或者在多個sets中實現交集、並集和差集等操作。

常用的命令有以下這些:

SADD key member [member ...] 將一個或多個member元素加入到集合key當中,已經存在於集合的member元素將被忽略。 SCARD key 返回集合key的基數(集合中元素的數量)。SREM key member [member ...] 移除集合key中的一個或多個member元素,不存在的member元素會被忽略。SISMEMBER key member 判斷member元素是否集合key的成員。SDIFF key [key ...] 返回一個集合的全部成員,該集合是所有給定集合之間的差集。SINTER key [key ...] 返回一個集合的全部成員,該集合是所有給定集合的交集。

有序集合(Sorted sets)

Sorted sets類似於sets和hashes的混合,Sorted sets裡面的每一個元素都是唯一的,而且每一個元素都映射score分值。Sorted sets裡面的元素是按照分值大小有序地獲取活或掃描成員和分值的。

ZADD key score member [[score member] [score member] ...] 將一個或多個member元素及其score值加入到有序集key當中。ZCARD key 返回有序集key的基數。ZCOUNT key min max 返回有序集key中,score值在min和max之間(默認包括score值等於min或max)的成員的數量。ZINCRBY key increment member 為有序集key的成員member的score值加上增量incrementZRANGE key start stop [WITHSCORES] 返回有序集key中,指定區間內的成員。其中成員的位置按score值遞增(從小到大)來排序。

點陣圖(Bitmaps)

點陣圖不是一種實際的數據類型,而是一組定義在Strings數據類型上的基於位的操作。位操作主要分為兩組:一組是常數級時間複雜度的單個位操作,比如設置1bit為0或者1,或者獲取這1bit的值;另一組是在一個範圍內的位操作,比如統計指定範圍內bit為1的數量。

HyperLogLogs

HyperLogLog是一種概率數據結構,用於統計大數據量唯一元素的數量(嚴格來說用於統計sets的元素數量)。通常統計sets的唯一元素數量需要使用和元素數量成比例的內存。而Redis實現可以在低於1%的錯誤而只使用固定的內存量統計出結果,最差的情況下也只使用12k位元組。

常用的命令如下:

PFADD key element [element ...] 往HyperLogLogs內添加一個或多個元素PFCOUNT key [key ...] 通過HyperLogLogs統計近似的元素數量## Redis概述

推薦閱讀:

為什麼說Redis是單線程的以及Redis為什麼這麼快!
PHP操作Redis詳解案例
緩存淘汰演算法--LRU演算法
Redis 之字典和跳錶

TAG:Redis |