成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Redis常用數(shù)據(jù)類型操作指令有哪些

這篇文章將為大家詳細(xì)講解有關(guān)redis常用數(shù)據(jù)類型操作指令有哪些,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

目前創(chuàng)新互聯(lián)公司已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、海鹽網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

Redis 命令用于在 redis 服務(wù)上執(zhí)行操作。要在 redis 服務(wù)上執(zhí)行命令需要一個(gè) redis
客戶端??梢允褂?code>redis-cli命令啟動(dòng)Redis客戶端。完整的啟動(dòng)命令是redis-cli -h host -p port -a password。

Redis常用的數(shù)據(jù)類型有五種:stringhash、list、setzset(sorted set有序集合)。學(xué)習(xí)這些類型之前還需要學(xué)習(xí)常用命令Key的管理。下面詳細(xì)介紹這些類型:更詳細(xì)的API可以參照此處

常用命令Key管理

Key的應(yīng)用場(chǎng)景:

  • 限時(shí)的優(yōu)惠活動(dòng)信息。

  • 網(wǎng)站的數(shù)據(jù)緩存(對(duì)于一些需要定時(shí)更新的數(shù)據(jù),如積分排行榜)

  • 手機(jī)驗(yàn)證碼

  • 限制網(wǎng)站訪客訪問頻率(例如1分鐘最多訪問10次)

Key的命名建議:
key名稱區(qū)分大小寫;key不要太長(zhǎng),盡量不超過1024字節(jié),太長(zhǎng)會(huì)降低查找效率;在一個(gè)項(xiàng)目中key最好使用統(tǒng)一的命名模式,如user:id:password

keys pattern           返回滿足給定pattern的所有key,可以模糊匹配,如keys abc*代表abc開頭的key
exists key            判斷一個(gè)key是否存在,存在返回1,不存在返回0
expire key second        設(shè)定一個(gè)key的活動(dòng)時(shí)間(秒)
pexpire key milliseconds    設(shè)定一個(gè)key的活動(dòng)時(shí)間(毫秒)
del key            刪除一個(gè)key
ttl key             返回一個(gè)key的剩余時(shí)間,key不存在時(shí)返回-2;key存在但未設(shè)置剩余生存時(shí)間返回-1
persist key           取消過期時(shí)間
select dbindex         選擇數(shù)據(jù)庫,默認(rèn)有16個(gè),索引從0開始
move key, dbindex        移動(dòng)當(dāng)前數(shù)據(jù)庫中的key到dbindex數(shù)據(jù)庫
randomkey            隨機(jī)返回一個(gè)key
keyrename key, key2      重命名key
dbsize              返回當(dāng)前數(shù)據(jù)庫中key的數(shù)量
info               查看數(shù)據(jù)庫信息
config get *           實(shí)時(shí)存儲(chǔ)收到的請(qǐng)求,返回相關(guān)的配置
type(key)             返回值的類型

flushdb             刪除當(dāng)前選擇數(shù)據(jù)庫中的所有key
flushall            刪除所有數(shù)據(jù)庫中的所有key

一、字符串String

String是redis最基本的類型,一個(gè)鍵最大能存儲(chǔ)523MB。String類型是二進(jìn)制安全的。意思是redis的String可以包含任何數(shù)據(jù)。比如圖片或者序列化的對(duì)象 。

String的應(yīng)用場(chǎng)景:

  • String通常用于保存單個(gè)字符串或JSON字符串?dāng)?shù)據(jù)。

  • 因?yàn)镾tring是二進(jìn)制安全的,可以把圖片文件的內(nèi)容作為字符串來存儲(chǔ)。

  • 計(jì)數(shù)器(常規(guī)key-value緩存應(yīng)用,粉絲數(shù)、微博數(shù)量,投票等)

