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: 即不進行持久化