Redis整合綜述_第1頁
Redis整合綜述_第2頁
Redis整合綜述_第3頁
Redis整合綜述_第4頁
Redis整合綜述_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Part 1Redis基礎(chǔ)快速安裝指南在 Debian Linux 或者 Ubuntu Linux 上面安裝 Redis 的方法在 OS X 上面安裝 Redis 的方法Redis,你好!Redis官網(wǎng)下載Linux 上面安裝 Redis 的方法使用apt-get install redis-server命令安裝Redis使用apt-get install redis-server命令安裝Redis這種安裝方法可能會(huì)安裝到舊版的Redis;舉個(gè)例子,在Ubuntu10.4上面執(zhí)行上述命令,只會(huì)將2010年3月發(fā)布的Redis1.2.6安裝到系統(tǒng)上面,不推薦。使用源碼編譯并安裝Redis使用源碼

2、編譯并安裝Redis獲取并安裝make等構(gòu)件工具apt-get updateapt-get install make gcc從Redis官網(wǎng)下載最新版本的Redis源碼wget http:/download.redis.io/releases/redis-3.2.5.tar.gz解壓源碼,編譯,安裝并啟動(dòng)Redistar -xzf redis-3.2.5.tar.gzcd redis-3.2.5makemake installsrc/redis-server在 OS X 上面安裝 Redis 的方法使用Rudix工具直接以預(yù)編譯二進(jìn)制的形式安裝軟件下載用戶安裝Rudix的引導(dǎo)腳本curl O

3、http:/ rudix.py install rudix命令Rudix安裝Redisrudix install redis啟動(dòng)Redis服務(wù)器redis-serverRedis,你好!redis-cliset hello worldOKget hello“world”del hello(integer) 1get hello(nil)Redis簡介Redis是一個(gè)速度非??斓倪h(yuǎn)程內(nèi)存非關(guān)系型數(shù)據(jù)庫Redis提供了存儲(chǔ)鍵與5種不同類型的數(shù)據(jù)結(jié)構(gòu)(key-value之間的映射)Redis通過復(fù)制,持久化和客戶端分片等特性,用戶可以很方便的將Redis擴(kuò)展成一個(gè)能夠包含數(shù)百GB數(shù)據(jù)、每秒處理上百萬

4、次請(qǐng)求的系統(tǒng)Redis與其他數(shù)據(jù)庫和軟件的對(duì)比Redis使用內(nèi)存存儲(chǔ)的非關(guān)系數(shù)據(jù)庫字符串、列表、集合、散列表、有序集合每種數(shù)據(jù)類型都有自己的專屬命令,另外還有批量操作和不完全的事務(wù)支持發(fā)布與訂閱,主從復(fù)制,持久化,腳本存儲(chǔ)過程memcached使用內(nèi)存存儲(chǔ)的鍵值緩存鍵值之間的映射創(chuàng)建命令、讀取命令、更新命令、刪除命令以及其他幾個(gè)命令為提升性能而設(shè)的多線程服務(wù)MySQL關(guān)系數(shù)據(jù)庫每個(gè)數(shù)據(jù)庫可以包含多個(gè)表,每個(gè)表可以包含多個(gè)行;可以處理多個(gè)表的視圖;支持空間和第三方擴(kuò)展SELECT、INSERT、UPDATE、DELETE、函數(shù)、存儲(chǔ)過程支持ACID性質(zhì)(InnoDB),主從復(fù)制和主主復(fù)制Post

