課件7-13基礎課程redis數據庫_第1頁
課件7-13基礎課程redis數據庫_第2頁
課件7-13基礎課程redis數據庫_第3頁
課件7-13基礎課程redis數據庫_第4頁
課件7-13基礎課程redis數據庫_第5頁
免費預覽已結束,剩余14頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、NOSQL數據庫-Redis學習目標:能夠理解nosql的概念能夠說出redis的常用數據類型能夠使用redis的string操作命令能夠使用redis的hash操作命令能夠使用redis的list操作命令能夠使用redis的set操作命令能夠說出redis的兩種持久化機制能夠使用jedis對redis進行操作第1章 NOSQL概述1.1NOSQLNoSQL(NoSQL = Not Only SQL),意即“不僅僅是SQL”,是一項全新的數據庫理念,泛指非關系型的數據庫。1.2 為什么需要NOSQL隨著互聯網的高速崛起,的用戶群的增加,量的上升,傳統數據庫上都開始出現了性能瓶頸,web程序不再

2、僅僅專注在功能上,同時也在追求性能。所以NOSQL數據庫應運而上,具體表現為對如下三高問題的解決:High performance - 對數據庫高并發讀寫的需求web2.0要根據用戶個性化信息來實時生成動態頁面和提供動態信息,所以基本上無法使用動態頁面靜態化技術,因此數據庫并發負載非常高,往往要達到每秒上萬次讀寫請求。關系數據庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬盤IO就已經無法承受了。其實對于普通的在對高并發寫請求的需求,例如此這是一個相當普遍的需求。的實時統計用戶狀態,熱門帖子的點擊次數,投票計數等,因Huge Storage - 對海量數據的高效率和的需求

3、類似,Friendfeed這樣的SNS,每天用戶產生海量的用戶動態,以Friendfeed為例,一個月就達到了2.5億條用戶動態,對于關系數據庫來說,在一張2.5億條的表里面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web系數據庫也很難應付。的用戶登錄系統,例如騰訊,盛大,動輒數以億計的帳號,關High Scalability & High Availability- 對數據庫的高可擴展性和高可用在基于web的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和量與日俱增的時候,你的數據庫卻沒有辦法像web server和app server那樣簡單的通過添加的硬件和服

4、務節點來擴展性能和負載能力。對于很多需要提供24小時不間斷服務的來說,對數據庫系統進行升級和擴展是非常痛苦的事情,往往需要停機和數據遷移,為什么數據庫不能通過不斷的添加服務器節點來實現擴展呢?1.3 主流的NOSQL產品鍵值(Key-Value)數據庫相關產品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB典型應用: 內容緩存,主要用于處理大量數據的高數據模型: 一系列鍵值對優勢: 快速查詢負載。劣勢:列的數據缺少結構化數據庫相關產品:Cassandra, HBase, Riak典型應用:分布式的文件系統數據模型:以列簇式,將同一列數據存在一

5、起優勢:查找速度快,可擴展性強,更容易進行分布式擴展劣勢:功能相對局限文檔型數據庫相關產品:CouchDB、MongoDB典型應用:Web應用(與Key-Value類似,Value是結構化的)數據模型: 一系列鍵值對優勢:數據結構要求不嚴格劣勢: 查詢性能不高,而且缺乏圖形(Graph)數據庫的查詢語法相關數據庫:Neo4J、InfoGrid、Innite Graph典型應用:社交網絡數據模型:圖結構優勢:利用圖結構相關算法。劣勢:需要對整個圖做計算才能得出結果,不容易做分布式的集群方案。1.4 NOSQL的特點在大數據存取上具備關系型數據庫無法比擬的性能優勢,例如:易擴展NoSQL數據庫種類

6、繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。大數據量,高性能NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益于它的無關系性,數據庫的結構簡單。靈活的數據模型NoSQL無需事先為要的數據建立字段,隨時可以自定義的數據格式。而在關系數據庫里,增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢。這點在大數據量的Web2.0時代尤其明顯。高可用NoSQL在不太影響性能的情況,就可以方便的實現高可用的架構。比如Cassandra,HBase模型,通過模型

