【Redis】Redis入门篇(1)
Redis入門篇(1):涉及到Redis概念、Redis下載安裝、命令行操作、Redis數據結構、持久化操作
Redis入門篇(2):了解使用Java客戶端操作Redis。Redis連接池、實際應用案例。
本文目錄
- 一.Redis概念
- 1.1 什么是NOSQL
- 1.1.1 NOSQL和關系型數據庫比較
- 1.1.2 非關系型數據庫的優勢
- 1.1.3 關系型數據庫的優勢
- 1.1.4 小結
- 1.1.5 主流的NOSQL產品
- 1.2 什么是Redis
- 1.2.1 Redis的應用場景
- 二.Redis下載安裝
- 三.Redis命令操作,Redis數據結構
- 3.1 redis的數據結構
- 3.2 字符串類型string
- 3.3 哈希類型 hash
- 3.4 列表類型 list
- 3.5 集合類型 set
- 3.6 有序集合類型 sorted set
- 3.7 通用命令
- 四.Redis持久化操作
- 4.1 Redis持久化是什么?
- 4.2 Redis持久化機制
- 1.RDB:默認方式,不需要進行配置,默認就使用這種機制
- 2.AOF:日志記錄的方式,可以記錄每一條命令的操作??梢悦恳淮蚊畈僮骱?#xff0c;持久化數據
一.Redis概念
Redis概念: Redis是一款高性能的NOSQL系列的非關系型數據庫。
了解redis前,先來理清一些概念。
1.1 什么是NOSQL
NoSQL(NoSQL = Not Only SQL),意即“不僅僅是SQL”,是一項全新的數據庫理念,泛指非關系型的數據庫。
百度百科:
- 隨著互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題。
- 而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NOSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。
web1.0網站,一般是靜態網站,用戶只是訪問網站,數據都是依靠工作人員來發布和維護的,不能很好的支持大數據存儲。
web2.0網站,純動態的網站,以用戶自己為中心。用戶可以發布一些自己的資源到網絡上,比如說抖音,用戶上傳自己的短視頻到平臺上。當好幾億的用戶上傳數據到服務器上,如果使用關系型數據庫,獲取、查詢用戶數據就會非常的慢。這就對數據庫大數據存儲要求非常高了。
1.1.1 NOSQL和關系型數據庫比較
關系型和非關系型數據庫比較圖:
關系型數據庫,像MySQL、Oracle…,特點:
- 1.數據之間有關聯關系
- 2.數據存儲在電腦硬盤的文件上
非關系型數據庫(NOSQL),像Redis、Hbase…,數據格式是“ key:value ”形式,特點:
- 1.數據之間沒有關聯關系
- 2.數據存儲在內存中
重點理解緩存的思想:
比如有需求,經常查詢一些不經常變化的數據,像用戶的賬號。僅僅只使用關系型數據庫,頻繁查詢獲取用戶的賬號是沒有必要的。并且降低系統性能,影響用戶體驗,因為操作關系型數據是非常耗時的,從硬盤中IO讀寫數據。
這時候,我們就可以利用緩存的思想解決這樣的問題。在內存中開辟一塊區域,稱為緩存,用戶獲取數據變成從緩存中獲取數據。如果緩存中沒有數據,就從數據庫中查詢獲取到數據,將數據存放到緩存中,再將數據返回給用戶;下次用戶再要查詢相同的數據的時候,緩存中有數據,就直接返回數據給用戶,不需要再和數據庫進行交互了,很好提升了整體性能。
非關系數據庫的數據特點存儲在內存中,所以NOSQL非常適合作為緩存。Redis一個非常重要的功能就是做緩存。
NOSQL和關系型數據庫比較
優點:
缺點:
1.1.2 非關系型數據庫的優勢
- 性能。NOSQL是基于鍵值對的,可以想象成表中的主鍵和值的對應關系,而且不需要經過SQL層的解析,所以性能非常高。
- 可擴展性。同樣也是因為基于鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。
1.1.3 關系型數據庫的優勢
- 復雜查詢。可以用SQL語句方便的在一個表以及多個表之間做非常復雜的數據查詢。
- 事務支持。使得對于安全性能很高的數據訪問要求得以實現。對于這兩類數據庫,對方的優勢就是自己的弱勢,反之亦然。
1.1.4 小結
關系型數據庫與NoSQL數據庫并非對立而是互補的關系,即通常情況下使用關系型數據庫,在適合使用NoSQL的時候使用NoSQL數據庫,讓NoSQL數據庫對關系型數據庫的不足進行彌補。
一般會將數據存儲在關系型數據庫中,在NoSQL數據庫中備份存儲關系型數據庫的數據。
1.1.5 主流的NOSQL產品
1.鍵值(Key-Value)存儲數據庫
- 相關產品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
- 典型應用: 內容緩存,主要用于處理大量數據的高訪問負載。
- 數據模型: 一系列鍵值對
- 優勢: 快速查詢
- 劣勢: 存儲的數據缺少結構化
2.列存儲數據庫
- 相關產品:Cassandra, HBase, Riak
- 典型應用: 分布式的文件系統
- 數據模型:以列簇式存儲,將同一列數據存在一起
- 優勢: 查找速度快,可擴展性強,更容易進行分布式擴展
- 劣勢: 功能相對局限
3.文檔型數據庫
- 相關產品:CouchDB、MongoDB
- 典型應用: Web應用(與Key-Value類似,Value是結構化的)
- 數據模型: 一系列鍵值對
- 優勢: 數據結構要求不嚴格
- 劣勢: 查詢性能不高,而且缺乏統一的查詢語法
4.圖形(Graph)數據庫
- 相關數據庫:Neo4J、InfoGrid、Infinite Graph
- 典型應用:社交網絡
- 數據模型:圖結構
- 優勢:利用圖結構相關算法。
- 劣勢:需要對整個圖做計算才能得出結果,不容易做分布式的集群方案。
知道了以上內容,再來看看Redis就比較清晰了。
1.2 什么是Redis
Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫,官方提供測試數據(50個并發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s )且Redis通過提供多種鍵值數據類型來適應不同場景下的存儲需求。
目前為止Redis支持的鍵值數據類型如下(重點):
? 1) 字符串類型 string
? 2) 哈希類型 hash
? 3) 列表類型 list
? 4) 集合類型 set
? 5) 有序集合類型 sortedset
1.2.1 Redis的應用場景
Redis在實際應用非常的廣發:
- 緩存(數據查詢、短連接、新聞內容、商品內容等等)
- 聊天室的在線好友列表
- 任務隊列。(秒殺、搶購、12306等等)
- 應用排行榜
- 網站訪問統計
- 數據過期處理(可以精確到毫秒
- 分布式集群架構中的session分離
二.Redis下載安裝
官網:https://redis.io,下載比較慢。
也可以在中文網下載,較快:http://www.redis.net.cn/,電腦操作系統對應的Redis版本下載,下載后是一個壓縮包。
壓縮包解壓后直接可以使用:
打開redis文件夾:
文件說明:
- redis.windows.conf:redis配置文件
- redis-cli.exe:redis的客戶端
- redis-server.exe:redis服務器端
三.Redis命令操作,Redis數據結構
使用Redis有兩種方式:
- 一種是通過redis命令行的方式操作;
- 另一種是通過Java代碼(或其它語言)的方式來操作redis,后面介紹。
操作redis最主要的就是數據的存儲和獲取了,那我們就需要了解redis的數據結構,redis的數據結構是學習redis非常重要的一塊。
3.1 redis的數據結構
redis存儲的是:"key,value"格式的數據,其中key都是字符串類型,value有5種不同的數據結構:
redis存儲數據可以看成是一個大的Map集合.
value的數據結構:
下面就使用命令行的形式操作這些數據結構。
3.2 字符串類型string
命令行指令:
先打開redis服務器端redis-server.exe,再打開redis的客戶端redis-cli.exe,再進行命令行操作
演示:
(integet) 1 :表示被操作影響的元素個數
(nil):表示不存在
3.3 哈希類型 hash
存儲的value,可以理解為map格式。命令行指令:
1.存儲: hset key field value
2.獲取:
- hget key field: 獲取指定的field對應的值
- hgetall key:獲取所有的field和value
3.刪除: hdel key field
演示:
3.4 列表類型 list
列表類型list:可以添加一個元素到列表的頭部(左邊)或者尾部(右邊),允許重復元素。命令行指令:
1.添加:
- lpush key value: 將元素加入列表左表
- rpush key value:將元素加入列表右邊
2.獲取:
- lrange key start end :范圍獲取
3.刪除:
- lpop key: 刪除列表最左邊的元素,并將元素返回
- rpop key: 刪除列表最右邊的元素,并將元素返回
演示:
lrange myList 0 -1:表示查詢myList列表的所有元素
注意:命令行指令不區分大小寫,數據的鍵值對區分大小寫。
3.5 集合類型 set
集合類型 set : 不允許重復元素。命令行指令:
1.存儲:sadd key value
2.獲取:
- smembers key:獲取set集合中所有元素
3.刪除:
- srem key value:刪除set集合中的某個元素
演示:
3.6 有序集合類型 sorted set
有序集合類型 sortedset:不允許重復元素,且元素有順序。每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
命令行指令:
1.存儲:zadd key score value
2.獲取:zrange key start end [withscores]
- zrange key 0 -1:獲取所有元素
- zrange key 0 -1 withscores:獲取所有元素以及每個元素關聯的分數。
3.刪除:zrem key value:刪除key中指定的value
演示:
3.7 通用命令
常見的redis命令行通用指令:
演示:
本文僅演示了常用的命令行指令,更多指令可以參考:Redis 教程 | 菜鳥教程
四.Redis持久化操作
4.1 Redis持久化是什么?
redis是一個內存數據庫,當redis服務器重啟,或者電腦重啟,數據就會丟失。要想不丟失,就需要對內存中的數據進行持久化操作,我們可以將Redis內存中的數據持久化保存到電腦硬盤的文件中,意外重啟后redis就會加載硬盤中的數據,確保數據不會丟失。
4.2 Redis持久化機制
redis持久化有兩種不同的機制:RDB和AOF;
1.RDB:默認方式,不需要進行配置,默認就使用這種機制
RDB機制是redis在一定的間隔時間中,檢測key的變化情況,然后持久化數據。推薦使用默認機制,該機制下對性能的影響比較低,比較少的IO操作。
RDB配置方式:
1.1 編輯redis.windwos.conf配置文件,找到文件中如下代碼
save 900 1 save 300 10 save 60 10000解釋一下:
# 如果900秒(15分鐘)后至少有1個key改變的話,就持久化一次 save 900 1 # 如果300秒(5分鐘)后至少有10個key改變的話,就持久化一次 save 300 10 # 如果60秒后至少有10000個key改變的話,就持久化一次 save 60 10000根據實際需求,修改相應的值后保存就可以了。配置成功還需要完成第二步。
1.2 重新啟動redis服務器,并指定配置文件名稱
打開控制臺黑窗口,進入redis的文件夾,為redis的服務器指定配置文件,指令為:
redis-server.exe redis.windows.conf到這RDB配置完成。redis每次持久化后會在redis文件夾下生成一個dump.rdb的持久化文件,重啟redis就會加載 .rdb 文件里面的數據。
2.AOF:日志記錄的方式,可以記錄每一條命令的操作??梢悦恳淮蚊畈僮骱?#xff0c;持久化數據
AOF機制,redis執行一次命令就會持久化一次。不推薦使用,對性能的影響比較大。
AOF配置方式:
2.1 編輯redis.windwos.conf配置文件,找到文件中如下代碼
appendonly no# appendfsync always appendfsync everysec # appendfsync no解釋一下:
appendonly no(關閉aof)--> appendonly yes (開啟aof)AOF機制默認關閉,no改為yse意味著開啟AOF機制。下面是一些AOF操作相關配置:
- appendfsync always : 每一次操作都進行持久化,性能不好。
- appendfsync everysec : 每隔一秒進行一次持久化,性能不好。
- appendfsync no : 不進行持久化
使用什么持久化操作,改變一下注釋即可。配置成功還需要完成第二步,參照RDB配置第二步。
到這AOF配置完成。redis每次持久化后會在redis文件夾下生成一個appendonly.aof的持久化文件,重啟redis就會加載 .aof 文件里面的數據。
總結:AOF持久化對數據庫性能影響比較大,會有頻繁的IO操作;而RDB機制則可能會丟失部分數據。所以Redis持久化并不能保證所有的數據都不會丟失,只能保證大部分數據不丟失。這樣的內存數據庫并不是絕對安全的,所以要想保證數據絕對安全,還是得依賴一些關系型數據庫。
以上就是Redis入門篇(1)的全部內容。Redis入門篇(2)重點實際應用中如何使用Redis。
推薦閱讀:
Redis入門篇(1).
Redis入門篇(2).
歡迎點贊評論,指出不足,筆者由衷感謝哦!~
總結
以上是生活随笔為你收集整理的【Redis】Redis入门篇(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黎想首次公开发布微信公众号运营的23条黄
- 下一篇: 学一点Redis基础