5、greSQL關(guān)系數(shù)據(jù)庫每個(gè)數(shù)據(jù)庫可以包含多個(gè)表,每個(gè)表可以包含多個(gè)行;可以處理多個(gè)表的視圖;支持空間和第三方擴(kuò)展;支持可定制類型SELECT、INSERT、UPDATE、DELETE、內(nèi)置函數(shù),自定義存儲(chǔ)過程支持ACID性質(zhì),主從復(fù)制,由第三方支持的多主復(fù)制MongoDB使用硬盤存儲(chǔ)的非關(guān)系文檔存儲(chǔ)每個(gè)數(shù)據(jù)庫都可以包含多個(gè)表,每個(gè)表可以包含多個(gè)無schema的BSON文檔創(chuàng)建命令、讀取命令、更新命令、刪除命令、條件查詢命令等支持map-reduce操作,支持主從復(fù)制,分片,空間索引為什么使用Redis有memcached使用經(jīng)驗(yàn)的讀者可能知道,用戶只能用APPEND命令將數(shù)據(jù)添加到已有字符串的

6、末尾。memcached的文檔中聲明,可以用APPEND命令來管理元素列表。這很好!用戶可以將元素追加到一個(gè)字符串的末尾,并將那個(gè)字符串當(dāng)作列表來使用。但隨后如何刪除這些元素呢?memcached采用的辦法是通過黑名單(blacklist)來隱藏列表里面的元素,從而避免對(duì)元素執(zhí)行讀取、更新、寫入(包括在一次數(shù)據(jù)庫查詢之后執(zhí)行的memcached寫入)等操作。相反地,Redis的LIST和SET允許用戶直接添加或者刪除元素。使用使用Redis而不是而不是memcached來解決問題,不僅可以讓代碼變得更簡短、更易懂、更易維護(hù),而且還來解決問題,不僅可以讓代碼變得更簡短、更易懂、更易維護(hù),而且還可

7、以使代碼的運(yùn)行速度更快(因?yàn)橛脩舨恍枰ㄟ^讀取數(shù)據(jù)庫來更新數(shù)據(jù))。除此之外,在其他許多情況下,可以使代碼的運(yùn)行速度更快(因?yàn)橛脩舨恍枰ㄟ^讀取數(shù)據(jù)庫來更新數(shù)據(jù))。除此之外,在其他許多情況下,Redis的效率和易用性也比關(guān)系數(shù)據(jù)庫要好得多。的效率和易用性也比關(guān)系數(shù)據(jù)庫要好得多。數(shù)據(jù)庫的一個(gè)常見用法是存儲(chǔ)長期的報(bào)告數(shù)據(jù),并將這些報(bào)告數(shù)據(jù)用作固定時(shí)間范圍內(nèi)的聚合數(shù)據(jù)(aggregates)。收集聚合數(shù)據(jù)的常見做法是:先將各個(gè)行插入一個(gè)報(bào)告表里面,之后再通過掃描這些行來收集聚合數(shù)據(jù),并根據(jù)收集到的聚合數(shù)據(jù)來更新聚合表中已有的那些行。之所以使用插入行的方式來存儲(chǔ),是因?yàn)閷?duì)于大部分?jǐn)?shù)據(jù)庫來說,插入行操作的

8、執(zhí)行速度非??欤ú迦胄兄粫?huì)在硬盤文件末尾進(jìn)行寫入)。不過,對(duì)表里面的行進(jìn)行更新卻是一個(gè)速度相當(dāng)慢的操作,因?yàn)檫@種更新除了會(huì)引起一次隨機(jī)讀(random read)之外,還可能會(huì)引起一次隨機(jī)寫(random write)。而在Redis里面,用戶可以直接使用原子的(atomic)INCR命令及其變種來計(jì)算聚合數(shù)據(jù),并且因?yàn)镽edis將數(shù)據(jù)存儲(chǔ)在內(nèi)存里面,而且發(fā)送給Redis的命令請(qǐng)求并不需要經(jīng)過典型的查詢分析器(parser)或者查詢優(yōu)化器(optimizer)進(jìn)行處理,所以對(duì)Redis存儲(chǔ)的數(shù)據(jù)執(zhí)行隨機(jī)寫的速度總是非常迅速的。使用 Redis 而不是關(guān)系數(shù)據(jù)庫或者其他硬盤存儲(chǔ)數(shù)據(jù)庫,可以避免寫

