天天看點

Redis複習筆記

好記性不如爛筆頭

Redis:是一款高性能的NOSQL系列的非關系型資料庫

概念:

  1. 什麼是redis
    1. Redis:REmote DIctionary Server(遠端字典伺服器)
    2. 是完全開源免費的,用C語言編寫的,遵守BSD協定,是一個高性能的(key/value)分布式記憶體資料庫,基于記憶體運作并支援持久化的NoSQL資料庫,是目前最熱門的NoSql資料庫之一,也被人們稱為資料結構伺服器。
    3. Redis 與其他 key - value 緩存産品有以下三個特點:
      • Redis支援資料的持久化,可以将記憶體中的資料保持在磁盤中,重新開機的時候可以再次加載進行使用;
      • Redis不僅僅支援簡單的key-value類型的資料,同時還提供list,set,zset,hash等資料結構的存儲;
      • Redis支援資料的備份,即master-slave模式的資料備份;
  2. redis的應用場景
    1. 緩存(資料查詢、短連接配接、新聞内容、商品内容等等)
    2. 聊天室的線上好友清單
    3. 任務隊列。(秒殺、搶購、12306等等)
    4. 應用排行榜
    5. 網站通路統計
    6. 資料過期處理(可以精确到毫秒)
    7. 分布式叢集架構中的session分離

下載下傳安裝

  • 官網:https://redis.io
  • 中文網:http://www.redis.net.cn/
  • 解壓直接可以使用:
    • redis.windows.conf:配置檔案
    • redis-cli.exe:redis的用戶端
    • redis-server.exe:redis伺服器端

啟動後基礎知識

  1. 單程序
    • 單程序模型來處理用戶端的請求。對讀寫等事件的響應是通過對epoll函數的包裝來做到的。Redis的實際處理速度完全依靠主程序的執行效率;
    • epoll是Linux核心為處理大批量檔案描述符而作了改進的epoll,是Linux下多路複用IO接口select/poll的增強版本,它能顯著提高程式在大量并發連接配接中隻有少量活躍的情況下的系統CPU使用率;
  2. redis資料庫的一些概念及操作
    • 預設16個資料庫,類似數組下表從零開始,初始預設使用零号庫;
    • 統一密碼管理,16個庫都是同樣密碼,要麼都OK要麼一個也連接配接不上,redis預設端口是6379;
    • select指令切換資料庫:

      select 0-15

    • dbsize

      :檢視目前資料庫的key的數量;
    • flushdb

      :清空目前庫;
    • flushall

      ;通殺全部庫;

Redis資料結構

redis存儲的是:key,value格式的資料,其中key都是字元串,value有5種不同的資料結構

1.字元串類型 string
  • string是redis最基本的類型,你可以了解成與Memcached一模一樣的類型,一個key對應一個value;
  • string類型是二進制安全的。意思是redis的string可以包含任何資料。如jpg圖檔或者序列化的對象 ;
  • string類型是Redis最基本的資料類型,一個redis中字元串value最多可以是512M;
2. 哈希類型 hash : (map格式)
  • redis的hash 是一個鍵值對集合;
  • redis hash是一個string類型的field和value的映射表,hash特别适合用于存儲對象;
  • 類似Java裡面的Map<String,Object>;

3.清單類型 list :(linkedlist格式。支援重複元素)

  redis 清單是簡單的字元串清單,按照插入順序排序。你可以添加一個元素導清單的頭部(左邊)或者尾部(右邊)。它的底層實際是個連結清單。

4. 集合類型 set : (不允許重複元素)

  redis的set是string類型的無序集合。它是通過HashTable實作的。

4. 有序集合類型 sortedset:(不允許重複元素,且元素有順序)
  • redis的sortedset和 set 一樣也是string類型元素的集合,且不允許重複的成員;
  • 不同的是每個元素都會關聯一個double類型的分數;
  • redis正是通過分數來為集合中的成員進行從小到大的排序。sortedset的成員是唯一的,但分數(score)卻可以重複;

常用指令操作

