Linux系統Redis筆記教學內容_第1頁
Linux系統Redis筆記教學內容_第2頁
Linux系統Redis筆記教學內容_第3頁
Linux系統Redis筆記教學內容_第4頁
Linux系統Redis筆記教學內容_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1課程安排1.介紹2.安裝啟動及關閉3.Jedis使用4.Redis各種數據類型的操作5.Redis持久化方案6.主從復制(了解)2課程目標掌握Redis的安裝掌握redis常用數據結構(string/hash/list/sortedset)的存取數據方法掌握Jedis的用法3redis介紹3.1什么是NoSQLNoSQL,泛指非關系型的數據庫,NoSQL即Not-Only SQL,它可以作為關系型數據庫的良好補充。隨著互聯網web2.0網站的興起,非關系型的數據庫現在成了一個極其熱門的新領域,非關系數據庫產品的發(fā)展非常迅速。而傳統的關系數據庫在應付web2.0網站,特別是超大規(guī)模和高并發(fā)的S

2、NS類型的web2.0純動態(tài)網站已經顯得力不從心,暴露了很多難以克服的問題,例如:1、High performance - 對數據庫高并發(fā)讀寫的需求web2.0網站要根據用戶個性化信息來實時生成動態(tài)頁面和提供動態(tài)信息,所以基本上無法使用動態(tài)頁面靜態(tài)化技術,因此數據庫并發(fā)負載非常高,往往要達到每秒上萬次讀寫請求。關系數據庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬盤IO就已經無法承受了。其實對于普通的BBS網站,往往也存在對高并發(fā)寫請求的需求,例如網站的實時統計在線用戶狀態(tài),記錄熱門帖子的點擊次數,投票計數等,因此這是一個相當普遍的需求。2、Huge Storage -

3、 對海量數據的高效率存儲和訪問的需求類似Facebook,twitter,Friendfeed這樣的SNS網站,每天用戶產生海量的用戶動態(tài),以Friendfeed為例,一個月就達到了2.5億條用戶動態(tài),對于關系數據庫來說,在一張2.5億條記錄的表里面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的用戶登錄系統,例如騰訊,盛大,動輒數以億計的帳號,關系數據庫也很難應付。3、High Scalability & High Availability- 對數據庫的高可擴展性和高可用性的需求在基于web的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時

4、候,你的數據庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節(jié)點來擴展性能和負載能力。對于很多需要提供24小時不間斷服務的網站來說,對數據庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移,為什么數據庫不能通過不斷的添加服務器節(jié)點來實現擴展呢?NoSQL數據庫的產生就是為了解決大規(guī)模數據集合多重數據種類帶來的挑戰(zhàn),尤其是大數據應用難題。一些主流的NOSQL產品:NoSQL數據庫的四大分類如下:鍵值(Key-Value)存儲數據庫相關產品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB典型

5、應用: 內容緩存,主要用于處理大量數據的高訪問負載。數據模型: 一系列鍵值對優(yōu)勢: 快速查詢劣勢: 存儲的數據缺少結構化列存儲數據庫相關產品:Cassandra, HBase, Riak典型應用:分布式的文件系統數據模型:以列簇式存儲,將同一列數據存在一起優(yōu)勢:查找速度快,可擴展性強,更容易進行分布式擴展劣勢:功能相對局限文檔型數據庫相關產品:CouchDB、MongoDB典型應用:Web應用(與Key-Value類似,Value是結構化的)數據模型: 一系列鍵值對優(yōu)勢:數據結構要求不嚴格劣勢: 查詢性能不高,而且缺乏統一的查詢語法圖形(Graph)數據庫相關數據庫:Neo4J、InfoGri