9、入不必要的臨時(shí)數(shù)據(jù),也免去了對(duì)臨時(shí)數(shù)據(jù)進(jìn)行掃描或者刪除的麻煩,并最終改善程序的性能。Redis數(shù)據(jù)結(jié)構(gòu)簡介結(jié)構(gòu)類型結(jié)構(gòu)類型結(jié)構(gòu)存儲(chǔ)值結(jié)構(gòu)存儲(chǔ)值STRING字符串可以是字符串、整數(shù)或浮點(diǎn)數(shù)LIST列表一個(gè)鏈表,鏈表上的每個(gè)節(jié)點(diǎn)都包含 一個(gè)字符串SET集合包含字符串的無序收集器,被包含的每個(gè)字符串都是唯一的HASH散列包含鍵值對(duì)的無序散列表ZSET有序集合字符串成員與浮點(diǎn)數(shù)分值之間的有序映射,元素排列順序由分值的大小決定Redis命令部分Redis命令對(duì)于5種結(jié)構(gòu)都是通用的DEL、TYPE、RENAME完整的Redis命令列表http:/redis.io/commandsRedis中的字符串命令命

10、令行為行為GET獲取存儲(chǔ)在給定鍵中的值SET設(shè)置存儲(chǔ)在給定鍵中的值DEL刪除存儲(chǔ)在給定鍵中的值Redis中的字符串命令命令行為行為INCRINCR key-name 將鍵存儲(chǔ)的值加1DECRDECR key-name 將鍵存儲(chǔ)的值減1INCRBYINCRBY key-name amount 將鍵存儲(chǔ)的值加上整數(shù)amountDECRBYDECRBY key-name amount 將鍵存儲(chǔ)的值減去整數(shù)amountINCRBYFLOATINCRBYFLOAT key-name amount 將鍵存儲(chǔ)的值加上浮點(diǎn)數(shù)amountRedis中的自增命令和自減命令Redis中的字符串命令命令行為行為APP

11、ENDAPPEND key-name value 將值value追加到給定鍵key-name當(dāng)前存儲(chǔ)的值的末尾GETRANGEGETRANGE key-name start end 獲取一個(gè)由偏移量start至偏移量end范圍內(nèi)所有字符組成的子串,包括start和end在內(nèi)SETRANGESETRANGE key-name offset value 將從start偏移量開始的字串設(shè)置為給定值GETBITGETBIT key-name offset 將字符串看作是二進(jìn)制位串,并返回位串中偏移量為offset的二進(jìn)制位的值SETBITGETBIT key-name offset value 將字符

12、串看作是二進(jìn)制位串,并將位串中偏移量為offset的二進(jìn)制位的值設(shè)置為value處理子串和二進(jìn)制位的命令Redis中的字符串命令命令行為行為BITCOUNTBITCOUNT key-name start end 統(tǒng)計(jì)二進(jìn)制位串里面值為1的二進(jìn)制位的數(shù)量,如果給定了可選的start偏移量和end偏移量,那么只對(duì)偏移量指定范圍內(nèi)的二進(jìn)制位進(jìn)行統(tǒng)計(jì)BITOPBITOP operation dest-key key-name key-name 對(duì)一個(gè)或多個(gè)二進(jìn)制位串執(zhí)行包括并(AND)、或(OR)、異或(XOR)、非(NOT)在內(nèi)的任意一種按位運(yùn)算操作,并將計(jì)算得出的結(jié)果保存在dest-key鍵里面處