7、也能實現高可用。第2章 Redis概述2.1RedisRedis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫,提供測試數據,50個并發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s ,且Redis通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前為止Redis支持的鍵值數據類型如下:字符串類型 string散列類型 hash列表類型 list集合類型 set有序集合類型 sortedset2.2 redis的應用場景緩存(數據查詢、短連接、內容、商品內容等等)聊天室的好友列表任務隊列。(秒殺、搶購、12306等等)應用榜 統計數據過

8、期處理(可以精確到毫秒分布式集群架構中的ses分離第3章 window版Redis的安裝與使用3.1 windows版Redis的提倡使用Linux版的Redis,所以官網值提供了Linux版的Redis,可以從上window版的Redis,具體官網地址如下:地址:地址:/MSOpenTech/redis/tags在今天的課程資料中提供的!完畢的window版本的Redis:3.2 window版Redis的目錄結構解壓Redis壓縮包后,見到如下目錄機構:3.3 window版Redis的安裝與啟動3.3.1 window版Redis的安裝目錄或文件作用redis-benark性能測試工具r

9、edis-check-aofAOF文件修復工具redis-check-dumpRDB文件檢查工具(快照持久化文件)redis-cli命令行客戶端redis-serverredis服務器啟動命令redis.windows.confredis配置文件window版的安裝及其簡單,解壓Redis壓縮包完成即安裝完畢3.3.2 window版Redis的啟動與關閉雙擊Redis目錄中redis-server.exe可以啟動redis服務,Redis服務占用的端口是6379關閉Redis的控制臺窗口就可以關閉Redis服務3.4 window版Redis的使用雙擊Redis目錄中redis-cxe可以啟

10、動redis客戶端3.5 Windows服務安裝windows服務: redis-server.exe -service-install redis.windows.conf -loglevel ver卸載windows服務: redis-server -service-uninstall第4章 Redis的數據類型e4.1 Redis的5種數據類型redis是一種高級的key-value的系統,其中value支持五種數據類型:字符串(String)哈希(hash)字符串列表(list)字符串集合(set)有序字符串集合(sorted set)關于key的定義,注意如下幾點:key不要太長,最

11、好不要操作1024個字節,這不僅會消耗內存還會降低查找效率 key不要太短,如果太短會降低key的可讀性在項目中,key最好有一個4.2 字符串類型string名規范4.2.1 字符串類型string概述字符串類型是Redis中最為基礎的數據類型,它在Redis中是二進制安全的,這便意味著該類型存入和獲取的數據相同。在Redis中字符串類型的Value最多可以容納的數據長度是512M。4.2.2 字符串類型string常用命令set key value設定key持有指定的字符串value,如果該key存在則進行覆蓋操作。總是返回”OK”127.0.0.1:6379 set company OK

12、127.0.0.1:6379get key獲取key的value。如果與該key關聯的value不是String類型,redis將返回錯誤信息,因為get命令只能用于獲取String value;如果該key不存在,返回(nil)。127.0.0.1:6379 set name OK127.0.0.1:6379 get namedel key刪除指定key127.0.0.1:6379 del name(eger) 1127.0.0.1:6379 get name(nil)incr命令 decr命令自增自減incrby key step 自增步數decrby key step 自減步數4.3 哈

13、希類型hash4.3.1 哈希類型hash概述Redis中的Hash類型可以看成具有String Key和String Value的map容器。所以該類型非常適合于值對象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么該類型的數據也將僅占用很少的磁盤空間。每一個Hash可以個鍵值對。4.3.2 哈希類型hash常用命令hset key eld value為指定的key設定eld/value對(鍵值對)。127.0.0.1:6379 hset myhash username haohao(eger) 1127.0.0.1:6379hget key eld

14、返回指定的key中的eld的值127.0.0.1:6379 hset myhash username haohao(eger) 1127.0.0.1:6379 hget myhash usernamehaohaohdel key eld eld 可以刪除一個或多個字段,返回值是被刪除的字段個數4.4 列表類型list列表類型list概述在Redis中,List類型是按照 順序排序的字符串鏈表。和數據結構中的普通鏈表一樣, 可以在其頭部(left)和 尾部(right)添加新的元素。在 時,如果該鍵并不存在,Redis將為該鍵創建一個新的鏈表。與此相反,如果鏈 表中所有的元素均被移除,那么該鍵也

15、將會被從數據庫中刪除。List中可以包含的最大元素數量是列表類型listlpush key valuesvalue1 value2在指定的key所關聯的list的頭部 所有的values,如果該key不存在,該命令在 的之前創建一個與該key 關聯的空鏈表,之后再向該鏈表的頭部 數據。 成功,返回元素的個數。lpop key返回并彈出指定的key關聯的鏈表中的第一個元素,即頭部元素。如果該key不存在,返回nil;若key存在,則 返回鏈表的頭部元素。127.0.0.1:6379 lpush mylist a b c ( eger) 3127.0.0.1:6379 lpop mylist c1

16、27.0.0.1:6379 lpop mylist b127.0.0.1:6379 lpush mylist a b c ( eger) 3127.0.0.1:6379rpop key從尾部彈出元素。lrange key 索引 索引 遍歷該鍵的所有數據4.5 集合類型set集合類型set在Redis中, 可以將Set類型看作為沒有排序的字符集合,和List類型一樣, 也可以在該類型的數據值上執 行添加、刪除或判斷某一元素是否存在等操作。需 明的是,這些操作的時間復雜度為O(1),即常量時間內完成 次操作。Set可包含的最大元素數量是 ,和List類型不同的是,Set集合中不允許出現重復的元素。

17、集合類型set的常用命令sadd key valuesvalue1、value2向set中添加數據,如果該key的值已有則不會重復添加smembers key獲取set中所有的成員127.0.0.1:6379 sadd myset a b c ( eger) 3127.0.0.1:6379 LRANGE mylist 0 -11) d2) c3) b4) a5) 16) 27) 38) 4127.0.0.1:6379 lpush mylist a b c ( eger) 3127.0.0.1:6379 rpop mylist asrem key membersmember1、member2刪除