6、d、Infinite Graph典型應用:社交網絡數據模型:圖結構優(yōu)勢:利用圖結構相關算法。劣勢:需要對整個圖做計算才能得出結果,不容易做分布式的集群方案。3.2redis歷史發(fā)展2008年,意大利的一家創(chuàng)業(yè)公司Merzia推出了一款基于MySQL的網站實時統計系統LLOOGG,然而沒過多久該公司的創(chuàng)始人 Salvatore Sanfilippo便 對MySQL的性能感到失望,于是他決定親自為LLOOGG量身定做一個數據庫,并于2009年開發(fā)完成,這個數據庫就是Redis。 不過Salvatore Sanfilippo并不滿足只將Redis用于LLOOGG這一款產品,而是希望更多的人使用它,于

7、是在同一年Salvatore Sanfilippo將Redis開源發(fā)布,并開始和Redis的另一名主要的代碼貢獻者Pieter Noordhuis一起繼續(xù)著Redis的開發(fā),直到今天。Salvatore Sanfilippo自己也沒有想到,短短的幾年時間,Redis就擁有了龐大的用戶群體。Hacker News在2012年發(fā)布了一份數據庫的使用情況調查,結果顯示有近12%的公司在使用Redis。國內如新浪微博、街旁網、知乎網,國外如GitHub、Stack Overflow、Flickr等都是Redis的用戶。VMware公司從2010年開始贊助Redis的開發(fā), Salvatore Sanf

8、ilippo和Pieter Noordhuis也分別在3月和5月加入VMware,全職開發(fā)Redis。3.3什么是redisRedis是用C語言開發(fā)的一個開源的高性能鍵值對(key-value)數據庫。它通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前為止Redis支持的鍵值數據類型如下:字符串類型散列類型列表類型集合類型有序集合類型。3.4redis的應用場景緩存(數據查詢、短連接、新聞內容、商品內容等等)。(最多使用)分布式集群架構中的session分離。聊天室的在線好友列表。任務隊列。(秒殺、搶購、12306等等)應用排行榜。網站訪問統計。數據過期處理(可以精確到毫秒)客戶,訂單

9、,訂單明細,地址模型來對比下關系型數據和非關系型數據庫CAP:C強一致性 A高可用 P分布式容錯性CA 傳統Oracle數據庫AP 大多數網站架構的選擇CP Redis、MongodbBASE:基本可用軟狀態(tài)最終一致4測試環(huán)境redis需要安裝在linux服務器上運行測試,本教程使用 linux虛擬機5安裝運行redis5.1redis安裝環(huán)境redis是C語言開發(fā),建議在linux上運行,本教程使用Centos6.4作為安裝環(huán)境。安裝redis需要先將官網下載的源碼進行編譯,編譯依賴gcc環(huán)境,如果沒有gcc環(huán)境,需要安裝gcc:yum install gcc-c+5.2redis安裝版本說

10、明本教程使用redis3.0版本。3.0版本主要增加了redis集群功能。源碼下載從官網下載http:/download.redis.io/releases/redis-3.0.0.tar.gz將redis-3.0.0.tar.gz拷貝到/usr/local下解壓源碼tar -xzvf redis-3.0.0.tar.gz -C /usr/local/software進入解壓后的目錄進行編譯cd /usr/local/software/redis-3.0.0安裝到指定目錄,如 /usr/local/redismake install PREFIX=/usr/local/redis安裝目錄bin

11、下的文件列表redis3.0新增的redis-sentinel是redis集群管理工具可實現高可用。配置文件目錄:5.3redis啟動5.3.1前端模式啟動直接運行bin/redis-server將以前端模式啟動,前端模式啟動的缺點是ssh命令窗口關閉則redis-server程序結束,不推薦使用此方法。如下圖:5.3.2后端模式啟動修改redis.conf配置文件,daemonizeyes 以后端模式啟動。redis.conf是redis的配置文件,redis.conf在redis源碼目錄。把redis-3.0.0/redis.conf復制到/usr/local/redis/bin目錄下cp