INCR 等指令本身就具有原子操作的特性,所以完全可以利用 Redis 的 NCR、INCRBY、DECR、DECRBY 等指令來實(shí)現(xiàn)原子計(jì)數(shù)的效果。假如,在某種場(chǎng)景下有 3 個(gè)客戶端同時(shí)讀取了 minum 的值(值為 2),然后對(duì)其同時(shí)進(jìn)行了加 1 的操作,那么,最后 bynum 的值一定是 5。不少網(wǎng)站都利用 reds 的這個(gè)特性來實(shí)現(xiàn)業(yè)務(wù)上的統(tǒng)計(jì)計(jì)數(shù)需求。

賦值語法
set key value        為key賦予值value,多次設(shè)置會(huì)覆蓋舊值且無視類型
setnx key value       為key賦予值value,如果key已存在,則不設(shè)置并返回0,否則設(shè)置并返回1。是解決分布式鎖的方案之一。
setex key time value    為key賦予值value并設(shè)定過期時(shí)間time,到期后key和value都清除。
setrange key start end   設(shè)置指定區(qū)間范圍內(nèi)的值,下標(biāo)從0開始,替換字符串。

取值語法

get key           獲取指定key的value值,key不存在則返回nil
getrange key start end   獲取指定key的value的子字符串,包括start和end角標(biāo)
getbit key offset      對(duì) key 所儲(chǔ)存的字符串值,獲取指定偏移量的bit(二進(jìn)制)
getset key value      為key設(shè)新值,同時(shí)返回舊值,key不存在返回nil
substr(key, start, end)  返回名稱為key的string的value的子串
刪值語法
del key                  同Key

批量寫入
mset k1 v1 k2 v2...kn vn        批量設(shè)置多個(gè)的值

批量讀出

mget k1 k2 ... kn           獲取多個(gè)key的值
自增自減
incr key                key的value對(duì)應(yīng)+1
incrby key integer           key的value對(duì)應(yīng)+integer
decr key                key的value對(duì)應(yīng)-1
decrby key integer           key的value對(duì)應(yīng)-integer

字符串拼接
append key value            將value附加到指定key的末尾

msetnx(key1, value1...keyN, valueN)  同時(shí)設(shè)置多個(gè)key和value,僅key之前都不存在時(shí)生效
字符串長(zhǎng)度
strlen key                返回key的字符長(zhǎng)度

二、雙重鍵值對(duì)Hash

Hash類型是String類型的field和value的映射表。Hash特別適合用于存儲(chǔ)對(duì)象,相比String可以占用更少的磁盤空間,可以看成具有key和value的map容器。Redis中每個(gè)hash可以存儲(chǔ)(2^32)-1個(gè)鍵值對(duì)。

Hash的應(yīng)用場(chǎng)景:

  • 通常用來存儲(chǔ)一個(gè)用戶信息對(duì)象數(shù)據(jù)。

  • Redis的Hash實(shí)際是將內(nèi)部存儲(chǔ)的value作為一個(gè)HashMap。

賦值語法

hset key field value          為指定key設(shè)置field和value
hsetnx key field value         為指定key設(shè)置field和value,如果key已存在則不生效。
hmset key f1 v1 f2 v2 ... fn vn   同時(shí)將多個(gè)field-value(域值對(duì))設(shè)置到哈希表的key中。

取值語法

hget key field             根據(jù)field獲取value值
hmget key f1 f2 ... fn        根據(jù)多個(gè)field獲取所有的value值
hgetall key              獲取Hash表中所有的字段和值
hkeys key               獲取所有Hash表中的字段
hvals key               獲取所有Hash表中的字段對(duì)應(yīng)的value
hexists key field           查看Hash表Key中,指定的字段是否存在
hlen key                獲取Hash表中字段的數(shù)量

刪除語法

hdel key field1 field2 ... fieldn  刪除一個(gè)或多個(gè)Hash表的字段
del key                 同Key

增減語法