13、理二進(jìn)制位的命令Redis中的列表命令命令行為行為RPUSH將給定值推入列表的右端LPUSH將給定值推入列表的左端LRANGE獲取列表在給定范圍上的所有值LINDEX獲取列表在給定位置上的單個(gè)元素LTRIM保留列表在給定范圍上的所有值,包含起止偏移量元素RPOP從列表的右端彈出一個(gè)值,并返回被彈出的值LPOP從列表的左端彈出一個(gè)值,并返回被彈出的值Redis中的列表命令命令行為行為BLPOPblpop key key . timeout 從第一個(gè)非空列表中彈出位于最左端的元素,或者在timeout秒之內(nèi)阻塞并等待可彈出的元素出現(xiàn)BRPOPbrpop key key . timeout從第一個(gè)非

14、空列表中彈出位于最右端的元素,或者在timeout秒之內(nèi)阻塞并等待可彈出的元素出現(xiàn)RPOPLPUSHrpoplpush source destination 從source列表中彈出位于最右端的元素,然后將這個(gè)元素推入destination列表的最左端,并向用戶返回這個(gè)元素BRPOPLPUSHbrpoplpush source destination timeout從source列表中彈出位于最右端的元素,然后將這個(gè)元素推入destination列表的最左端,并向用戶返回這個(gè)元素;如果source為空,那么在timeout秒內(nèi)阻塞并等待可彈出的元素出現(xiàn)阻塞式的列表彈出命令以及在列表之間移動(dòng)元素

15、的命令,常見的用例就是消息傳遞和任務(wù)隊(duì)列Redis中的集合命令命令行為行為SADD將給定元素添加到集合SMEMBERS返回集合包含的所有元素SISMEMBER檢查給定元素釋放存在于集合中SREM如果給定的元素存在于集合中,那么移除這個(gè)元素Redis中的集合命令命令行為行為SREMSREM key member member . 從集合里面移除一個(gè)或多個(gè)元素,并返回被移除元素的數(shù)量SCARDSCARD key 返回集合包含的元素的數(shù)量SRANDMEMBERSRANDMEMBER key count 從集合里面隨機(jī)的返回一個(gè)或多個(gè)元素。當(dāng)count為正數(shù)時(shí),命令返回的隨機(jī)元素不會(huì)重復(fù);當(dāng)count

16、為負(fù)數(shù)時(shí),命令返回的隨機(jī)元素可能會(huì)出現(xiàn)重復(fù)SPOPSPOP key count 隨機(jī)地移除集合中的一個(gè)元素,并返回被移除的元素SMOVESMOVE source destination member 如果集合source包含元素member,那么從集合里面移除元素,并將改元素添加到集合destination中;如果member被成功移除,那么命令返回1,否則返回0Redis中的集合SDIFFSDIFF key key .返回那些粗在于第一個(gè)集合、但不存在于其他集合中的元素(差集)SDIFFSTORESDIFFSTORE destination key key .將差集存儲(chǔ)到destinatio

17、n里面SINTERSINTER key key .返回那些同時(shí)存在于所有集合中的元素(交集)SINTERSTORESINTERSTORE destination key key .將交集存儲(chǔ)到destination里面SUNIONSUNION key key .返回那些至少存在于一個(gè)集合中的元素(并集)SUNIONSTORESUNIONSTORE destination key key .將并集存儲(chǔ)到destination里面用于組合和處理多個(gè)集合的Redis命令Redis中的散列命令命令行為行為HSET在散列里面關(guān)聯(lián)起給定的鍵值對(duì)HGET獲取指定散列鍵的值HGETALL獲取散列包含的所有鍵值

18、對(duì)HDEL如果給定鍵存在于散列里面,那么移除這個(gè)鍵HMGET獲取一個(gè)或多個(gè)散列鍵的值HMSET為散列里面的一個(gè)或多個(gè)鍵賦值HLEN返回散列包含的鍵值對(duì)數(shù)量Redis中的散列命令命令行為行為HEXISTSHEXISTS key field檢查給定鍵是否存在于散列中HKEYSHKEYS key獲取散列包含的所有鍵HVALSHVALS key獲取散列包含的所有值HGETALLHGETALL key獲取散列包含的所有鍵值對(duì)HINCRBYHINCRBY key field increment將鍵field存儲(chǔ)的值加上整數(shù)incrementHINCRBYFLOATHINCRBYFLOAT key fiel