12、 /usr/local/software/redis-3.0.0/redis.conf /usr/local/redis/bin修改redis.conf配置文件,daemonizeyes 以后端模式啟動。執(zhí)行如下命令啟動redis:cd /usr/local/redisrootlocalhost bin# ./redis-server redis.confredis默認使用6379端口。也可更改redis.conf文件,修改端口號:5.4redis停止強行終止Redis進程可能會導致redis持久化數據丟失。正確停止Redis的方式應該是向Redis發(fā)送SHUTDOWN命令,方法為:cd /u

13、sr/local/redis./bin/redis-cli shutdown5.5redis客戶端在redis的安裝目錄中有redis的客戶端,即redis-cli(Redis Command Line Interface),它是Redis自帶的基于命令行的Redis客戶端。5.5.1連接redis服務端執(zhí)行bin/redis-cli連接redis服務端:從上圖得知redis-cli默認連接本機的redis,本機的redis沒有啟動則報上圖中的錯誤。rootcom bin# ./redis-server redis.confrootcom bin# ./redis-cli:6379指定連接re

14、dis服務的ip和端口:5.5.2向redis服務端發(fā)送命令redis-cli連上redis服務后,可以在命令行發(fā)送命令。pingRedis提供了PING命令來測試客戶端與Redis的連接是否正常,如果連接正常會收到回復PONGset/get使用set和get可以向redis設置數據、獲取數據。del刪除指定key的內容。例如:del nameKeys *查看當前庫中所有的key值5.6redis多數據庫5.6.1redis實例一個redis進程就是一個redis實例,一臺服務器可以同時有多個redis實例,不同的redis實例提供不同的服務端口對外提供服務,每個redis實例之間互相影響。每

15、個redis實例都包括自己的數據庫,數據庫中可以存儲自己的數據。5.6.2多數據庫測試一個Redis實例可以包括多個數據庫,客戶端可以指定連接某個redis實例的哪個數據庫,就好比一個mysql中創(chuàng)建多個數據庫,客戶端連接時指定連接哪個數據庫。一個redis實例最多可提供16個數據庫,下標從0到15,客戶端默認連接第0號數據庫,也可以通過select選擇連接哪個數據庫,如下連接1號庫:在1號庫中查詢上節(jié)設置的數據,結果查詢不到:重新選擇第0號數據庫,查詢數據:如果選擇一個不存在數據庫則會報錯:注意:redis不支持修改數據庫的名稱,只能通過select 0、select 1.選擇數據庫。5.6

16、.3注意問題在0號數據庫存儲數據,在1號數據庫執(zhí)行清空數據命令卻把0號數據庫的數據給清空了:建議:不同的應用系統要使用不同的redis實例而不是使用同一個redis實例下的不同數據庫。6jedis6.1jedis介紹Redis不僅是使用命令來操作,現在基本上主流的語言都有客戶端支持,比如java、C、C#、C+、php、Node.js、Go等。在官方網站里列一些Java的客戶端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推薦使用Jedis和Redisson。在企業(yè)中用的最多的就是Jedis,下面我們就重點學習下Jedis。Jedis同樣也是托管在github

17、上,地址:/xetorthio/jedis6.2通過jedis連接redis單機6.2.1jar包jar包如下:6.2.2單實例連接通過創(chuàng)建單實例jedis對象連接redis服務,如下代碼:/ 單實例連接redisTestpublicvoidtestJedisSingle() Jedis jedis =newJedis(50, 6379);jedis.set(name,bar);String name = jedis.get(name);System.out.println(name);jedis.close();連接超時解決由于linux防火墻默認開啟,redis的服務端口6379并不在開放

18、規(guī)則之內,所有需要將此端口開放訪問或者關閉防火墻。關閉防火墻命令:sevice iptables stop如果是修改防火墻規(guī)則,可以修改:/etc/sysconfig/iptables文件6.2.3使用連接池連接通過單實例連接redis不能對redis連接進行共享,可以使用連接池對redis連接進行共享,提高資源利用率,使用jedisPool連接redis服務,如下代碼:/創(chuàng)建連接池JedisPoolpool=newJedisPool(50, 6379);/獲取連接Jedisjedis=pool.getResource();/存入jedis.set(key3,aaa);/取出System.ou