18、set中指定的成員4.6 有序集合類型sortset有序集合類型sortset在redis中,可以保證不重復的元素,仍然可以進行排序有序集合類型sortset常用命令zadd key valuesvalue1、value2向set中添加成員 127.0.0.1:6379 zadd 5 lisi 10 xiaoming 7 xiaohua 8 xiaogouzrem key value移除set中的成員 ZREM myset lisizrange key 索引 索引通過索引區間返回有序集 指定區間內的成員127.0.0.1:6379 zrange myset 0 -1lisixiaohuaxia

19、ogouxiaoming127.0.0.1:6379 srem myset a b ( eger) 2127.0.0.1:6379 smembers myset1) c127.0.0.1:6379127.0.0.1:6379 sadd myset a b c ( eger) 3127.0.0.1:6379 smembers myset1) c2) a3) b第5章 Redis的通用命令keys pattern獲取所有與pattern匹配的key,返回所有與該key匹配的keys。*表示任意一個或多個字符,?表示任意一個字 符del key1 key2刪除指定的keyexists key判斷該k

20、ey是否存在,1代表存在,0代表不存在127.0.0.1:6379 exists compnay( eger) 0127.0.0.1:6379 exists mylist( eger) 1127.0.0.1:6379type key獲取指定key的類型。該命令將以字符串的格式返回。 返回的字符串為string、list、se sh,如果key不 存在返回none第6章 Redis的持久化127.0.0.1:6379 type company string127.0.0.1:6379 type mylist list127.0.0.1:6379 type myset set127.0.0.1:6