hincrby key field integer       為Hash表Key中field對(duì)應(yīng)的value增加integer
hincrbyfloat key field increment   為Hash表Key中field對(duì)應(yīng)的value增加increment

三、雙端鏈表List

List類型是一個(gè)鏈表結(jié)構(gòu)的集合,主要功能有push、pop、獲取元素等。更詳細(xì)的說,List類型是一個(gè)雙端鏈表的結(jié)構(gòu),可以通過相關(guān)的操作進(jìn)行集合頭部或者尾部元素的添加和刪除,List既可以作為棧,又可以作為隊(duì)列,能夠滿足絕大多數(shù)需求。

  • 如果鍵不存在,創(chuàng)建新的鏈表。

  • 如果鍵已存在,新增內(nèi)容。

  • 如果值全移除,對(duì)應(yīng)的鍵也就消失了。

  • 鏈表操作無論是頭和尾效率都極高,但中間元素的操作效率很低。

應(yīng)用場(chǎng)景

  • 對(duì)數(shù)據(jù)量大的集合數(shù)據(jù)刪減
    列表數(shù)據(jù)顯示、關(guān)注列表、粉絲列表、留言評(píng)價(jià)等…分頁、熱點(diǎn)新聞(Top10)等。利用lrange可以很方便的實(shí)現(xiàn)分頁的功能,在博客系統(tǒng)中,每篇博文的評(píng)論也可以存入一個(gè)單獨(dú)的list中。

  • 任務(wù)隊(duì)列
    在處理web客戶端發(fā)送的命令請(qǐng)求時(shí),某些操作的執(zhí)行時(shí)間可能會(huì)比我們預(yù)期的更長(zhǎng)一些,通過將待執(zhí)行任務(wù)的相關(guān)信息放入隊(duì)列里面,并在之后對(duì)隊(duì)列進(jìn)行處理,用戶可以推遲執(zhí)行那些需要一段時(shí)間才能完成的操作,這種將工作交給任務(wù)處理器來執(zhí)行的做法被稱為任務(wù)隊(duì)列(task queue)。list通??梢杂脕韺?shí)現(xiàn)一個(gè)消息隊(duì)列,而且可以確保先后順序。

賦值語法

lpush key value1 value2 ... valueN    將一個(gè)或多個(gè)值插入到列表頭部(從左側(cè)添加)
rpush key value1 value2 ... valueN     將一個(gè)或多個(gè)值插入到列表頭部(從右側(cè)添加)
lpushx key value              將一個(gè)值插入到已存在的列表頭部(最左邊),如果列表不存在,操作無效。
rpushx key value              將一個(gè)值插入到已存在的列表尾部(最右邊),如果列表不存在,操作無效。

取值語法

llen key             獲取列表長(zhǎng)度
lindex key index         通過索引獲取列表的元素
lrange key start stop      獲取列表指定范圍內(nèi)的元素

刪除語法

lpop key            移除并獲取列表的第一個(gè)元素(從左側(cè)移除)
lpop key            移除并獲取列表的最后一個(gè)元素(從右側(cè)移除)
lrem key count value      刪除count個(gè)值為value的key
blpop key1 key2 timeout    移除并獲取列表的第一個(gè)元素,如果列表沒有元素會(huì)阻塞列表,直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止
brpop key1 key2 timeout    移除并獲取列表的最后一個(gè)元素,如果列表沒有元素會(huì)阻塞列表,直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止
ltrim key start stop      對(duì)一個(gè)列表進(jìn)行修剪,只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間內(nèi)的元素都刪除。

修改語法

lset key index value           通過索引設(shè)置列表元素的值
linsert key before|after world value   在列表的某個(gè)元素world前或者后插入元素value。

高級(jí)命令

