redis

redis的介紹

先了解背景: 如今是web2.0時代(不懂的自己百度查), 所以數據的修改頻率極其的高, 傳統的關係型數據庫對這種問題也束手無策, 因此NOSQL就出來了, 而redis就是一款高性能的NOSQL.

因爲NOSQL數據的修改是在內存中而不是在硬盤上, 所以NOSQL相比於關係型數據庫來說, 數據修改得更快, 性能更高, 但只適合儲存少量數據, 不適合儲存大量數據.

所以項目開發一般將NOSQL和關係型數據庫結合使用, NOSQL存儲易變的少量的數據, 而不易變的大型的數據交給關係型數據庫解決. (後端獲取數據時, 會先到NOSQL的內存中去獲取, 獲取不到纔到關係型數據庫去獲取)

當然這些易變的數據不能一直放在內存, 如果服務器炸了就真的炸了, 所以要將這些數據定期的存到硬盤上, 這種技術即爲數據的持久化技術.

redis的應用場景 (上面說的易變數據的例子)

  • 緩存 (數據查詢,短連接,新聞內容,商品內容)
  • 聊天室的在線好友列表
  • 任務隊列 (秒殺,搶購,12306等)
  • 排行榜
  • 網站訪問統計
  • 數據過期處理 (可以精確到毫秒)
  • 分佈式集羣架構中的session分離

redis的使用

  • redis.windows.conf文件是配置文件
  • redis-server.exe是開啓服務
  • redis-cli.exe是開啓用戶命令行窗口, 用於redis的增刪改查
  • dump.rdb是redis用RDB方式持久化在硬盤上的數據庫文件
    在這裏插入圖片描述

數據結構

鍵值對, 下面幾種是值的數據類型

  • string
  • hashMap
  • list
  • set (無序,元素不能重複)
  • sortedSet

命令操作

  • 通用命令
    • keys * 獲取所有的鍵 (*可以換成正則表達式)
    • type key, 如 type username 結果爲 string, 獲取key的類型
  • string類型
    • 存儲: set key value, 如 set username juln
    • 獲取: get key, 如 get username
    • 刪除: del key
  • hashMap類型
    • 存儲(無hashMap則創建): hset key field value, 如 hset user username juln, hset user password 123
    • 獲取單條: hget key field
    • 獲取全部: hgetall key
    • 刪除單條: hdel key field
  • list類型
    • 從list左邊插入元素(無list則創建): lpush key item, 如 lpush users juln
    • 從list右邊插入元素: rpush key item
    • 獲取元素: lrange key start end, 如 lrange users 0 -1
    • 從左邊刪除元素, 並返回該元素的值: lpop key, 如 lpop users
    • 從右邊刪除元素, 並返回該元素的值: rpop key
  • set類型
    • 存儲單個元素(無set則創建): sadd key item, 如 sadd users juln
    • 存儲多個元素(無set則創建): sadd key item1 item2 item3 …, 如 sadd users juln efef shuaige
    • 獲取所有元素: smembers key, 如 smembers users
    • 刪除單個元素: srem key item, 如 srem users juln
  • sortedSet類型 (按score的大小來排序)
    • 存儲(無sortedSet則創建): zadd key score item, 如 zadd users 100 juln
    • 修改排序: 比如 已經運行過 zadd users 100 juln, 再運行 zadd users 0 juln 就可以修改排序
    • 獲取: zrange key start end, 如 zrange users 0 -1
    • 連同score一起獲取: zrange key start end withscores, 如 zrange users 0 -1 withscores
    • 刪除: zrem key item, 如 zrem users juln

redis的持久化機制

  • RDB持久化方式 (redis的默認方式)

    • 在一定的間隔時間中, 檢測key的變化情況, 然後持久化數據
    • RDB持久化後的文件名後綴爲 .rdb
    • 下圖的意思是: 若900ms內有1條數據被修改, 則持久化一次; 若300ms內有10條數據被修改, 則持久化一次; 若60ms內有10000條數據被修改, 則持久化一次. (修改完配置之後, 不能直接redis-server.exe, 必須在cmd中執行 redis-server.exe redis.windows.conf才能生效)在這裏插入圖片描述
  • AOF持久化方式

    • 日誌記錄的方式, 可以記錄每條命令的操作. 命令一執行就持久化數據
    • AOF持久化後的文件名後綴爲 .aof
    • 將下圖的no改成yes, 即可開啓AOF模式
      在這裏插入圖片描述
      下圖爲AOF模式的三種選擇
      always: 即每次操作完數據都持久化
      everysec: 開啓AOF後默認爲everysec, 每隔一秒進行一次持久化
      no: 即不進行持久化
      在這裏插入圖片描述