19、t.println(jedis.get(key3);/使用連接時,連接使用完后一定要關閉,關閉后連接會自動回到連接池供別人使用,如果一直不關閉則連接被耗盡之后就會死機jedis.close();/關閉連接池pool.close();詳細的連接池配置參數參考下節(jié)jedis和spring整合中applicationContext.xml的配置內容。6.2.4jedis與spring整合配置spring配置文件applicationContext.xml該值 且 空閑連接最大空閑連接數 時直接釋放 -測試代碼:privateApplicationContextapplicationContext;B

20、eforepublicvoidinit() applicationContext=newClassPathXmlApplicationContext(classpath:applicationContext.xml);TestpublicvoidtestJedisPool() JedisPoolpool= (JedisPool) applicationContext.getBean(jedisPool);tryJedisjedis = pool.getResource();jedis.set(name,lisi);String name = jedis.get(name);System.out

21、.println(name);catch(Exception ex)ex.printStackTrace();finallyif(jedis !=null)/關閉連接jedis.close();7數據類型-string7.1redis string介紹redis中沒有使用C語言的字符串表示,而是自定義一個數據結構叫SDS(simple dynamic string)即簡單動態(tài)字符串。打開下載的redis源碼包,找到src下的sds.h文件查看sds源碼:struct sdshdr /字符串長度unsigned int len;/buf數組中未使用的字節(jié)數量unsigned int free;/

22、用于保存字符串char buf;c語言對字符串的存儲是使用字符數組,遇到0字符則認為字符串結束,redis的字符串可以存儲任何類型的數據,因為任何類型數據都可以表示成二進制,sds結構中的char buf就是存儲了二進制數據。redis的字符串是二進制安全的,什么是二進制安全?簡單理解就是存入什么數據取出的還是什么數據。redis中的sds不像c語言處理字符串那樣遇到0字符則認證字符串結束,它不會對存儲進去的二進制數據進行處理,存入什么數據取出還是什么數據。7.2命令7.2.1賦值SET key value:6379 set test 123OK7.2.2取值賦值與取值:GET key:637

23、9 get test123“當鍵不存在時返回空結果。-GETSET key value取值時同時對key進行賦值操作。7.2.3刪除Del key:6379deltest(integer) 17.2.4數值增減遞增數字INCR key當存儲的字符串是整數時,Redis提供了一個實用的命令INCR,其作用是讓當前鍵值遞增,并返回遞增后的值。:6379 incr num(integer) 1:6379 incr num(integer) 2:6379 incr num(integer) 3增加指定的整數INCRBY key increment示例::6379 incrby num 2(intege

24、r) 5:6379 incrby num 2(integer) 7:6379 incrby num 2(integer) 9遞減數值DECR key7.2.5其它命令(自學)減少指定的整數DECRBY key decrement示例::6379 decr num(integer) 6:6379 decr num(integer) 5:6379 decrby num 3(integer) 2:6379 decrby num 3(integer) -1向尾部追加值APPEND key valueAPPEND的作用是向鍵值的末尾追加value。如果鍵不存在則將該鍵的值設置為value,即相當于SET

25、 key value。返回值是追加后字符串的總長度。:6379 set str helloOK:6379 append str world!(integer) 12:6379 get strhello world!獲取字符串長度STRLEN keySTRLEN命令返回鍵值的長度,如果鍵不存在則返回0。:6379 strlen str(integer) 0:6379 set str helloOK:6379 strlen str(integer) 5同時設置/獲取多個鍵值MSET key value key value MGET key key :6379 mset k1 v1 k2 v2 k3

26、 v3OK:6379 get k1v1:6379 mget k1 k31) v12) v38數據類型-hash8.1使用string的問題假設有User對象以JSON序列化的形式存儲到Redis中,User對象有id,username、password、age、name等屬性,存儲的過程如下:保存、更新:User對象json(string)redis如果在業(yè)務上只是更新age屬性,其他的屬性并不做更新我應該怎么做呢?如果仍然采用上邊的方法在傳輸、處理時會造成資源浪費,下邊講的hash可以很好的解決這個問題。8.2redis hash介紹hash叫散列類型,它提供了字段和字段值的映射。字段值只能