19、d increment將鍵field存儲(chǔ)的值加上浮點(diǎn)數(shù)incrementRedis中的有序集合命令命令行為行為ZADDZADD key NX|XX CH INCR score member score member .將一個(gè)帶有給定分值的成員添加到有序集合里面ZRANGEZRANGE key start stop WITHSCORES根據(jù)元素在有序排列中所處的位置,從有序集合里面獲取多個(gè)元素ZRANGEBYSCOREZRANGEBYSCORE key min max WITHSCORES LIMIT offset count獲取有序集合在給定分值范圍內(nèi)的所有元素ZREMZREM key mem

20、ber member .如果給定成員存在于有序集合,那么移除這個(gè)成員Redis中的有序集合命令命令行為行為ZCARDZCARD key返回有序集合包含的成員數(shù)量ZINCRBYZINCRBY key increment member將member成員的分值加上incrementZCOUNTZCOUNT key min max返回分值介于min和max之間的成員數(shù)量ZRANKZRANK key member返回成員member在有序集合中的排名ZSCOREZSCORE key member返回成員member的分值Redis中的有序集合命令命令行為行為ZREVRANKZREVRANK key me

21、mber返回有序集合里成員member的排名,成員按照分值從大到小排列ZREVRANGEZREVRANGE key start stop WITHSCORES返回有序集合給定排名范圍內(nèi)的成員,成員按照分值從大到小排列ZRANGEBYSCOREZRANGEBYSCORE key min max WITHSCORES LIMIT offset count返回有序集合中分值介于min和max之間的所有成員ZREVRANGEBYSCOREZREVRANGEBYSCORE key max min WITHSCORES LIMIT offset count獲取有序集合中分值介于min和max之間的所有成員

22、,并按照分值從大到小的順序來返回它們有序集合的范圍型數(shù)據(jù)獲取命令Redis中的有序集合ZREMRANGEBYRANKZREMRANGEBYRANK key start stop移除有序集合中排名介于start和stop之間的成員ZREMRANGEBYSCOREZREMRANGEBYSCORE key min max移除有序集合中分值介于min和max之間的成員ZINTERSTOREZINTERSTORE destination numkeys key key . WEIGHTS weight AGGREGATE SUM|MIN|MAX對(duì)給定的有序集合執(zhí)行類似于集合的交集運(yùn)算ZUNIONSTOR

23、EZUNIONSTORE destination numkeys key key . WEIGHTS weight AGGREGATE SUM|MIN|MAX對(duì)給定的有序集合執(zhí)行類似于集合的并集運(yùn)算范圍性數(shù)據(jù)刪除命令,以及并集命令和交集命令SORT命令命令命令行為行為SORTSORT source-key BY pattern LIMIT offset count GET pattern GET pattern ASC|DESC ALPHA STORE dest-key 根據(jù)給定的選項(xiàng),對(duì)輸入的列表、集合或者有序集合進(jìn)行排序,然后返回或者存儲(chǔ)排序的結(jié)果sort命令可以同時(shí)處理字符串、集合、列表

24、和散列MULTI命令和EXEC命令用于實(shí)現(xiàn)基本事務(wù)特性這兩個(gè)命令可以讓用戶將多個(gè)命令當(dāng)做一個(gè)命令來執(zhí)行自動(dòng)過期命令命令命令行為行為PERSISTPERSIST key 移除鍵的過期時(shí)間TTLTTL key 查看給定鍵距離過期還有多少秒EXPIREEXPIRE key seconds讓給定鍵在指定的秒數(shù)之后過期EXPIREATEXPIREAT key timestamp將給定鍵的過期時(shí)間設(shè)置為給定的UNIX時(shí)間戳PTTLPTTL key查看給定鍵距離過期時(shí)間還有多少毫秒PEXPIREPEXPIRE key milliseconds讓給定鍵在指定的毫秒數(shù)之后過期PEXPIREATPEXPIREAT