rpoplpush source destination        移除source列表的最后一個(gè)元素,并將該元素添加到destination列表,并返回。(可以對(duì)自己本身操作,類似隊(duì)列)
brpoplpush source destination timeout   移除source列表的最后一個(gè)元素,并將該元素添加到destination列表,并返回;如果source 列表沒有元素會(huì)阻塞列表知道等待超時(shí)或發(fā)現(xiàn)可移除元素為止。

四、無序集合Set

Set 是 String 類型的無序集合。集合成員是唯一的,集合中不能出現(xiàn)重復(fù)的數(shù)據(jù)。
Redis 中的集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是 O(1)。
集合中最大的成員數(shù)為 232 - 1 (4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。
類似于JAVA中的 Hashtable集合

  • Redis的set的底層存儲(chǔ)結(jié)構(gòu)特別神奇,底層使用了intset和hashtable兩種數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)的,intset我們可以理解為數(shù)組,hashtable就是普通的哈希表(key為set的值,value為null)。

  • intset內(nèi)部其實(shí)是一個(gè)數(shù)組(int8_t coentents[]數(shù)組),而且存儲(chǔ)數(shù)據(jù)的時(shí)候是有序的,因?yàn)樵诓檎覕?shù)據(jù)的時(shí)候是通過二分查找來實(shí)現(xiàn)的。

應(yīng)用場(chǎng)景

  • 對(duì)兩個(gè)集合間的數(shù)據(jù)[計(jì)算]進(jìn)行交集、并集、差集運(yùn)算

  • 以非常方便的實(shí)現(xiàn)如共同關(guān)注、共同喜好、二度好友等功能。對(duì)上面的所有集合操作,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存儲(chǔ)到一個(gè)新的集合中。

  • 利用唯一性,可以統(tǒng)計(jì)訪問網(wǎng)站的所有獨(dú)立 IP

賦值語法

sadd key member1 member2 ... memberN   向集合添加一個(gè)或多個(gè)成員

取值語法

scard key                  獲取集合的成員數(shù)
smembers key                返回集合中的所有成員
sismember key member           判斷 member 元素是否是集合 key 的成員(開發(fā)中:驗(yàn)證是否存在判斷)
srandmember key count            返回集合中一個(gè)或多個(gè)隨機(jī)數(shù)

刪除語法

srem key member1 member2...memberN     移除集合中一個(gè)或多個(gè)成員
spop kye count               移除并返回集合中的一個(gè)或多個(gè)隨機(jī)元素

smove source destincation member      將member元素從source集合移動(dòng)到destination集合

差集語法

sdiff key1 key2               返回給定所有集合的差集(左側(cè))
sdiffstore destination key1 key2      返回給定所有集合的差集并存儲(chǔ)在 destination 中(destination中原有的數(shù)據(jù)清除)

交集語法

sinter key1 key2               返回給定所有集合的交集(共有數(shù)據(jù))
sinterstore destination key1 key2     返回給定所有集合的交集并存儲(chǔ)在 destination 中

并集語法
sunion key1 key2               返回所有給定集合的并集
sunionstore destination key1 key2      所有給定集合的并集存儲(chǔ)在 destination 集合中

五、有序集合Zset

Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復(fù)的成員。不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序。zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。

  • 之前的set是k1 v1 v2

  • 現(xiàn)在的zset是k1 score1 v1 score2 v2

應(yīng)用場(chǎng)景

  • 排行榜
    ①twitter 的public timeline可以以發(fā)表時(shí)間作為score來存儲(chǔ),這樣獲取時(shí)就是自動(dòng)按時(shí)間排好序的。
    ②一個(gè)存儲(chǔ)全班同學(xué)成績(jī)的Sorted Set,其集合value可以是同學(xué)的學(xué)號(hào),而score就可以是其考試得分,這樣在數(shù)據(jù)插入集合的時(shí)候,就已經(jīng)進(jìn)行了天然的排序。
    ③用Sorted Set來做帶權(quán)重的隊(duì)列,比如普通消息的score為1,重要消息的score為2,然后工作線程可以選擇按score的倒序來獲取工作任務(wù)。讓重要的任務(wù)優(yōu)先執(zhí)行。