27、是字符串類型,不支持散列類型、集合類型等其它類型。如下:8.3命令8.3.1賦值HSET key field value一次只能設置一個字段值:6379 hset user username zhangsan(integer) 1-HMSET key field value field value .一次可以設置多個字段值:6379 hmset user age 20 username lisiOK8.3.2取值HGET key field一次只能獲取一個字段值:6379 hget user usernamezhangsan“-HMGET key field field .一次可以獲取多個字段

28、值:6379 hmget user age username1) 202) lisi-HGETALL key:6379 hgetall user1) age2) 203) username4) lisiHSET命令不區(qū)分插入和更新操作,當執(zhí)行插入操作時HSET命令返回1,當執(zhí)行更新操作時返回刪除字段可以刪除一個或多個字段,返回值是被刪除的字段個數HDEL key field field .:6379 hdel user age(integer) 1:6379 hdel user age name(integer) 0:6379 hdel user age username(int

29、eger) 18.3.4增加數字HINCRBY key field increment:6379 hincrby user age 2將用戶的年齡加2(integer) 22:6379 hget user age獲取用戶的年齡22“8.3.5其它命令(自學)判斷字段是否存在HEXISTS key field:6379 hexists user age查看user中是否有age字段(integer) 1:6379 hexists user name查看user中是否有name字段(integer) 0HSETNX key field value當字段不存在時賦值,類似HSET,區(qū)別在于如果字段已

30、經存在,該命令不執(zhí)行任何操作。:6379 hsetnx user age 30如果user中沒有age字段則設置age值為30,否則不做任何操作(integer) 0只獲取字段名或字段值HKEYS keyHVALS key:6379 hmset user age 20 name lisiOK:6379 hkeys user1) age2) name:6379 hvals user1) 202) lisi獲取字段數量HLEN key:6379 hlen user(integer) 29數據類型-list9.1ArrayList與LinkedList的區(qū)別ArrayList使用數組方式存儲數據,所

31、以根據索引查詢數據速度快,而新增或者刪除元素時需要設計到位移操作,所以比較慢。LinkedList使用雙向鏈接方式存儲數據,每個元素都記錄前后元素的指針,所以插入、刪除數據時只是更改前后元素的指針指向即可,速度非??欤缓笸ㄟ^下標查詢元素時需要從頭開始索引,所以比較慢,但是如果查詢前幾個元素或后幾個元素速度比較快。9.2redislist介紹列表類型(list)可以存儲一個有序的字符串列表,常用的操作是向列表兩端添加元素,或者獲得列表的某一個片段。列表類型內部是使用雙向鏈表(double linked list)實現的,所以向列表兩端添加元素的時間復雜度為0(1),獲取越接近兩端的元素速度就越

32、快。這意味著即使是一個有幾千萬個元素的列表,獲取頭部或尾部的10條記錄也是極快的。9.3命令9.3.1向列表兩端增加元素。LPUSH key value value .RPUSH key value value .向列表左邊增加元素:6379 lpushlkey1123(integer) 3向列表右邊增加元素:6379 rpush lkey14 5 6(integer) 39.3.2查看列表LRANGE key start stopLRANGE命令是列表類型最常用的命令之一,獲取列表中的某一片段,將返回start、stop之間的所有元素(包含兩端的元素),索引從0開始。索引可以是負數,如:“-