21、379 type myhash hash127.0.0.1:6379127.0.0.1:6379 del company( eger) 1127.0.0.1:6379 keys *companymylistmyhashmyset6.1 Redis持久化概述Redis的高性能是由于其將所有數據都 在了內存中,為了使Redis在重啟之后仍能保證數據不丟失,需要將數據 從內存中同步到硬盤中,這一過程就是持久化。Redis支持兩種方式的持久化,一種是RDB方式,一種是AOF方式。可以單獨使用其中一種或將二者結合使用。RDB持久化(默認支持,無需配置)該機制是指在指定的時間間隔內將內存中的數據集快照寫入

22、磁盤。AOF持久化該機制將以日志的形式 服務器所處理的每一個寫操作,在Redis服務器啟動之初會 該文件來重新構建 數據庫,以保證啟動后數據庫中的數據是完整的。無持久化可以通過配置的方式禁用Redis服務器的持久化功能,這樣 就可以將Redis視為一個功能加強版的memcached了。redis可以同時使用RDB和AOF6.2 RDB持久化機制RDB持久化機制優點一旦采用該方式,那么你的整個Redis數據庫將只包含一個文件,這對于文件備份而言是非常完美的。比如, 你可能打算每個小時歸檔一次最近24小時的數據,同時還要每天歸檔一次最近30天的數據。通過這樣的備份 策略,一旦系統出現 性故障, 可

23、以非常容易的進行恢復。對于 恢復而言,RDB是非常不錯的選擇。因為 可以非常輕松的將一個單獨的文件壓縮后再轉移到其 它 介質上性能最大化。對于Redis的服務進程而言,在開始持久化時,它唯一需要做的只是fork(分叉)出子進程,之 后再由子進程完成這些持久化的工作,這樣就可以極大的避免服務進程執行IO操作了。相比于AOF機制,如果數據集很大,RDB的啟動效率會更高RDB持久化機制缺點如果你想保證數據的高可用性,即最大限度的避免數據丟失,那么RDB將不是一個很好的選擇。因為系 旦在定時持久化之前出現宕機現象,此前沒有來得及寫入磁盤的數據都將丟失。由于RDB是通過fork子進程來協助完成數據持久化

24、工作的,因此,如果當數據集較大時,可能會導致整個服務 器停止服務幾百毫秒,甚至是1秒鐘RDB持久化機制的配置在redis.windows.conf配置文件中有如下配置:# SNAPSHOTTING # # Save the DB on disk: # save # # # # # # # # # # # # # # #Will save the DB if both the given number of seconds and the givennumber of write operations against the DB occurred.he exelow the behaviour

25、 will be to save:after 900 sec (15 min) ifafter 300 sec (5 min) ifeast 1 key changedeast 10 keys changedafter 60 sec ifeast 10000 keys changedNote: you can disable saving at all commenting all the save lines.It is alsosible to remove all the previously configured savepolikes by adding a save directi

26、ve wisingle empty string argumenthe following exle:save save 900 1save 300 10save 60 10000其中,上面配置的是RDB方式數據持久化時機:6.3 AOF持久化機制6.3.1 AOF持久化機制優點該機制可以帶來更高的數據安全性,即數據持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事實上,每秒同步也是異步完成的,其效率也是非常高的,所差的是一旦系統出現宕機現象,那么這一秒鐘之內修改的數據將會丟失。而每修改同步,可以將其視為同步持久化,即每次發生的數據變化都會被立即能正確的理解它。到磁盤中

27、。可以預見,這種方式在效率上是最低的。至于無同步,無需多言,大家都由于該機制對日志文件的寫入操作采用的是append模式,因此在寫入過程中即使出現宕機現象,也不會破壞日志文件中已經存在的內容。然而如果本次操作只是寫入了一半數據就出現了系統問題,不用擔心,在Redis下一次啟動之前,可以通過redis-check-aof工具來幫助解決數據一致性。如果日志過大,Redis可以自動啟用rewrite機制。即Redis以append模式不斷的將修改數據寫入到老的磁盤文件中,同時Redis還會創建一個新的文件用于以更好的保證數據安全性。此期間有哪些修改命令被執行。因此在進行rewrite切換時可AOF包

