《Redis中的數(shù)據(jù)結(jié)構(gòu)與常用命令,學(xué)習(xí)Redis從這開始》要點(diǎn):
本文介紹了Redis中的數(shù)據(jù)結(jié)構(gòu)與常用命令,學(xué)習(xí)Redis從這開始,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
對(duì)付Redis的介紹這里只寫一句:Redis是一種基于內(nèi)存的高性能非關(guān)系型數(shù)據(jù)庫,它以kye-value的形式來存儲(chǔ)數(shù)據(jù).
Redis中包括5種數(shù)據(jù)類型:STRING、LIST、SET、HASH、ZSET.
Redis中的5中數(shù)據(jù)布局(截圖出自《Redis in Action》):
Redis以key-value形式存儲(chǔ)數(shù)據(jù),此中key與value的關(guān)系可分為兩種:
1對(duì)1
在Redis的STRING數(shù)據(jù)布局中,一個(gè)key對(duì)應(yīng)一個(gè)value.
1對(duì)*
Redis中的別的四種數(shù)據(jù)結(jié)構(gòu),一個(gè)key可以對(duì)應(yīng)多個(gè)value.
為了更直觀的說明key和value間的關(guān)系,下面用幾張圖(截圖來自《Redis in Action》)來描述Redis中的五種數(shù)據(jù)布局:
STRING布局:
LIST布局:
SET布局:
HASH布局:
ZSET布局:
此中:
SET和ZSET中沒有反復(fù)元素;
相比SET,ZSET具有排序功效;
ZSET和HASH的value也是鍵值對(duì)情勢(shì):ZSET(score,member)、HASH(field,value);
STRING類型中不僅僅是存儲(chǔ)字符,也可以存儲(chǔ)數(shù)值(整數(shù)、浮點(diǎn)數(shù));
5種數(shù)據(jù)布局最終存儲(chǔ)的數(shù)據(jù)類型實(shí)際只有兩種:字符和數(shù)值,Redis能夠區(qū)分存儲(chǔ)的值是字符還是數(shù)字;
在redis-cli中對(duì)付輸入的命令會(huì)有智能提示
命令 | 作用 |
---|---|
HELP | 獲取命令的贊助信息,學(xué)會(huì)help命令很重要 |
DEL | 刪除key及對(duì)應(yīng)的值 |
EXPIRE | 設(shè)置鍵的過期時(shí)間,過期的鍵連同與該鍵相關(guān)的數(shù)據(jù)都將被刪除 |
help命令:
STRING
Redis對(duì)字符串提供了豐富的操作,在Redis中STRING布局用于存儲(chǔ)兩種類型的數(shù)據(jù):
數(shù)值(整數(shù)、浮點(diǎn)數(shù))
字符串(byte string)
命令 | 作用 |
---|---|
SET | 向指定的key中寫入值 |
GET | 從指定的key中獲取值 |
INCR | 將指定key的值加1 |
DECR | 將指定key的值減1 |
INCRBY | 將指定key的值加上指定的數(shù)值 |
DECRBY | 將指定key的值減去指定的數(shù)值 |
APPEND | 向value中追加內(nèi)容 |
GETRANGE | GETRANGE key-name start end 獲取指定索引范圍(字符串可看作是字符組成的數(shù)組)的字符,當(dāng)start=0且end=-1時(shí)獲取整個(gè)字符串 |
SETRANGE | `設(shè)置指定偏移量的字符的值 |
GETBIT | GETBIT key-name offset 將字符串看做是二進(jìn)制形式(bit string),并返回指定偏移量位置處的二進(jìn)制位的值 |
SETBIT | 設(shè)置指定偏移量位置處的二進(jìn)制位的值 |
BITCOUNT | 返回字符串中二進(jìn)制位值為1的二進(jìn)制位數(shù) |
BITOP | 對(duì)字符串執(zhí)行位運(yùn)算,并將計(jì)算成果存儲(chǔ)到指定的key中 |
對(duì)于BITCOUNT命令,專門寫了一段程序進(jìn)行驗(yàn)證,效果圖如下:
c#代碼:
redis-cli中執(zhí)行bitcount命令的成果:
LIST
命令 | 作用 |
---|---|
LPUSH | 將一個(gè)或多個(gè)值推入列表左端 |
RPUSH | 將一個(gè)或多個(gè)值推入列表右端 |
LPOP | 移除并返回列表最左端的值 |
RPOP | 移除并返回列表最右端的值 |
LINDEX | 根據(jù)索引獲取LIST中的值 |
LRANGE | 獲取LIST中索引在指定規(guī)模內(nèi)的值 |
LTRIM | 從LIST中刪除索引不在指定規(guī)模內(nèi)的值,這里的索引規(guī)模是閉區(qū)間 |
HASH
命令 | 作用 |
---|---|
HSET | 向HASH表中添加元素,由上圖可以看出HASH結(jié)構(gòu)中存儲(chǔ)的值也是一個(gè)鍵值對(duì)(field value) |
HMSET | 一次向HASH表中寫入多個(gè)鍵值對(duì) |
HGET | 獲取HASH中存儲(chǔ)的值 |
HMGET | 一次從HASH中獲取多個(gè)值 |
HLEN | 獲取HASH表中存儲(chǔ)的元素個(gè)數(shù) |
HDEL | 刪除HASH表中的鍵值對(duì) |
HEXISTS | 判斷HASH中是否包括指定field的鍵值對(duì) |
HKEYS | 獲取HASH中的所有鍵(field) |
HVALS | 獲取HASH中的所有值 |
HGETALL | 獲取HASH中的所有鍵值對(duì) |
HINCRBY | 將HASH中的指定value增加指定的數(shù)值 |
SET
SET中沒有反復(fù)元素,向SET中添加反復(fù)的數(shù)據(jù)只會(huì)存儲(chǔ)一份.
命令 | 作用 |
---|---|
SADD | 向SET中添加元素 |
SREM | 移除SET中的元素 |
SISMEMBER | 斷定某元素是否存在于SET中 |
SCARD | 返回SET中的元素個(gè)數(shù) |
SMEMBERS | 返回SET中的所有元素 |
SSCAN | 通過迭代的方式返回SET中的所有元素 |
SMOVE | 將元素從某一集(如果該元素存在當(dāng)前集合中)合移動(dòng)到另一集合并返回當(dāng)前元素 |
集合間運(yùn)算
命令 | 作用 |
---|---|
SDIFF | 對(duì)SET集合進(jìn)行補(bǔ)集運(yùn)算(存在于第一個(gè)集合且不存在于第二個(gè)集合中的元素)并返回運(yùn)算成果 |
SDIFFSTORE | 對(duì)SET集合進(jìn)行補(bǔ)集運(yùn)算并將運(yùn)算成果存儲(chǔ)到一個(gè)新的SET集合中 |
SINTER | 對(duì)SET集合進(jìn)行交集運(yùn)算并返回運(yùn)算成果 |
SINTERSTORE | 對(duì)SET集合進(jìn)行交集運(yùn)算并將運(yùn)算成果存儲(chǔ)到一個(gè)新的SET集合中 |
SUNION | 對(duì)SET集合進(jìn)行并集運(yùn)算并返回運(yùn)算成果 |
SUNIONSTORE | 對(duì)SET集合進(jìn)行并集運(yùn)算并將運(yùn)算成果存儲(chǔ)到一個(gè)新的SET集合中 |
ZSET
ZSET和SET一樣,沒有反復(fù)元素,但和SET相比它有排序功能.
命令 | 作用 |
---|---|
ZADD | 向ZSET中添加元素 |
ZREM | 移除ZSET中的元素 |
ZCARD | 獲取ZSET中元素的個(gè)數(shù) |
ZSCORE | 獲取ZSET中元素的score值 |
ZRANK | 獲取ZSET中元素的索引 |
ZREMRANGEBYRANK | 從ZSET中移除指定索引規(guī)模內(nèi)的元素 |
ZREMRANGEBYSCORE | 從ZSET中移除指定score規(guī)模內(nèi)的元素 |
ZCOUNT | 獲取ZSET中score值在指定規(guī)模內(nèi)元素的個(gè)數(shù) |
ZRANGE | 獲取ZSET中索引在指定規(guī)模內(nèi)的元素,ZRANGE key start stop ,參數(shù)start=0且stop=-1時(shí)返回所有元素 |
集合間運(yùn)算
命令 | 作用 |
---|---|
ZINTERSTORE | 對(duì)ZSET集合進(jìn)行交集運(yùn)算并將運(yùn)算成果存儲(chǔ)到一個(gè)新的ZSET集合中 |
ZUNIONSTORE | 對(duì)ZSET集合進(jìn)行并集運(yùn)算并將運(yùn)算成果存儲(chǔ)到一個(gè)新的ZSET集合中 |
集合運(yùn)算對(duì)于value值相同的集合元素score值的處理分為三種方式:
乞降
取最年夜值
取最小值
執(zhí)行ZINTERSTORE命令(ZUNIONSTORE與之相似):
參數(shù)destination表現(xiàn)用于存儲(chǔ)計(jì)算結(jié)果的集合的key
參數(shù)numkeys表現(xiàn)參與運(yùn)算的集合數(shù),必選
AGGREGATE表現(xiàn)對(duì)score的操作方式,默認(rèn)為SUM
參數(shù)WEIGHTS表示權(quán)重,該參數(shù)比擬復(fù)雜:
參數(shù)WEIGHTS的個(gè)數(shù)和numkyes值相等
AGGREGATE值為SUM時(shí),對(duì)于結(jié)果集中的某個(gè)value為a的元素B,介入運(yùn)算的各個(gè)集合中value為a的元素的score值會(huì)分別和對(duì)應(yīng)的WEIGHTS值相乘然后再將各自相乘結(jié)果相加作為結(jié)果集中元素B的score值
AGGREGATE值為MIN或MAX時(shí),對(duì)于結(jié)果集中的某個(gè)value為a的元素B,參與運(yùn)算的各個(gè)集合中value為a的元素中score值最小或最大的那個(gè)(若有多個(gè),則依照命令行中指定集合的順序自左向右取第一個(gè)符合條件的集合中的元素)和對(duì)應(yīng)的WEIGHTS值相乘得到的值作為結(jié)果集中元素B的score值
規(guī)則略復(fù)雜,本身動(dòng)手寫幾遍就會(huì)明白了.ZINTERSTORE命令執(zhí)行效果圖:
以下為進(jìn)行聚攏運(yùn)算的示意圖:
以對(duì)score乞降的方式進(jìn)行交集運(yùn)算
以取score中最小值的方式進(jìn)行并集運(yùn)算
以對(duì)score乞降的方式進(jìn)行并集運(yùn)算
Sort
對(duì)LIST、SET、ZSET三種數(shù)據(jù)布局中的值進(jìn)行排序操作,默認(rèn)是正序排列.
Publish & Subscribe
宣布/訂閱模式
命令 | 作用 |
---|---|
PUBLISH | 向指定的頻道發(fā)送二進(jìn)制字符串消息(binary string messages) |
SUBSCRIBE | 訂閱指定的頻道已接受該頻道發(fā)送的消息 |
UNSUBSCRIBE | 撤消訂閱某頻道 |
下圖中展示的是使用redis-cli和stackexchange.redis進(jìn)行的pub/sub測(cè)試效果:
Transcation
命令 | 作用 |
---|---|
MULTI | 表示事務(wù)的開始 |
EXEC | 執(zhí)行事務(wù)中包括的命令 |
Redis中事務(wù)(調(diào)用MULTI表示事務(wù)的開始)所包括的命令會(huì)被放到一個(gè)隊(duì)列中,當(dāng)遇到EXEC命令后會(huì)不間斷的依次執(zhí)行隊(duì)列中的命令.
Redis中的事務(wù)和數(shù)據(jù)庫中的事務(wù)分歧,它沒有回滾操作.
Redis中的事務(wù),若某行命令執(zhí)行失敗不會(huì)影響其它命令的執(zhí)行(下圖中第二行命令執(zhí)行失敗,第一、三行勝利執(zhí)行):
StackExchange.Redis驅(qū)動(dòng)是用C#語言寫的Redis驅(qū)動(dòng),它的API在語義上和Redis命令是相似的,在這里列舉下驅(qū)動(dòng)中常用的幾個(gè)類:
ConnectionMultiplexer
表現(xiàn)一組相關(guān)的Redis服務(wù)器鏈接,StackExchage.Redis官方建議盡可能復(fù)用該對(duì)象.
IDatabase
該接口中定義了對(duì)5種數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的辦法
RedisDatabase
IDatabase的完成類
RedisKey
存儲(chǔ)到Redis中的key
RedisValue
存儲(chǔ)到Redis中的value,可用于表現(xiàn)STRING、LIST、SET結(jié)構(gòu)中存儲(chǔ)的數(shù)據(jù)
HashEntry
表現(xiàn)一個(gè)HASH鍵值對(duì)
SortedSetEntry
表現(xiàn)一個(gè)ZSET元素
ISubscript
訂閱接口
RedisChannel
表現(xiàn)發(fā)布/訂閱中的頻道名
Subscription
ConnectionMultiplexer中的公有密封類,封裝和訂閱相關(guān)的信息
Redis是一種NoSql數(shù)據(jù)庫,Redis服務(wù)器上默認(rèn)有16個(gè)數(shù)據(jù)庫,Redis常被拿來和Memcache做比較,網(wǎng)上有很多這方面的文章,各位看官請(qǐng)自行搜索.本文著重介紹了Redis中的5中數(shù)據(jù)結(jié)構(gòu)和一些常用的命令,對(duì)于第三方驅(qū)動(dòng)則一筆帶過,因?yàn)樵诹私饬薘edis自己之后,可以很快的掌握第三方驅(qū)動(dòng)的使用.
優(yōu)待業(yè)500萬陽光待業(yè)基金等你拿:
http://www.ujiuye.com/zt/jyfc/?wt.bd=fq37300
優(yōu)待業(yè)官網(wǎng):http://www.ujiuye.com/?wt.bd=fq37300
歡迎參與《Redis中的數(shù)據(jù)結(jié)構(gòu)與常用命令,學(xué)習(xí)Redis從這開始》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/10675.html