1. 程式人生 > >2018/07/17 《Redis 入門指南 第二版》 學習筆記(一)

2018/07/17 《Redis 入門指南 第二版》 學習筆記(一)

取字符 沒有 應用 多個 微博 有序 案例 取整 位置

學習《Redis 入門指南 第二版》筆記。

適合看看文章同學:

  1:不太了解 Redis 的各項指令,不知道 Redis 有什麽特性

  2:平常只使用 key-value 存儲,不了解其他結構的使用和應用場景

  3:復習基礎知識和要點。

  4:沒事看看。。

PS:

  Redis 非關系型數據庫,雖然大部分還用作緩存。不過,是真可以用的數據庫

  本章主要講基本結構/基礎語法/部分應用場景。

1:內存級別的數據庫,在一臺普通電腦上,Redis 3.X 便可以讀取 10 萬個鍵值對(現在的Redis官方版本已經更新到了4.X,性能會更好)。

2:TTL生存時間(我更習慣叫過期時間),代表意義為 Time To Live

.

3:關於Redis 和 Memcached 的性能問題

  理論上 Memcached 為多線程模型,會比 Redis 性能好。

  但是,Redis的性能已經足夠好,在大部分場合下都不會成為它的瓶頸。

  我們更應該關註的是 Redis 和 Memcached 的應用場景。

4:如何修改 Redis 監聽端口

  啟動時修改 Redis-server --port XXXX

  在 Redis.conf 中修改 port 為 XXXX

5:Redis 可以選擇 0-15 共 16 個 ‘數據庫’,可以使用 SELECT 0-15 來選擇

  註意並不是我們理解的平常的數據庫。

  最主要的原因是多個數據庫之間並不是完全

隔離的。

  適合存同種數據單不同方向,比如 1號->存測試數據, 2號->存生產數據。

6:字符串類型

應用場景:

用於常規計數,常規的 key-value 存儲。
常用操作

設置一個值為(字符串類型) SET key value

取出一個值為(字符串類型) GET key

遞增數字 INCR key

獲取字符串長度 STRLEN key

7:散列類型

應用場景:

是一個string類型的field和value的映射表,hash特別適合用於存儲對象。 

存儲部分變更的數據,如用戶信息等。

對於將對象存儲成字符串而言,hash會占用更少的內存,並且可以更方便的存取整個對象.
常用操作:

設置一個值為(HASH類型) HSET key field value

取出一個值為(HASH類型) HGET key field

一次獲取多個值 HMGET key field [field ...]

獲取該HASH的全部字段和字段值 HGETALL key

判斷字段是否存在 HEXISTS key field

當字段不存在時賦值 HSETNX key field value

刪除字段 HDEL key field [filed ....]

只獲取該字段名(全部) HKEYS key

只獲取該字段值(全部) HVALS key

8:列表

應用場景:
    
由於 列表(list) 內部是由雙向鏈表實現的,所以從頭和尾獲取和插入是非常快的。

不過也正是因為如此,通過索引獲得元素的速度會很慢。

由於 LIST 的特性,更適合做日誌存儲,消息隊列等功能。
常用操作:

向列表左端增加元素(列表類型) LPUSH key value

向列表右端增加元素(列表類型) RPUSH key value

從左端取出一個元素(等於在這個list中刪除了這個元素) LPOP key
從右端取出一個元素(等於在這個list中刪除了這個元素) LPOP key

獲得列表的總個數 LLEN number

獲取列表片段 LRANGE key start stop

刪除列表中的值 LREM key count value
  - 當 count > 0 時候,從列表左邊刪除 count 個 值為 value 的元素。
  - 當 count < 0 時候,從列表右邊刪除 count 個 值為 value 的元素。
  - 當 count = 0 時候,刪除列表中所有值為 value 的元素。

通過索引查找元素,就和數組一樣 LINDEX key index

通過索引為元素賦值 LSET key index value

9:集合

對於集合(set)來說,是無序但是有唯一性的,列表(list)是有序但是不唯一的。

內部由 hash table 實現。

應用場景:
    set 就是一個集合,集合的概念就是一堆不重復值的組合。利用Redis提供的set數據結構,可以存儲一些集合性的數據。set中的元素是沒有順序的。 
案例: 
在微博應用中,可以將一個用戶所有的關註人存在一個集合中,將其所有粉絲存在一個集合。
Redis還為集合提供了求交集、並集、差集等操作,可以非常方便的實現如共同關註、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到一個新的集合中。
常用操作:

向集合添加一個或者多個元素 SADD key member [member ...]

在集合內刪除一個或者多個元素 SERM key member [member ...]

獲取集合內所有元素 SMEMBERS key

查看集合內是否有該元素 SISMEMBER key member

差級運算 SDIFF key [key ...] 例如 {1,2,3} - {2,3,4} = {1} 

交集運算 SINTER key [key ...] 例如 {1,2,3} - {2,3,4} = {2,3}

並集運算 SUNION key [key ...] 例如 {1,2,3} - {2,3,4} = {1,2,3,4}

獲取集合中的個數 SCARD key

10:有序集合

有序集合和集合相比
  - 有序集合(sorted set)增加了一個權重參數score。
有序集合和列表相比
  - 二者都是有序的,都可以獲得範圍元素。
  - 有序集合比列表更費內存
  - 有序集合是通過散列表和跳躍表實現的(這個目前不太懂)。
  - 列表中不能隨意調整某個元素的位置,但是有序集合可以。

應用場景: 比如要對一個學生的成績排序,那麽key就可以是學號,socore就可以是分數,那麽在一進入隊列時候,就已經進行了天然的排序。
還可以用在有權重的隊列上面,權重高的對列任務先執行。
添加一個有序元素 ZAAD key score member
獲得一個元素的分數 ZSCORE key score
獲得排序之後的集合 ZRANGE key start stop

2018/07/17 《Redis 入門指南 第二版》 學習筆記(一)