33、1”代表最后邊的一個元素。:6379 lrange lkey1 0 -1:6379 lrangelkey10 21) 22) 13)49.3.3從列表兩端彈出元素LPOP keyRPOP keyLPOP命令從列表左邊彈出一個元素,會分兩步完成,第一步是將列表左邊的元素從列表中移除,第二步是返回被移除的元素值。:6379 lpop lkey13“:6379 rpop lkey16“9.3.4獲取列表中元素的個數LLEN key:6379 llen lkey1(integer) 29.3.5其它命令(自學)刪除列表中指定的值LREM key count valueLREM命令會刪除列表中前coun

34、t個值為value的元素,返回實際刪除的元素個數。根據count值的不同,該命令的執(zhí)行方式會有所不同:當count0時,LREM會從列表左邊開始刪除。當count lindex lkey1 21:6379 lset lkey1 2 2OK:6379 lrange lkey1 0 -11) 62) 53) 24) 2只保留列表指定片段,指定范圍和LRANGE一致LTRIM key start stop:6379 lrange lkey1 0 -11) 62) 53) 04) 2:6379 ltrim lkey1 0 2OK:6379 lrange lkey1 0 -11) 62) 53) 0向列

35、表中插入元素LINSERT key BEFORE|AFTER pivot value該命令首先會在列表中從左到右查找值為pivot的元素,然后根據第二個參數是BEFORE還是AFTER來決定將value插入到該元素的前面還是后面。:6379 lrangelkey10 -11) 32) 23) 1:6379 linsertlkey1after 3 4(integer) 4:6379 lrangelkey10 -11) 32) 43) 24) 1將元素從一個列表轉移到另一個列表中RPOPLPUSH source destination:6379 rpoplpush list newlist1:63

36、79 lrange newlist 0 -11) 1:6379 lrange list 0 -11) 32) 43) 210數據類型-set10.1redis set介紹在集合中的每個元素都是不同的,且沒有順序。集合類型和列表類型的對比:集合類型的常用操作是向集合中加入或刪除元素、判斷某個元素是否存在等,由于集合類型的Redis內部是使用值為空的散列表實現,所有這些操作的時間復雜度都為0(1)。Redis還提供了多個集合之間的交集、并集、差集的運算。10.2命令10.2.1增加/刪除元素SADD key member member .SREM key member member .:6379

37、sadd set a b c(integer) 3:6379 sadd set a(integer) 0:6379 srem set c d(integer) 110.2.2獲得集合中的所有元素SMEMBERS key:6379 smembers set1) b2) a”判斷元素是否在集合中,無論集合中有多少元素都可以極速的返回結果。SISMEMBER key member:6379 sismember set a(integer) 1:6379 sismember set h(integer) 010.3其它命令10.3.1集合的差集運算A-B屬于A并且不屬于B的元素構成的集合。SDIFF

38、key key .:6379 sadd setA 1 2 3(integer) 3:6379 sadd setB 2 3 4(integer) 3:6379 sdiff setA setB1) 1:6379 sdiff setB setA1) 410.3.2集合的交集運算A B屬于A且屬于B的元素構成的集合。SINTER key key .:6379 sinter setA setB1) 22) 310.3.3集合的并集運算AB屬于A或者屬于B的元素構成的集合SUNION key key .:6379 sunion setA setB1) 12) 23) 34) 410.3.4其它命令(自學)

39、獲得集合中元素的個數SCARD key:6379 smembers setA1) 12) 23) 3:6379 scard setA(integer) 3從集合中彈出一個元素SPOP key:6379 spop setA1“注意:由于集合是無序的,所有SPOP命令會從集合中隨機選擇一個元素彈出11數據類型-sorted set11.1redis sorted set介紹在集合類型的基礎上有序集合類型為集合中的每個元素都關聯一個分數,這使得我們不僅可以完成插入、刪除和判斷元素是否存在在集合中,還能夠獲得分數最高或最低的前N個元素、獲取指定分數范圍內的元素等與分數有關的操作。在某些方面有序集合和列