賦值語法
zadd key score1 member1 score2 member2  向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù)

取值語法
zcard key                  獲取有序集合的成員數(shù)
zcount key min max             計(jì)算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù)
zrank key member              返回有序集合中指定成員的索引
zrange key start stop [withscores]     通過索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員(低到高)
zrevrange key start stop [withscores]   通過索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員(高到低)
zlexcount key,min,max           在有序集合中計(jì)算指定字典區(qū)間內(nèi)成員數(shù)量

刪除語法
del key                   移除集合
zrem key member [member ...]        移除有序集合中的一個(gè)或多個(gè)成員
zremrangebyrank key start stop       移除有序集合中給定的排名區(qū)間的所有成員(第一名是0)(低到高排序)
zremrangebyscore key min max        移除有序集合中給定的分?jǐn)?shù)區(qū)間的所有成員

分?jǐn)?shù)自增
zincrby key ncrement member        有序集合中對(duì)指定成員的分?jǐn)?shù)加上增量increment

六、HyperLoglog

Redis在2.8.9版本添加了HyperLoglog結(jié)構(gòu)。該結(jié)構(gòu)是用來做基數(shù)統(tǒng)計(jì)的算法,

優(yōu)點(diǎn):無論輸入元素多少,計(jì)算基數(shù)所需要的空間總是固定的,并且很小。

缺點(diǎn):只會(huì)根據(jù)輸入元素的計(jì)算基數(shù),而不會(huì)存儲(chǔ)輸入元素本身,索引不能像集合那樣,返回輸入的各個(gè)元素。

什么是基數(shù)?
比如數(shù)據(jù)集{1,2,3,3,4,5,5},那么這個(gè)數(shù)據(jù)集的基數(shù)集為{1,2,3,4,5},基數(shù)為5。所謂基數(shù)估計(jì)就是在誤差可接受的范圍內(nèi),快速計(jì)算基數(shù)。
為什么要使用HyperLogLog?
傳統(tǒng)的統(tǒng)計(jì)一個(gè)對(duì)象的基數(shù)值需要12M內(nèi)存,如果統(tǒng)計(jì)1萬個(gè)對(duì)象,需要將近120G內(nèi)存,無法廣泛應(yīng)用于大數(shù)據(jù)場(chǎng)景;而使用了HyperLogLog,統(tǒng)計(jì)1億個(gè)數(shù)據(jù)的基數(shù)值,大約需要12M,內(nèi)存占用減少明顯。

Redis常用數(shù)據(jù)類型操作指令有哪些
pfadd key element1 element2 ... elementN         添加指定元素到HyperLogLog中
pfcount key                        返回給定HyperLogLog的基數(shù)估算值
pfmerge destkey sourcekey1 sourcekey2 ...sourcekeyN   將多個(gè)HyperLogLog合并為一個(gè)HyperLogLog

關(guān)于“Redis常用數(shù)據(jù)類型操作指令有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

文章題目:Redis常用數(shù)據(jù)類型操作指令有哪些
轉(zhuǎn)載注明:http://jinyejixie.com/article6/jdogig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作、小程序開發(fā)品牌網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
高要市| 唐海县| 延津县| 吐鲁番市| 宾川县| 和平县| 林西县| 龙陵县| 东光县| 丰镇市| 永定县| 台山市| 澎湖县| 托克托县| 公安县| 攀枝花市| 石林| 化隆| 搜索| 延庆县| 黄浦区| 西乌珠穆沁旗| 封丘县| 溧水县| 凉山| 凭祥市| 桐乡市| 沁源县| 洛浦县| 六盘水市| 水富县| 安图县| 泸定县| 咸宁市| 城市| 额济纳旗| 汶川县| 贵阳市| SHOW| 满城县| 乐昌市|