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