25、 key milliseconds-timestamp將一個(gè)毫秒級(jí)精度的UNIX時(shí)間戳設(shè)置為給定鍵的過期時(shí)間自動(dòng)刪除無用數(shù)據(jù)Redis客戶端Redis客戶端連接public class Redis /private final JedisSentinelPool pool; private final JedisPool pool; public Redis() JedisPoolConfig config = new JedisPoolConfig(); /最大空閑連接數(shù), 默認(rèn)8個(gè) config.setMaxIdle(8); /最大連接數(shù), 默認(rèn)8個(gè) config.setMaxTotal(

26、8); /獲取連接時(shí)的最大等待毫秒數(shù)(如果設(shè)置為阻塞時(shí)BlockWhenExhausted),如果超時(shí)就拋異常, 小于零:阻塞不確定的時(shí)間, 默認(rèn)-1 config.setMaxWaitMillis(-1); /逐出連接的最小空閑時(shí)間 默認(rèn)1800000毫秒(30分鐘) config.setMinEvictableIdleTimeMillis(1800000); /最小空閑連接數(shù), 默認(rèn)0 config.setMinIdle(0); this.pool = new JedisPool(config, localhost); public void testJedis() try (Jedis

27、jedis = pool.getResource() jedis.set(hello, wolrd); jedis.get(hello); Part 2Redis數(shù)據(jù)結(jié)構(gòu)Redis 底層結(jié)構(gòu)字符鍵哈希鍵集合鍵有序集合鍵列表鍵鏈表raw字典跳躍表整數(shù)集合壓縮列表embstrlongsds-字符結(jié)構(gòu)struct sdshdr int len; int free; char buf;優(yōu)點(diǎn):計(jì)算長度時(shí)間復(fù)雜度為o(1)避免緩存溢出減少修改字符串的內(nèi)存分配鏈表鏈表Redis 列表鍵底層實(shí)現(xiàn)之一typedef struct listNode struct listNode *prev; struct li

28、stNode *next; void *value; listNode;typedef struct list listNode *head; listNode *tail; void *(*dup)(void *ptr); void (*free)(void *ptr); int (*match)(void *ptr, void *key); unsigned int len; list;字典dict字典是哈希鍵和集合鍵的底層實(shí)現(xiàn)之一使用場景:當(dāng)數(shù)據(jù)量比較大的時(shí)候本質(zhì):哈希表查找效率O(1)難點(diǎn):Rehash字典空字典哈希節(jié)點(diǎn)Rehash字典重新分配空間觸發(fā)條件:1) 服務(wù)器目前沒有執(zhí)行BG

29、SAVE或BGREWRITEAOF,并且哈希表的負(fù)載因子大于12) 服務(wù)器目前正在執(zhí)行BGSAVE或BGREWRITEAOF,并且哈希表的負(fù)載因子大于5負(fù)載因子 uesd / size Rehash startRehash processingRehash end跳躍表優(yōu)點(diǎn)查找效率接近二叉平衡術(shù)構(gòu)造簡單:二叉平衡術(shù),紅黑樹Redis跳躍表跳躍表原理跳躍表層次分配算法簡單實(shí)現(xiàn):二項(xiàng)分布算法特點(diǎn):節(jié)點(diǎn)較少容易出現(xiàn)不均勻分布情況,節(jié)點(diǎn)越多,分布越趨于穩(wěn)定構(gòu)建一個(gè)簡單的跳躍表看一看redis怎么實(shí)現(xiàn)跳躍表整數(shù)集合intset整數(shù)集合是集合鍵的底層實(shí)現(xiàn)當(dāng)一個(gè)集合中的元素都為整數(shù)時(shí),redis使用整數(shù)集合