40、表類型有些相似。1、二者都是有序的。2、二者都可以獲得某一范圍的元素。但是,二者有著很大區(qū)別:1、列表類型是通過鏈表實現的,獲取靠近兩端的數據速度極快,而當元素增多后,訪問中間數據的速度會變慢。2、有序集合類型使用散列表實現,所有即使讀取位于中間部分的數據也很快。3、列表中不能簡單的調整某個元素的位置,但是有序集合可以(通過更改分數實現)4、有序集合要比列表類型更耗內存。11.2命令11.2.1增加元素向有序集合中加入一個元素和該元素的分數,如果該元素已經存在則會用新的分數替換原有的分數。返回值是新加入到集合中的元素個數,不包含之前已經存在的元素。ZADD key score member s

41、core member .:6379 zadd scoreboard 80 zhangsan 89 lisi 94 wangwu(integer) 3:6379 zadd scoreboard 97 lisi(integer) 0獲取元素的分數ZSCORE key member:6379 zscore scoreboard lisi9711.2.2刪除元素ZREM key member member .移除有序集key中的一個或多個成員,不存在的成員將被忽略。當key存在但不是有序集類型時,返回一個錯誤。:6379 zrem scoreboard lisi(integer) 111.2.3獲得

42、排名在某個范圍的元素列表獲得排名在某個范圍的元素列表ZRANGE key start stop WITHSCORES照元素分數從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素):6379 zrange scoreboard 0 21) zhangsan2) wangwu3) lisi“ZREVRANGE key start stop WITHSCORES照元素分數從大到小的順序返回索引從start到stop之間的所有元素(包含兩端的元素):6379 zrevrange scoreboard 0 21) lisi 2) wangwu3) zhangsan “如果需要獲得

43、元素的分數的可以在命令尾部加上WITHSCORES參數:6379zrange scoreboard 0 1 WITHSCORES1) zhangsan2) 803) wangwu4) 9411.2.4其它命令(自學)獲得指定分數范圍的元素ZRANGEBYSCORE key min max WITHSCORES LIMIT offset count:6379 ZRANGEBYSCORE scoreboard 90 97 WITHSCORES1) wangwu2) 943) lisi4) 97:6379 ZRANGEBYSCORE scoreboard 70 100 limit 1 21) wan

44、gwu2) lisi增加某個元素的分數,返回值是更改后的分數。ZINCRBY key increment member給lisi加4分:6379 ZINCRBY scoreboard 4 lisi101“獲得集合中元素的數量ZCARD key:6379 ZCARD scoreboard(integer) 3獲得指定分數范圍內的元素個數ZCOUNT key min max:6379 ZCOUNT scoreboard 80 90(integer) 1按照排名范圍刪除元素ZREMRANGEBYRANK key start stop:6379 ZREMRANGEBYRANK scoreboard 0

45、 1(integer) 2:6379 ZRANGE scoreboard 0 -11) lisiZREMRANGEBYSCORE key min max按照分數范圍刪除元素:6379 zadd scoreboard 84 zhangsan(integer) 1:6379 ZREMRANGEBYSCORE scoreboard 80 100(integer) 1獲取元素的排名ZRANK key memberZREVRANK key member從小到大:6379 ZRANK scoreboard lisi(integer) 0從大到小:6379 ZREVRANK scoreboard zhang

