一、從NoSQL說起
NoSQL 是 Not only SQL 的縮寫,大意為"不只是SQL",說明這項技術是傳統關系型數據庫的補充而非替代。在整個NoSQL技術棧中 MemCache、Redis、MongoDB被稱為NoSQL的三劍客。那么時代為什么要NoSQL數據庫呢?我們來做個對比:
關系型數據庫 | NoSQL數據庫 | |
---|---|---|
數據庫存儲位置 | 硬盤 | 內存 |
數據結構 | 高度組織化結構數據 | 沒有預定義的模式 |
數據操作方式 | SQL | 所有數據都是鍵值對,沒有聲明性查詢語言 |
事務控制 | 嚴格的基礎事務ACID原則 | CAP定理 |
所以NoSQL數據庫的最大優勢體現為:高性能、高可用性和可伸縮性
二、Redis(remote dictionary server)簡介
Redis英文介紹:
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
Redis中文介紹:
REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統。Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日志型、Key-Value數據庫,並提供多種語言的API。
通常被稱為數據結構服務器,因為值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
三、Redis安裝
1、下載安裝
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make
然后到src目錄下運行redis-server
運行結果如下
執行后連接
發送一個ping會返回一個pong
四、Redis常用數據結構
1、總體結構
key | value |
---|---|
string | |
list | |
set | |
hash | |
zset |
Redis中的數據,總體上是鍵值對,不同數據類型指的是鍵值對中值的類型。
2、string類型
Redis中最基本的類型,它是key對應的一個單一制。二進制安全,不必擔心由於編碼等問題導致二進制數據變化。所以redis的string可以包含任何數據,比如jpg圖片或者序列化對象。Redis中一個字符串值的最大容量是512M
3、List類型
Redis 列表是最簡單的字符串列表,按照插入順序排序,你可以添加一個元素到列表的頭部或者尾部。說明它的底層是基於鏈表實現的,所以它操作頭尾效率高,中間效率低。
4、set類型
Redis內set是string類的無序集合,它是基於哈希表實現的。
5、hash類型
本身就是一個鍵值對集合。可以當作Java中的Map<String,Map<key,value>>對待
6、zset
zset和set一樣也是string類型元素的集合,且不允許重復的成員。不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。Zset的成員是唯一的,分數可以重復。
五、Redis命令
1.基本操作
1.切換數據庫
redis默認有16個數據庫
使用select進行切換,數據庫索引從0開始
2.查看數據庫
2.KEY操作
KEYS PATTERN | 匹配字符 |
---|
TYPE KEY | 返回KEY對應的值的類型 |
---|
MOVE KEY DB | 把一組鍵值數據庫移動到另一個數據庫 |
---|
DEL KEY [KEY...] | 指定至少一個Key然后刪除 |
---|
其他命令如下
命令 | 用途 |
---|---|
EXISTS KEY | 檢查指定的KEY是否存在。指定一個KEY時,存在返回1,不存在返回0.可以指定多數量 |
RANDOMKEY | 在現有的KEY中隨機返回一個 |
RENAME KEY NEW KEY | 只有在NEWKEY不存在時執行成功,否則失敗 |
TIME | 返回UNIX時間戳 |
TTL KEY | 以秒為單位查看KEY還能存在多久 |
EXPIRE KEY SECONDS | 給一個KEY設置在SECONDS秒后過期,過期會被Redis移除 |
PTTL KEY | 毫秒看存在多久 |
PERSIST KEY | 移除過期時間,變成永久KEY |
3、String等其他操作請轉至菜鳥教程這里不做贅述
https://www.runoob.com/redis/redis-strings.html
六、Redis持久化機制
Redis工作時數據都存儲在內存中,萬一服務器斷電,則所有數據都會丟失,針對這種情況,Redis采用持久化機制來增強數據安全性。
1、RDB
(1)機制描述
每隔一定時間把內存中的數據作為一個快照保存到硬盤上的文件中,Redis默認開啟RDB機制。
(2)觸發時機
【1】基於默認配置
save 900 1
save 300 10
save 60 10000
含義
配置 | 含義 |
---|---|
save 900 1 | 900秒內至少有一次修改則出發保存操作 |
save 300 10 | 300秒內至少有10次修改保存操作 |
save 60 10000 | 60秒內至少有10000次修改保存操作 |
【2】使用保存命令
save
bgsave
【3】使用flushall命令
全部清空
【4】服務器關閉
如果執行shutdown命令讓Redis正常退出,那么Redis就會執行一次持久化保存。
(3)相關配置
配置項 | 取值 | 作用 |
---|---|---|
save | "" | 禁用RDB機制 |
dbfilename | 文件名,例如:dump.rdb | 設置RDB機制下,數據存儲文件的文件名 |
dir | Redis工作目錄路徑 | 指定存放持久化文件的目錄的路徑。注意:這里指定的必須是目錄不能是文件名 |
2、AOF
(1)機制描述
根據配置文件中指定的策略,把生成數據的命令保存到硬盤上的文件中。
(2)AOF基本配置
配置項 | 取值 | 作用 |
---|---|---|
appendonly | yes | 啟用AOF持久化機制 |
no | 禁用AOF持久化機制[默認值] | |
appendfilename | "文件名" | AOF持久化文件名 |
dir | Redis工作目錄路徑 | 指定存放持久化文件的目錄的路徑。注意:這里指定的必須時目錄不能說文件名 |
appendfsync | always | 每一次數據修改后都將執行文件寫入操作,緩慢但是最安全 |
everysec | 每秒執行一次寫入操作,折中。 | |
no | 由操作系統在適當時候執行寫入操作,最快 |
(3) AOF重寫
對比下面倆組命令
AOF重寫前 | AOF重寫后 |
---|---|
set count 1 | set count4 |