天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

關(guān)于使用key/value數(shù)據(jù)庫(kù)redis和TTSERVER的心得體會(huì)

先說(shuō)redis
redis是一個(gè)類(lèi)似memcached的key/value存儲(chǔ)系統(tǒng),它支持存儲(chǔ)的value類(lèi)型相對(duì)較多,包括string(字符串)、 list(鏈表)、set(集合)和zset(有序集合)。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件(這點(diǎn)兒個(gè)人覺(jué)得redis比memcache 在數(shù)據(jù)保存上要安全一些),并且在此基礎(chǔ)上實(shí)現(xiàn)了master- slave(主從)同步。

redis的存取性能很高,SET操作每秒鐘 110000 次,GET操作每秒鐘 81000 次(速度很爽!)。
Redis針對(duì)不同的存儲(chǔ)類(lèi)型對(duì)象提供了不同的命令。
redis目前提供四種數(shù)據(jù)類(lèi)型:string,list,set及zset(sorted set)。
string是最簡(jiǎn)單的類(lèi)型,你可以理解成與Memcached一模一個(gè)的類(lèi)型,一個(gè)key對(duì)應(yīng)一個(gè)value,其上支持的操作與Memcached的操 作類(lèi)似。但它的功能更豐富。

list是一個(gè)鏈表結(jié)構(gòu),主要功能是push、pop、獲取一個(gè)范圍的所有值等等。操作中key理解為鏈表的名字。
set是集合,和我們數(shù)學(xué)中的集合概念相似,對(duì)集合的操作有添加刪除元素,有對(duì)多個(gè)集合求交并差等操作。操作中key理解為集合的名字。

zset是set的一個(gè)升級(jí)版本,他在set的基礎(chǔ)上增加了一個(gè)順序?qū)傩裕@一屬性在添加修改元素的時(shí)候可以指定,每次指定后,zset會(huì)自動(dòng)重新按新的 值調(diào)整順序。可以理解了有兩列的mysql表,一列存value,一列存順序。操作中key理解為zset的名字。

下面提供redis命令:
適合全體類(lèi)型的命令
EXISTS key 判斷一個(gè)鍵是否存在;存在返回 1;否則返回0;
DEL key 刪除某個(gè)key,或是一系列key;DEL key1 key2 key3 key4
TYPE key 返回某個(gè)key元素的數(shù)據(jù)類(lèi)型 ( none:不存在,string:字符,list,set,zset,hash)
KEYS pattern 返回匹配的key列表 (KEYS foo*:查找foo開(kāi)頭的keys)
RANDOMKEY 隨機(jī)獲得一個(gè)已經(jīng)存在的key,如果當(dāng)前數(shù)據(jù)庫(kù)為空,則返回空字符串
RENAME oldname newname更改key的名字,新鍵如果存在將被覆蓋
RENAMENX oldname newname 更改key的名字,如果名字存在則更改失敗
DBSIZE返回當(dāng)前數(shù)據(jù)庫(kù)的key的總數(shù)
EXPIRE設(shè)置某個(gè)key的過(guò)期時(shí)間(秒),(EXPIRE bruce 1000:設(shè)置bruce這個(gè)key1000秒后系統(tǒng)自動(dòng)刪除)注意:如果在還沒(méi)有過(guò)期的時(shí)候,對(duì)值進(jìn)行了改變,那么那個(gè)值會(huì)被清除。
TTL查找某個(gè)key還有多長(zhǎng)時(shí)間過(guò)期,返回時(shí)間秒
SELECT index 選擇數(shù)據(jù)庫(kù)
MOVE key dbindex 將指定鍵從當(dāng)前數(shù)據(jù)庫(kù)移到目標(biāo)數(shù)據(jù)庫(kù) dbindex。成功返回 1;否則返回0(源數(shù)據(jù)庫(kù)不存在key或目標(biāo)數(shù)據(jù)庫(kù)已存在同名key);
FLUSHDB 清空當(dāng)前數(shù)據(jù)庫(kù)中的所有鍵
FLUSHALL 清空所有數(shù)據(jù)庫(kù)中的所有鍵

處理字符串的命令
SET key value 給一個(gè)鍵設(shè)置字符串值。SET keyname datalength data (SET bruce 10 paitoubing:保存key為burce,字符串長(zhǎng)度為10的一個(gè)字符串paitoubing到數(shù)據(jù)庫(kù)),data最大不可超過(guò)1G。
GET key獲取某個(gè)key 的value值。如key不存在,則返回字符串“nil”;如key的值不為字符串類(lèi)型,則返回一個(gè)錯(cuò)誤。

GETSET key value可以理解成獲得的key的值然后SET這個(gè)值,更加方便的操作 (SET bruce 10 paitoubing,這個(gè)時(shí)候需要修改bruce變成1234567890并獲取這個(gè)以前的數(shù)據(jù)paitoubing,GETSET bruce 10 1234567890)
MGET key1 key2 … keyN 一次性返回多個(gè)鍵的值