28、含一個格式清晰、易于理解的日志文件用于數據的重建所有的修改操作。事實上,也可以通過該文件完成關鍵字時間(秒)key修改數量解釋save9001每900秒(15分鐘)至少有1個key發生變化,則dump內存快照save30010每300秒(5分鐘)至少有10個key發生變化,則dump內存快照save6010000每60秒(1分鐘)至少有10000個key發生變化,則dump內存快照AOF持久化機制缺點對于相同數量的數據集而言,AOF文件通常要大于RDB文件根據同步策略的不同,AOF在運行效率上往往會慢于RDB。總之,每秒同步策略的效率是比較高的,同步禁用策略的效率和RDB一樣高效。AOF持久化

29、機制配置開啟AOF持久化將appendonly修改為yes,開啟aof持久化機制,默認會在目錄下產生一個appendonly.aof文件6.3.3.2 AOF持久化時機# appendfsync always appendfsync everysec# appendfsync no上述配置為aof持久化的時機,解釋如下:關鍵字持久化時機解釋appendfsyncalways每執行一次更新命令,持久化一次appendfsynceverysec每秒鐘持久化一次appendfsyncno不持久化# APPEND ONLY MODE # By default Redis asynchronously

30、dumps the dataset on disk. This mode is # good enoughany applications, but an ie with the Redis pros or # aer outage may resulto a few minutes of writes lost (depending on # the configured save pos).# The Append Only File isternative persistence modet provides# much better durability. For instance u

31、sing the defauata fsync policy# (see laterhe config file) Redis can lose just ocond of writes in a # dramatic event like a servower outage, or a single write if something# wrong with the Redis pros itself happens, but the operating system is # still running correctly.# AOF and RDB persistence can be

32、 enabled at the same time without problems. # If the AOF is enabled on startup Redis will load the AOF,t is the file # with the better durability guarantees.# Please checkfor more information.appendonly no第7章 Jedis的基本使用7.1 jedis的介紹Redis不僅是使用命令來操作,現在基本上主流的語言都有客戶端支持,比如java、C、C#、C+、Node.js、Go等。 在一些Java

33、的客戶端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中使用Jedis和Redisson。 在企業中用的最多的就是Jedis,Jedis同樣也是托管在m/xetorthio/jedis。上,地址:使用Jedis操作redis需要導入jar包如下:7.2 jedis的基本操作7.2.1 jedis文檔地址:文檔API文檔查詢方式:7.2.2 jedis常用API7.2.3 jedis的基本操作方法解釋new Jedis(host, port)創建jedis對象,參數host是redis服務器地址,參數port是redis服務端口set(key,value)設置字符串類

34、型的數據get(key)獲得字符串類型的數據hset(key,eld,value)設置哈希類型的數據hget(key,eld)獲得哈希類型的數據lpush(key,values)設置列表類型的數據lpop(key)列表左面彈棧rpop(key)列表右面彈棧del(key)刪除指定的keyTestpublic void testJedisSingle()/1 設置ip地址和端口Jedis jedis = new Jedis(localhost, 6379);/2 設置數據jedis.set(name, itheima);/3 獲得數據String name = jedis.get(name);

35、System.out.prln(name);/4資源jedis.close();7.3 jedis連接池的使用7.3.1 jedis連接池的基本概念jedis連接資源的創建與銷毀是很消耗程序性能,所以jedis為提供了jedis的池化技術,jedisPool在創建時初始化一些連接資源到連接池中,使用jedis連接資源時不需要創建,而是從連接池中獲取一個資源進行redis的操作,使用完畢后,不需要銷毀該jedis連接資源,而是將該資源歸還給連接池,供其他請求使用。7.3.2 jedis連接池API查詢方式7.3.3 jedisPool的基本使用Testpublic void testJedisPool()/1 獲得連接池配置對象,設置配置項JedisPoolConfig config = new JedisPoolConfig();/ 1.1 最大連接數config.setMaxTotal(30);/ 1.2 最大空閑連接數7.4 案例-編寫jedis連接池工具類JedisUtils.javapackage com.itheima.utils;import java.util.ResourceBundle;import ts.jedis.Jedis; import ts.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論