30、作為集合鍵的底層實(shí)現(xiàn)整數(shù)集合的數(shù)據(jù)結(jié)構(gòu)typedef struct intset uint32_t encoding; uint32_t length; int8_t contents; intset;升級(jí)整數(shù)集合默認(rèn)采用int_16的數(shù)據(jù)類型,當(dāng)插入的數(shù)大約int_8的范圍時(shí)候,采取升級(jí)策略,最高支持int_64降級(jí)關(guān)于降級(jí),不支持一些關(guān)鍵點(diǎn)intset使用數(shù)組(contents)來存儲(chǔ)數(shù)據(jù),數(shù)據(jù)按照由小到大的順序存儲(chǔ),體現(xiàn)在intsetSearch這個(gè)函數(shù)的二分查找方法中。當(dāng)插入新元素時(shí),首先判斷encoding是否小于當(dāng)前值,否則調(diào)用intsetUpgradeAndAdd函數(shù),將原來in

31、tset中的數(shù)據(jù)都變成新的encoding,同時(shí)把新元素插入到set。在執(zhí)行intsetAdd和intsetRemove函數(shù)增刪元素的時(shí)候,都要調(diào)用intsetResize增加或者減少空間,同時(shí)按照順序插入或者刪除元素。在移動(dòng)元素時(shí),使用intsetMoveTail,內(nèi)部通過memmove實(shí)現(xiàn)。壓縮列表壓縮列表是列表鍵、哈希鍵、以及有序集合的底層實(shí)現(xiàn)當(dāng)列表鍵和哈希鍵都包含較少項(xiàng),并且要么是較小整數(shù)要么是較短字符串,redis就會(huì)使用壓縮列表作為底層實(shí)現(xiàn)屬性屬性類型類型長度長度zlbytesunit32_t4字節(jié)zltailunit32_t4字節(jié)zllenunit16_t2字節(jié)entryX列表節(jié)

32、點(diǎn)結(jié)構(gòu)不定zllenunit8_t1字節(jié)Redis 底層結(jié)構(gòu)字符鍵哈希鍵集合鍵有序集合鍵列表鍵鏈表raw字典跳躍表整數(shù)集合壓縮列表embstrlongPart 3Redis數(shù)據(jù)庫單機(jī)數(shù)據(jù)庫redisServerdb.dbnum(16)db0db1db2db15redisClientdb數(shù)據(jù)庫鍵空間rootcodis-server # redis-cli -h -p 9000:9000 SELECT 2(error) ERR invalid DB index, only accept DB 0:9000 SELECT 0OK數(shù)據(jù)

33、庫鍵空間:9000 set message hello worldOK:9000 rpush alphabet a b c(integer) 3:9000 hset book name Redis is good(integer) 1:9000 hset book author Josiah L. Carlson(integer) 1數(shù)據(jù)庫鍵空間redisDbdictdictStringObject“alphabet”StringObject“book”StringObject“message”ListOb

34、jectStringObject“a”StringObject“b”StringObject“c”HashObjectStringObject“name”StringObject“author”StringObjcet“Redis is good”StringObjcet“Josiah L. Carlson”StringObjcet“hello world”數(shù)據(jù)庫鍵空間:9000 hget book authorJosiah L. Carlson:9000 get messagehello world:9000 lrange alphabet 0 -11) a2) b3) c過期鍵刪除策略定時(shí)刪除:在設(shè)置鍵的過期時(shí)間的同時(shí),創(chuàng)建一個(gè)定時(shí)器(timer),讓定時(shí)器在鍵的過期時(shí)間來臨時(shí),立即執(zhí)行對(duì)鍵的刪除操作。惰性刪除:放任過期鍵不管,但是每次從鍵空間內(nèi)獲取鍵時(shí)都檢查取

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論