SETNX key value SETNX與SET的區(qū)別是SET可以創(chuàng)建與更新key的value,而SETNX是如果key不存在,則創(chuàng)建key與value數(shù)據(jù)
MSET key1 value1 key2 value2 … keyN valueN 在一次原子操作下一次性設(shè)置多個(gè)鍵和值
MSETNX key1 value1 key2 value2 … keyN valueN 在一次原子操作下一次性設(shè)置多個(gè)鍵和值(目標(biāo)鍵不存在情況下,如果有一個(gè)以上的key已存在,則失敗)
INCR key 自增鍵值
INCRBY key integer 令鍵值自增指定數(shù)值
DECR key 自減鍵值
DECRBY key integer 令鍵值自減指定數(shù)值

處理 lists 的命令
RPUSH key value 從 List 尾部添加一個(gè)元素(如序列不存在,則先創(chuàng)建,如已存在同名Key而非序列,則返回錯(cuò)誤)
LPUSH key value 從 List 頭部添加一個(gè)元素
LLEN key 返回一個(gè) List 的長(zhǎng)度
LRANGE key start end從自定的范圍內(nèi)返回序列的元素 (LRANGE testlist 0 2;返回序列testlist前0 1 2元素)
LTRIM key start end修剪某個(gè)范圍之外的數(shù)據(jù) (LTRIM testlist 0 2;保留0 1 2元素,其余的刪除)
LINDEX key index返回某個(gè)位置的序列值(LINDEX testlist 0;返回序列testlist位置為0的元素)
LSET key index value更新某個(gè)位置元素的值
LREM key count value 從 List 的頭部(count正數(shù))或尾部(count負(fù)數(shù))刪除一定數(shù)量(count)匹配value的元素,返回刪除的元素?cái)?shù)量。
LPOP key 彈出 List 的第一個(gè)元素
RPOP key 彈出 List 的最后一個(gè)元素
RPOPLPUSH srckey dstkey 彈出 _srckey_ 中最后一個(gè)元素并將其壓入 _dstkey_頭部,key不存在或序列為空則返回“nil”

處理集合(sets)的命令(有索引無(wú)序序列)
SADD key member增加元素到SETS序列,如果元素(membe)不存在則添加成功 1,否則失敗 0;(SADD testlist 3 /n one)
SREM key member 刪除SETS序列的某個(gè)元素,如果元素不存在則失敗0,否則成功 1(SREM testlist 3 /N one)
SPOP key 從集合中隨機(jī)彈出一個(gè)成員
SMOVE srckey dstkey member 把一個(gè)SETS序列的某個(gè)元素 移動(dòng)到 另外一個(gè)SETS序列 (SMOVE testlist test 3/n two;從序列testlist移動(dòng)元素two到 test中,testlist中將不存在two元素)
SCARD key 統(tǒng)計(jì)某個(gè)SETS的序列的元素?cái)?shù)量
SISMEMBER key member 獲知指定成員是否存在于集合中
SINTER key1 key2 … keyN 返回 key1, key2, …, keyN 中的交集
SINTERSTORE dstkey key1 key2 … keyN 將 key1, key2, …, keyN 中的交集存入 dstkey
SUNION key1 key2 … keyN 返回 key1, key2, …, keyN 的并集
SUNIONSTORE dstkey key1 key2 … keyN 將 key1, key2, …, keyN 的并集存入 dstkey
SDIFF key1 key2 … keyN 依據(jù) key2, …, keyN 求 key1 的差集。官方例子:
key1 = x,a,b,c
key2 = c
key3 = a,d
SDIFF key1,key2,key3 => x,b
SDIFFSTORE dstkey key1 key2 … keyN 依據(jù) key2, …, keyN 求 key1 的差集并存入 dstkey
SMEMBERS key 返回某個(gè)序列的所有元素
SRANDMEMBER key 隨機(jī)返回某個(gè)序列的元素

處理有序集合(sorted sets)的命令 (zsets)
ZADD key score member 添加指定成員到有序集合中,如果目標(biāo)存在則更新score(分值,排序用)
ZREM key member 從有序集合刪除指定成員
ZINCRBY key increment member 如果成員存在則將其增加_increment_,否則將設(shè)置一個(gè)score為_(kāi)increment_的成員
ZRANGE key start end 返回升序排序后的指定范圍的成員
ZREVRANGE key start end 返回降序排序后的指定范圍的成員
ZRANGEBYSCORE key min max 返回所有符合score >= min和score <= max的成員 ZCARD key 返回有序集合的元素?cái)?shù)量 ZSCORE key element 返回指定成員的SCORE值 ZREMRANGEBYSCORE key min max 刪除符合 score >= min 和 score <= max 條件的所有成員。