46、san(integer) 112keys命令12.1設置key的生存時間Redis在實際使用過程中更多的用作緩存,然而緩存的數據一般都是需要設置生存時間的,即:到期后數據銷毀。EXPIRE key seconds設置key的生存時間(單位:秒)key在多少秒后會自動刪除TTL key查看key生于的生存時間PERSIST key清除生存時間PEXPIRE key milliseconds生存時間設置單位為:毫秒例子::7002 set test 1設置test的值為1OK:7002 get test獲取test的值1:7002 EXPIRE test 5設置test的生存時間為5秒(integ

47、er) 1:7002 TTL test查看test的生于生成時間還有1秒刪除(integer) 1:7002 TTL test(integer) -2:7002 get test獲取test的值,已經刪除(nil)12.2其它命令(自學)keys返回滿足給定pattern 的所有keyredis :6379 keys mylist*1) mylist2) mylist53) mylist64) mylist75) mylist8exists確認一個key 是否存在redis :6379 exists HongWan(integer) 0redis :6379 exists age(intege

48、r) 1redis :6379從結果來數據庫中不存在HongWan 這個key,但是age 這個key 是存在的del刪除一個keyredis :6379 del age(integer) 1redis :6379 exists age(integer) 0redis :6379從結果來數據庫中不存在HongWan 這個key,但是age 這個key 是存在的rename重命名keyredis :63791 keys *1) ageredis :63791 rename age age_newOKredis :63791 keys *1) age_newredis :63791age 成功的被

49、我們改名為age_new 了type返回值的類型redis :6379 type addrstringredis :6379 type myzset2zsetredis :6379 type mylistlistredis :6379這個方法可以非常簡單的判斷出值的類型13服務器命令(自學)ping測試連接是否存活redis :6379 pingPONG/執(zhí)行下面命令之前,我們停止redis 服務器redis :6379 pingCould not connect to Redis at :6379: Connection refused/執(zhí)行下面命令之前,我們啟動redis 服務器not c

50、onnected pingPONGredis :6379第一個ping 時,說明此連接正常第二個ping 之前,我們將redis 服務器停止,那么ping 是失敗的第三個ping 之前,我們將redis 服務器啟動,那么ping 是成功的select選擇數據庫。Redis 數據庫編號從015,我們可以選擇任意一個數據庫來進行數據的存取。redis :6379 select 1OKredis :63791 select 16(error) ERR invalid DB indexredis :637916當選擇16 時,報錯,說明沒有編號為16 的這個數據庫quit退出連接。redis :637

51、9 quitdbsize返回當前數據庫中key 的數目。redis :6379 dbsize(integer) 18redis :6379結果說明此庫中有18 個keyinfo獲取服務器的信息和統計。redis :6379 inforedis_version:2.2.12redis_git_sha1:00000000redis_git_dirty:0arch_bits:32multiplexing_api:epollprocess_id:28480uptime_in_seconds:2515uptime_in_days:0。flushdb刪除當前選擇數據庫中的所有key。redis :6379

52、 dbsize(integer) 18redis :6379 flushdbOKredis :6379 dbsize(integer) 0redis :6379在本例中我們將0 號數據庫中的key 都清除了。flushall刪除所有數據庫中的所有key。redis :63791 dbsize(integer) 1redis :63791 select 0OKredis :6379 flushallOKredis :6379 select 1OKredis :63791 dbsize(integer) 0redis :63791在本例中我們先查看了一個1 號數據庫中有一個key,然后我切換到0

53、號庫執(zhí)行flushall 命令,結果1 號庫中的key 也被清除了,說是此命令工作正常。14持久化(了解)Redis的高性能是由于其將所有數據都存儲在了內存中,為了使Redis在重啟之后仍能保證數據不丟失,需要將數據從內存中同步到硬盤中,這一過程就是持久化。Redis支持兩種方式的持久化,一種是RDB方式,一種是AOF方式??梢詥为毷褂闷渲幸环N或將二者結合使用。14.1RDB持久化RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將內存中的數據進行快照并持久化到硬盤。RDB是Redis默認采用的持久化方式,在redis.conf配置文件中默認有此下配置:save 900 1save 300 10save 60 10000save 開頭的一行就是持久化配置,可以配置多個條件(每行配置一個條件),每個條件之間是“或”的關系,“save 900 1”表示15分鐘(900秒鐘)內至少1個鍵被更改則進行快照,“save 300 10”表示5分鐘(300秒)內至少10個鍵被更改則進行快照。在redis.conf中:配置dir指定rdb快照文件的位置配置dbfilenam指定rdb快照文件的名稱Redis

溫馨提示

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

評論

0/150

提交評論