“在那一刻,我意識到,我必須選擇,要麼對一切屈服,得過且過地生活,要麼就得努力,争取餅上夢想的生活。”你好,我是夢陽辰。期待與你相遇!
文章目錄
- 01.概述
- 02.redis的下載下傳與安裝
- 03.redis的使用
-
- 指令操作redis
- 04.持久化
- 05.Jedis
- 06.Jedis連接配接池
01.概述
redis為非關系型資料庫
redis是一款高性能的NOSQL系列的非關系型資料庫。
redis采用緩存思想,資料存儲在記憶體,解決了通路速度慢的問題。
詳解:
1.1.什麼是NOSQL
NoSQL(NoSQL = Not Only SQL),意即“不僅僅是SQL”,是一項全新的資料庫理念,泛指非關系型的資料庫。
随着網際網路web2.0網站的興起,傳統的關系資料庫在應付web2.0網站,特别是超大規模和高并發的SNS類型的web2.0純動态網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的資料庫則由于其本身的特點得到了非常迅速的發展。NoSQL資料庫的産生就是為了解決大規模資料集合多重資料種類帶來的挑戰,尤其是大資料應用難題。
1.1.1. NOSQL和關系型資料庫比較
優點:
1)成本:nosql資料庫簡單易部署,基本都是開源軟體,不需要像使用oracle那樣花費大量成本購買使用,相比關系型資料庫價格便宜。
2)查詢速度:nosql資料庫将資料存儲于緩存之中,關系型資料庫将資料存儲在硬碟中,自然查詢速度遠不及nosql資料庫。
3)存儲資料的格式:nosql的存儲格式是key,value形式、文檔形式、圖檔形式等等,是以可以存儲基礎類型以及對象或者是集合等各種格式,而資料庫則隻支援基礎類型。
4)擴充性:關系型資料庫有類似join這樣的多表查詢機制的限制導緻擴充很艱難。
缺點:
1)維護的工具和資料有限,因為nosql是屬于新的技術,不能和關系型資料庫10幾年的技術同日而語。
2)不提供對sql的支援,如果不支援sql這樣的工業标準,将産生一定使用者的學習和使用成本。
3)不提供關系型資料庫對事務的處理。
1.1.2. 非關系型資料庫的優勢:
1)性能NOSQL是基于鍵值對的,可以想象成表中的主鍵和值的對應關系,而且不需要經過SQL層的解析,是以性能非常高。
2)可擴充性同樣也是因為基于鍵值對,資料之間沒有耦合性,是以非常容易水準擴充。
1.1.3. 關系型資料庫的優勢:
1)複雜查詢可以用SQL語句友善的在一個表以及多個表之間做非常複雜的資料查詢。
2)事務支援使得對于安全性能很高的資料通路要求得以實作。對于這兩類資料庫,對方的優勢就是自己的弱勢,反之亦然。
1.1.4. 總結
關系型資料庫與NoSQL資料庫并非對立而是互補的關系,即通常情況下使用關系型資料庫,在适合使用NoSQL的時候使用NoSQL資料庫,讓NoSQL資料庫對關系型資料庫的不足進行彌補。
一般會将資料存儲在關系型資料庫中,在nosql資料庫中備份存儲關系型資料庫的資料
1.2.主流的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
典型應用:社交網絡
資料模型:圖結構
優勢:利用圖結構相關算法。
劣勢:需要對整個圖做計算才能得出結果,不容易做分布式的叢集方案。
1.3 什麼是Redis
Redis是用C語言開發的一個開源的高性能鍵值對(key-value)資料庫,官方提供測試資料,50個并發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s ,且Redis通過提供多種鍵值資料類型來适應不同場景下的存儲需求,目前為止Redis支援的鍵值資料類型如下:
- 字元串類型 string
- 哈希類型 hash
- 清單類型 list
- 集合類型 set
- 有序集合類型 sortedset
1.3.1 redis的應用場景
• 緩存(資料查詢、短連接配接、新聞内容、商品内容等等)
• 聊天室的線上好友清單
• 任務隊列。(秒殺、搶購、12306等等)
• 應用排行榜
• 網站通路統計
• 資料過期處理(可以精确到毫秒
• 分布式叢集架構中的session分離
02.redis的下載下傳與安裝
官網:https://redis.io
中文網:http://www.redis.net.cn/
解壓直接可以使用。
redis.windows.conf:配置檔案
redis.cli.exe :redis的用戶端
redis-server.exe:redis伺服器端
學習用戶端和伺服器端都在本機。
03.redis的使用
指令操作redis
1.redis的資料結構:
redis存儲的是:key,value格式的資料(鍵值對)。
其中key都是字元串,value有5種不同的資料結構。
value的資料結構:
1)字元串類型string:
2)哈希類型hash:map格式
3)清單類型list:linkedlist格式
4)集合類型set:hashset格式
5) 有序集合類型sortedset
字元串類型:string
1.存儲:set key value
2.擷取:get key
3.删除:del key
哈希類型hash
1.存儲:hset key field value
2.擷取:hget key field value
擷取所有:hgetall
3.删除:del key field
清單類型list:
可以添加一個元素到清單的頭部(左邊)或者尾部(右邊)。
1.頭部添加:lpush key value
2.尾部添加:rpush key value
3.擷取:
lrange key start end:範圍擷取。
4.删除:
lpop key:删除清單最左邊的元素,并将元素傳回。
rpop key:删除清單最右邊的元素,并将元素傳回。
集合類型set:
不允許重複元素
1.存儲:sadd key value
2.擷取:smembers key:擷取set集合中所有的元素。
3.删除:srem key value:删除set集合中某一個元素。
有序集合類型:sortset
不允許重複元素,且元素有順序
1.存儲:zadd key score value:
2.擷取:zrange key start end
3.删除:zrem key value
從小到大排。
通用指令:
keys *:查詢所有的鍵。
type key:擷取鍵對應的value類型。
del key :删除指定的key value
04.持久化
1.redis是一個記憶體資料庫,當redis伺服器重新開機,擷取電腦重新開機,資料會丢失,我們可以将redis記憶體中的資料持久化儲存到硬碟檔案中。
2.redis持久化機制:
1.RDB:預設方式,不需要進行配置,預設就使用這種機制。
編輯redis.windows.conf檔案
#· after 900 sec (15 min) if at least 1 key changed
save 900 1
# after 300 sec (5 min) if at least 10 keys changed
save 300 10
# after 60 sec if at least 10000 keys changed
save 60 10000
重新開機redis伺服器,并指定配置檔案名稱。
....>redis-sever.exe redis.windows.conf
AOF:日志記錄的方式,可以記錄每一條指令的操作。可以每一次指令操作後,持久化資料。
編輯redis.windows.conf檔案
預設為no,改為yes
# appendfsync always:每一次操作都進行持久化
appendfsync everysec:每隔一秒進行一次持久化
# appendfsync no:不進行持久化
重新開機redis伺服器,并指定配置檔案名稱。
....>redis-sever.exe redis.windows.conf
05.Jedis
Jedis:是一款java操作redis資料庫的工具。類似于jdbc。
1.下載下傳jedis的jar包。
commons-pool2-2.3.jar
jedis-2.7.0jar
2.使用
導包
Jedis操作各種redis中的資料結構。
string
hash
list
set
sortedset
06.Jedis連接配接池
JedisPool自帶的
使用
1.建立JedisPool連接配接池對象
2.調用方法getResource()方法擷取Jedis連接配接。
Jedis工具類:
加載配置檔案配置連接配接池的參數
提供擷取連接配接的方法
案例:
今天是2020最後一天,想了一下,就不将這篇文章留到2021了,晚上被一個小問題搞了,看來它要被我搞了。2020立的flag實作了一部分,比如部落格保持更新。2021希望自己變得更好,希望世界變得更好,加油!