使用體會(huì):
個(gè)人在覺(jué)得redis速度是不用說(shuō)了(很快的),但是很消耗物理內(nèi)存,算是redis的一個(gè)弊端吧,redis適合數(shù)據(jù)量比較小速度更新快的類(lèi)型的網(wǎng)站,比如社區(qū),不適合數(shù)據(jù)比較龐大的網(wǎng)站,比如論壇。以前用redis應(yīng)用的一個(gè)論壇帖子上,但是因?yàn)閿?shù)據(jù)量太大,消耗物理內(nèi)存驚人而放棄了用 redis!

再說(shuō)說(shuō)TTSERVER
Tokyo CabiNET 是一個(gè)DBM的實(shí)現(xiàn)。這里的數(shù)據(jù)庫(kù)由一系列key-value對(duì)的記錄構(gòu)成。key和value都可以是任意長(zhǎng)度的字節(jié)序列,既可以是二進(jìn)制也可以是字符串。這里沒(méi)有數(shù)據(jù)類(lèi)型和數(shù)據(jù)表的概念。當(dāng)做為Hash表數(shù)據(jù)庫(kù)使用時(shí),每個(gè)key必須是不同的,因此無(wú)法存儲(chǔ)兩個(gè)key相同的值。提供了以下訪問(wèn)方法:提供key,value參數(shù)來(lái)存儲(chǔ),按 key刪除記錄,按key來(lái)讀取記錄,另外,遍歷key也被支持,雖然順序是任意的不能被保證。這些方法跟Unix標(biāo)準(zhǔn)的DBM,例如GDBM,NDBM 等等是相同的,但是比它們的性能要好得多(因此可以替代它們) 當(dāng)按B+樹(shù)來(lái)存儲(chǔ)時(shí),擁用相同key的記錄也能被存儲(chǔ)。像hash表一樣的讀取,存儲(chǔ),刪除函數(shù)也都有提供。記錄按照用戶(hù)提供的比較函數(shù)來(lái)存儲(chǔ)。可以采用順序或倒序的游標(biāo)來(lái)讀取每一條記錄。依照這個(gè)原理,向前的字符串匹配搜索和整數(shù)區(qū)間搜索也實(shí)現(xiàn)了。另外,B+樹(shù)的事務(wù)也是可用的。對(duì)于定長(zhǎng)的數(shù)組,記錄按自然數(shù)來(lái)標(biāo)記存儲(chǔ)。不能存儲(chǔ)key相同的兩條或更多記錄。另外,每條記錄的長(zhǎng)度受到限 制。讀取方法和hash表的一樣。 Tokyo CabiNET是用C寫(xiě)的,同時(shí)提供c,perl,ruby,Java的API。Tokyo CabiNET在提供了POSIX和C99的平臺(tái)上都可用,它以GNU Lesser Public License協(xié)議發(fā)布。

tokyocabiNET :一個(gè)key-value的DBM數(shù)據(jù)庫(kù),但是沒(méi)有提供網(wǎng)絡(luò)接口,以下稱(chēng)TC。
tokyotyrant :是為T(mén)C寫(xiě)的網(wǎng)絡(luò)接口,他支持memcache協(xié)議,也可以通過(guò)HTTP操作,以下稱(chēng)TT。

性能:
Tokyo CabiNET 是日本人 平林

主站蜘蛛池模板: 暖暖 视频 免费 高清 在线观看 | 国产成人免费在线观看 | 考好老师让你做一次H | 成人网站国产在线视频内射视频 | 香蕉视频国产精品 | 日韩人妻无码精品久久中文字幕 | 国产手机在线亚洲精品观看 | 亚洲精品电影天堂网 | 探花口爆颜射乳交日韩 | 男神插曲女生软件完整版 | 免费看到湿的小黄文软件APP | 牛牛在线精品视频(正) | 蜜桃久久久亚洲精品成人 | 亚洲精品免播放器在线观看 | 欧美整片华人play | 亚色九九九全国免费视频 | 11 13加污女qq看他下面 | 无码人妻精品国产婷婷 | japanese幼儿videos| 国内精品久久 | 99久久精品费精品国产一区二 | 午夜噜噜噜私人影院在线播放 | a视频免费看 | 亚洲精品综合在线影院 | 欧美黄色精品 | 水蜜桃亚洲一二三四在线 | 亚洲色婷婷久久精品AV蜜桃 | 国产乱码一区二区三区 | 99久酒店在线精品2019 | 中文字幕乱偷无码AV蜜桃 | 97视频免费在线 | 久久福利影院 | 男女免费观看在线爽爽爽视频 | 色琪琪久久热在线 | 中文字幕A片视频一区二区 中文字幕AV在线一二三区 | 精品人伦一区二区三区潘金莲 | 欧亚一卡二卡日本一卡二卡 | 美女快播第一网 | 婷婷综合久久狠狠色 | 国产色婷亚洲99精品AV在线 | 中文字幕人成人乱码亚洲影视S |