redis常見資料類型操作指令參考網址http://redisdoc.com/

  • 字元串類型 String

    1.

    SET key value

    (存儲:将字元串值 value 關聯到 key)

    2.

    GET key

    (擷取:傳回與鍵 key 相關聯的字元串值)

    3.

    DEL key

    (删除:删除給定的 key )

    4.

    APPEND key value

    ( APPEND 指令将把 value 追加到鍵 key 現有值的末尾,沒有 key 就自動添加)

    5.

    STRLEN key

    (傳回鍵 key 儲存的字元串值的長度)
  • 哈希類型 hash

    1.

    HSET key field value

    (存儲:将哈希表 hash 中域 field 的值設定為 value)

    2.

    HGET key field

    (擷取:擷取指定的field對應的值)

    3.

    HDEL key field

    (删除:删除哈希表 key 中的一個或多個指定域,不存在的域将被忽略)

    4.

    HMSET key field value [field value …]

    (同時将多個 field-value (域-值)對設定到哈希表 key 中)

    5.

    HMGET key field [field …]

    (傳回哈希表 key 中,一個或多個給定域的值)

    6.

    HGETALL key

    (傳回哈希表 key 中,所有的域和值)
  • 清單類型 list

    1.

    LPUSH key value

    (添加:将元素加入清單左邊

    表頭

    2.

    RPUSH key value

    (添加:将元素加入清單右邊

    表尾

    3.

    LRANGE key start stop

    (傳回清單 key 中指定區間内的元素,區間以偏移量 start 和 stop 指定)

    4.

    LPOP key

    (删除:删除清單最左邊的元素,并将元素傳回)

    5.

    RPOP key

    (删除:删除清單最右邊的元素,并将元素傳回)

    6.

    LINDEX key index

    (傳回清單 key 中,下标為 index的元素)
  • 集合類型 set

    1.

    SADD key member [member …]

    (存儲:将一個或多個 member 元素加入到集合 key 當中,已經存在于集合的 member元素将被忽略)

    2.

    SMEMBERS key

    (擷取:傳回集合 key 中的所有成員)

    3.

    SREM key member [member …]

    (移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略)

    4.

    SISMEMBER key member

    (判斷 member元素是否集合 key 的成員)
  • 有序集合類型 sortedset

    1.

    ZADD key score member [[score member] [score member] …]

    (儲存:将一個或多個 member 元素及其 score 值加入到有序集 key 當中)

    2.

    ZRANGE key start stop [WITHSCORES]

    (擷取:傳回有序集 key 中,指定區間内的成員,其中成員的位置按

    score

    值遞增(從小到大)來排列)

    3.

    ZREM key member [member …]

    (删除:移除有序集 key 中的一個或多個成員,不存在的成員将被忽略)
  • redis 鍵(key) --常用指令介紹

    1.

    keys *

    :檢視所有 key ;

    2.

    exists key的名字

    :判斷某個 key 是否存在;

    3.

    move key dbID(0-15)

    : 目前庫就沒有了,被移除了;

    4.

    expire key 秒鐘

    : 為給定的 key 設定過期時間;

    5.

    ttl key

    : 檢視還有多少秒過期,-1表示永不過期,-2表示已過期;

    6.

    type key

    : 檢視你的 key 是什麼類型;

持久化

redis是一個記憶體資料庫,當redis伺服器重新開機,擷取電腦重新開機,資料會丢失,我們可以将redis記憶體中的資料持久化儲存到硬碟的檔案中。

  • RDB

    (Redis DataBase)

    在指定的時間間隔内将記憶體中的資料集快照寫入磁盤,也就是行話講的Snapshot快照,它恢複時是将快照檔案直接讀到記憶體裡;

    RDB儲存的是dump.rdb檔案;

    Redis會單獨建立(

    fork

    )一個子程序來進行持久化,會先将資料寫入到一個臨時檔案中,待持久化過程都結束了,再用這個臨時檔案替換上次持久化好的檔案。整個過程中,主程序是不進行任何IO操作的,這就確定了極高的性能如果需要進行大規模資料的恢複,且對于資料恢複的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點是最後一次持久化後的資料可能丢失;

    fork:複制一個與目前程序一樣的程序。新程序的所有資料(變量、環境變量、程式計數器等)數值都和原程序一緻,但是是一個全新的程序,并作為原程序的子程序;

  1. 在一定的間隔時間中,檢測key的變化情況,然後持久化資料
    1. 編輯redis.windwos.conf檔案
      #   after 900 sec (15 min) if at least 1 key changed
       		save 900 1
       		#   after 300 sec (5 min) if at least 10 keys changed
       		save 300 10
       		#   after 60 sec if at least 10000 keys changed
       		save 60 10000
                 
    2. 重新啟動redis伺服器,并指定配置檔案名稱
D:\redis\windows-64\redis-2.8.9>redis-server.exe redis.windows.conf	
           
  • AOF

    (Append Only File)

    以日志的形式來記錄每個寫操作,将Redis執行過的所有寫指令記錄下來(讀操作不記錄),隻許追加檔案但不可以改寫檔案,redis啟動之初會讀取該檔案重新建構資料,換言之,redis重新開機的話就根據日志檔案的内容将寫指令從前到後執行一次以完成資料的恢複工作(AOF儲存的是appendonly.aof檔案);
  • 編輯redis.windwos.conf檔案

    appendonly no(關閉aof)

    -->

    appendonly yes (開啟aof)

    # appendfsync always

    : 每一次操作都進行持久化

    appendfsync everysec

    : 每隔一秒進行一次持久化

    # appendfsync no

    : 不進行持久化