国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis 數(shù)據(jù)結(jié)構(gòu)詳解

這篇具有很好參考價值的文章主要介紹了Redis 數(shù)據(jù)結(jié)構(gòu)詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

分類 編程技術(shù)

Redis 數(shù)據(jù)類型分為:字符串類型、散列類型、列表類型、集合類型、有序集合類型。

Redis 這么火,它運行有多塊?一臺普通的筆記本電腦,可以在1秒鐘內(nèi)完成十萬次的讀寫操作。

原子操作:最小的操作單位,不能繼續(xù)拆分。即最小的執(zhí)行單位,不會被其他命令插入。高并發(fā)下不存在競態(tài)條件。

KEY 的命名:一個良好的建議是 article:1:title 來存儲 ID 為 1 的文章的標(biāo)題。

Redis 數(shù)據(jù)結(jié)構(gòu)詳解,redis,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫


一、前言

  • 1、獲取key的列表:KEYS pattern 通配符有 ?*[] 和轉(zhuǎn)義 \。
  • 2、key 是否存在: EXISTS key 存在返回 1,不存在返回 0。
  • 3、建立 key 和刪除 key:SET key 和 DEL key。
  • 4、根據(jù) key 獲取該鍵所存儲的 redis 數(shù)據(jù)類型:TYPE key。返回是 string、list、hash、set、zset。下面會對這5種返回的 redis 數(shù)據(jù)類型逐一講解。
  • 5、rename oldkey newkey:對 key 重命名,如果 newkey 存在則覆蓋。
  • 6、renamenx oldkey newkey:對 key 重命名,如果 newkey 存在則不覆蓋。
  • 7、randomkey:隨即返回一個 key
  • 8、move key db-index:將 key 移動到指定的數(shù)據(jù)庫中,如果 key 不存在或者已經(jīng)在該數(shù)據(jù)庫中,則返回 0。成功則返回 1。

二、Redis數(shù)據(jù)類型 Redis數(shù)據(jù)命令

1、Redis數(shù)據(jù)類型一字符串類型:這個很好理解,一個key存儲一個字符串。如果你要存數(shù)據(jù)呢?轉(zhuǎn)換成Json或者其他的字符串序列化。

2、Redis數(shù)據(jù)命令一字符串類型:

  • 1)賦值:SET key value。如 set hello world
  • 2)取值:GET key。如 get hello。返回是 world
  • 3)自增:INCR key。就是 Mysql的AUTO_INCREMENT。每次執(zhí)行 INCR key時,該key的值都會+1.若key不存在,則先建立一個0,然后+1,返回 1。如果值不是整數(shù)則報錯。該操作是原子操作。
  • 4)自減:DECR key。將指定 key 的值減少 1。 如 DECR num,就是 num-1
  • 5)自增 N:INCRBY key increment 用來給指定 key 的值加 increment。如 INCRBY num 5 就是 num+5
  • 6)自減 N:DECRBY key increment 用來給指定 key 的值減 increment。如 DECRBY num 5 就是 num-5
  • 7)增加浮點數(shù):INCRBYFLOAT key increment。
  • 8)向尾部追加:APPEND key value。如set test:key 123、append test:key 456、get test:key 就是 123456
  • 9)獲取長度:STRLEN key。
  • 10)同時給多個 key 賦值:MSET title 這是標(biāo)題 description 這是描述 content 這是內(nèi)容。
  • 11)同時獲取多個 key 的值:MGET title description content
  • 12)位操作之獲取:GETBIT key offset。如字符 a 在 redis 中的存儲為 01100001(ASCII為98),那么 GETBIT key 2 就是 1,GET key 0 就是 0。
  • 13)位操作之設(shè)置:SETBIT key offset value。如字符 a 在 redis 中的存儲為 01100001(ASCII為98),那么 SETBIT key 6 0,SETBIT key 5 1 那么 get key 得到的是 b。因為取出的二進制為 01100010。
  • 14)位操作之統(tǒng)計:BITCOUNT key [start] [end]:BITCOUNT key 用來獲取 key 的值中二進制是 1 的個數(shù)。而 BITCOUNT key start end 則是用來統(tǒng)計key的值中在第 start 和 end 之間的子字符串的二進制是 1 的個數(shù)(好繞啊)。
  • 15)位操作之位運算:BITOP operation resultKey key1 key2。operation 是位運算的操作,有 AND,OR,XOR,NOT。resultKey 是把運算結(jié)構(gòu)存儲在這個 key 中,key1 和 key2 是參與運算的 key,參與運算的 key 可以指定多個。

3、Redis數(shù)據(jù)類型二散列類型:

Redis 是以字典(關(guān)聯(lián)數(shù)組)的形式存儲的,一個 key 對應(yīng)一個 value。在字符串類型中,value 只能是一個字符串。那么在散列類型,也叫哈希類型中,value 對應(yīng)的也是一個字典(關(guān)聯(lián)數(shù)組)。那么就可以理解,Redis 的哈希類型/散列類型中,key 對應(yīng)的 value 是一個二維數(shù)組。但是字段的值只可以是字符串。也就是說只能是二維數(shù)組,不能有更多的維度。


4、Redis 數(shù)據(jù)命令二散列類型:

  • 1)賦值:HSET key field value。如 hset user name lane。hset user age 23
  • 2)取值:HGET key field。如 hget user name,得到的是 lane。
  • 3)同一個key多個字段賦值:HMSET key field1 value1 field2 value2...
  • 4)同一個KEY多個字段取值:HMGET key field1 fields2...
  • 5)獲取KEY的所有字段和所有值:HGETALL key。如 HGETALL user 得到的是 name lane age 23。每個返回都是獨立的一行。
  • 6)字段是否存在:HEXISTS key field。存在返回 1,不存在返回 0
  • 7)當(dāng)字段不存在時賦值:HSETNX key field value。如果 key 下面的字段 field 不存在,則建立 field 字段,且值為 value。如果 field 字段存在,則不執(zhí)行任何操作。它的效果等于 HEXISTS + HSET。但是這個命令的優(yōu)點是原子操作。再高的并發(fā)也不會怕怕。
  • 8)自增 N:HINCREBY key field increment。同字符串的自增類型,不再闡述。
  • 9)刪除字段:DEL key field1 field2... 刪除指定KEY的一個或多個字段。
  • 10)只獲取字段名:HKEYS key。與 HGETALL 類似,但是只獲取字段名,不獲取字段值。
  • 11)只獲取字段值:HVALS key。與 HGETALL 類似,但是只獲取字段值,不獲取字段名。
  • 12)獲取字段數(shù)量:HLEN key。

5、Redis 數(shù)據(jù)類型三列表類型

列表類型存儲了一個有序的字符串列表。常用的操作是向兩端插入新的元素。時間復(fù)雜度為 O(1)。結(jié)構(gòu)為一個鏈表。記錄頭和尾的地址??吹竭@里,Redis 數(shù)據(jù)類型的列表類型一個重大的作用呼之欲出,那就是隊列。新來的請求插入到尾部,新處理過的從頭部刪除。另外,比如微博的新鮮事。比如日志。列表類型就是一個下標(biāo)從 0 開始的數(shù)組。由于是鏈表存儲,那么越靠近頭和尾的元素操作越快,越靠近中間則越慢。


6、Redis 數(shù)據(jù)命令三列表類型:

  • 1)向頭部插入:LPUSH key value1 value2...。返回增加后的列表長度。
  • 2)向尾部插入:RPUSH key value1 value2...。返回增加后的列表長度。
  • 3)從頭部彈出:LPOP key。返回被彈出的元素值。該操作先刪除key列表的第一個元素,再將它返回。
  • 4)從尾部彈出:RPOP key。返回被彈出的元素值。
  • 5)列表元素個數(shù):LLEN key。key 不存在返回 0。
  • 6)獲取列表的子列表:LRANGE start end。返回第 start 個到第 end 個元素的列表。包含 start 和 end。支持負(fù)數(shù)索引。-1 表示最后一個元素,-2 表示倒數(shù)第二個元素。
  • 7)刪除列表中指定值:LREM key count value。刪除 key 這個列表中,所有值為 value 的元素,只刪除 count。如果有 count+1 個,那么就保留最后一個。count 不存在或者為 0,則刪除所有的。如果 count 大于 0,則刪除從頭到尾的 count 個,如果 count 小于 0,則刪除從尾到頭的 count 個。
  • 8)獲取指定索引值:LINDEX key index。如LINDEX key 0就是列表的第一個元素。index可以是負(fù)數(shù)。
  • 9)設(shè)置索引和值:LSET key index value。這個操作只是修改指定 key 且指定 index 的值。如果 index 不存在,則報錯。
  • 10)保留片段,刪除其它:LTRIM key start end。保留 start 到 end 之間的所有元素,含 start 和 end。其他全部刪除。
  • 11)向列表插入元素:LINSERT key BEFORE/AFTER value1 value2。從列表頭開始遍歷,發(fā)現(xiàn)值為 value1 時停止,將 value2 插入,根據(jù) BEFORE 或者 AFTER 插入到 value1 的前面還是后面。
  • 12)把一個列表的一個元素轉(zhuǎn)到另一個列表:RPOPLPUSH list1 list2。將列表 list1 的右邊元素刪除,并把該與元素插入到列表 list2 的左邊。原子操作。

7、Redis 數(shù)據(jù)類型四集合類型:

集合類型是為了方便對多個集合進行操作和運算。集合中每個元素不同且沒有順序的概念,每個元素都是且只能是一個字符串。常用操作是對集合插入、刪除、判斷等操作。時間復(fù)雜度尾 O(1)??梢赃M行交集、并集、差集運算。例如文章 1 的有 3 個標(biāo)簽,是一個 Redis 數(shù)據(jù)類型集合類型存儲。文章 2 有 3 個標(biāo)簽,有一個 Redis 數(shù)據(jù)類型集合類型存儲。文章是 1 是 mysql,文章 2 是講 redis。那么交集是不是就交出了一個數(shù)據(jù)庫?(假設(shè)數(shù)據(jù)庫這個tag在兩篇文字都有)。集合類型在 redis 中的存儲是一個值為空的散列表。


8、Redis 數(shù)據(jù)命令四集合類型:

  • 1)增加:SADD key value。
  • 2)刪除:SREM key value。
  • 3)獲取指定集合的所有元素:SMEMBERS key。
  • 4)判斷某個元素是否存在:SISMEMBER key value。
  • 5)差集運算:SDIFF key1 key2...。對多個集合進行差集運算。
  • 6)交集運算:SINNER key1 key2...。對多個集合進行交集運算。
  • 7)并集運算:SUNION key1 key2...。對多個集合進行并集運算。
  • 8)獲取集合中元素個數(shù):SCARD key。返回集合中元素的總個數(shù)。
  • 9)對差集、交集、并集運算的結(jié)果存放在一個指定的 key 中:SDIFFSTORE storekey key1 key2。對 key1 和 key2 求差集,結(jié)果存放在 key 為 storekey 的集合中。SINNERSTORE 和 SUNIONSTORE 類似。
  • 10)獲取集合中的隨即元素:SRANDMEMBER key [count]。參數(shù) count 可選,如果 count 不存在,則隨即一個。count 大于 0,則是不重復(fù)的 count 個元素。count 小于 0,則是一共 |count|個 元素,可以重復(fù)。
  • 11)隨即彈出一個元素:SPOP key。隨即從集合中彈出一個元素并刪除,將該元素的值返回。

9、Redis 數(shù)據(jù)類型五有序集合類型:

集合類型是無序的,每個元素是唯一的。那么有序集合就是有序的,每個元素是唯一的。有序集合類型和集合類型的差別是,有序集合為每個元素配備了一個屬性:分?jǐn)?shù)。有序集合就是根據(jù)分?jǐn)?shù)來排序的。有序集合是使用散列表和跳躍表實現(xiàn)的。所以和列表相比,操作中間元素的速度也很快。時間復(fù)雜度尾 O(log(N))。Redis 數(shù)據(jù)類型中的有序集合類型比 Redis 數(shù)據(jù)類型中的列表類型更加耗費資源。文章來源地址http://www.zghlxwxcb.cn/news/detail-755758.html


10、Redis數(shù)據(jù)命令五有序集合類型

  • 1)增加:ZADD key sorce1 value1 sorce2 value2...。
  • 2)獲取分?jǐn)?shù):ZSCORE key value。獲取key的有序集合中值為 value 的元素的分?jǐn)?shù)。
  • 3)獲取排名在某個范圍內(nèi)的元素列表:ZRANFGE key start stop [WITHSCORE]。獲取排名在 start 和 end 之間的元素列表,包含 start 和 end2 個元素。每個元素一行。如果有WITHSCORE參數(shù),則一行元素值,一行分?jǐn)?shù)。時間復(fù)雜度為O(LOGn+m)。如果分?jǐn)?shù)相同,則 0<0
  • 4)獲取指定分?jǐn)?shù)范圍的元素:ZRANGEBYSCORE key min max [WITHSCORE] [LIMIT offset count]。獲取分?jǐn)?shù)在 min 和 max 之間的元素列表。含兩頭。每個元素一行。如果有 WITHSCORE 參數(shù),則一行元素值,一行分?jǐn)?shù)。如果 min 大于 max 則順序反轉(zhuǎn)。
  • 5)為某個元素增加分?jǐn)?shù):ZINCRBY key increment value。指定的有序集合的值為 value 的元素的分?jǐn)?shù) +increment。返回值后更改后的分?jǐn)?shù)。
  • 6)獲取集合中元素的數(shù)量:ZCARD key。
  • 7)獲取指定分?jǐn)?shù)范圍內(nèi)的元素個數(shù):ZCOUNT key min max。
  • 8)刪除一個或多個元素:ZREM key value1 value2...
  • 9)根據(jù)排名范圍刪除元素:ZREMRANGEBYRANK key start end。刪除排名在 start 和 end 中的元素。
  • 10)按照分?jǐn)?shù)范圍刪除元素:ZREMRANGEBYSCORE key min max。
  • 11)獲得元素排名(正序):ZRANK key value。獲取 value 在該集合中的從小到大的排名。
  • 12)獲得元素排名(倒序):ZREVRANK key value。獲取 value 在該集合中從大到小的排名。
  • 13)有序集合的交集:ZINTERSTORE storekey key1 key2...[WEIGHTS weight [weight..]] [AGGREGATE SUM|MIN|MAX]。用來計算多個集合的交集,結(jié)果存儲在 storekey中。返回值是 storekey 的元素個數(shù)。AGGREGATE 為 SUM 則 storekey 集合的每個元素的分?jǐn)?shù)是參與計算的集合分?jǐn)?shù)和。MIN 是參與計算的分?jǐn)?shù)最小值。MAX 是參與計算分?jǐn)?shù)最大值。WEIGHTS 設(shè)置每個集合的權(quán)重,如 WEIGHTS 1 0.1。那么集合A的每個元素分?jǐn)?shù) * 1,集合B的每個元素分?jǐn)?shù) * 0.1
  • 14)有序集合的并集:ZUNIONSTORE storekey key1 kye2...[WEIGHTS weight [weight..]] [AGGREGATE SUM|MIN|MAX]

到了這里,關(guān)于Redis 數(shù)據(jù)結(jié)構(gòu)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)字典(Dictionary)詳解

    Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)字典(Dictionary)詳解

    上個篇章回顧,我們上個章節(jié),講了Redis中的快表(QuickList),它是一種特殊的數(shù)據(jù)結(jié)構(gòu),用于存儲一系列的連續(xù)節(jié)點,每個節(jié)點可以是一個整數(shù)或一個字節(jié)數(shù)組??毂硎荝edis中的底層數(shù)據(jù)結(jié)構(gòu)之一,常用于存儲有序集合(Sorted Set)等數(shù)據(jù)類型的底層實現(xiàn)。 那么本章講解Red

    2024年02月09日
    瀏覽(23)
  • Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)壓縮列表(ZipList)詳解

    Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)壓縮列表(ZipList)詳解

    前面的Redis從入門到精通的基礎(chǔ)篇和進階篇都是在使用層面和概念層面,本章節(jié),我們了解一下redis的底層數(shù)據(jù)結(jié)構(gòu),上幾個章節(jié),我們講了SDS,字典 。本章節(jié)我們聊一下ZipList。 壓縮列表(ZipList)就是redis為了節(jié)約內(nèi)存而設(shè)計開發(fā)的數(shù)據(jù)結(jié)構(gòu),并且作為列表鍵和哈希鍵的底層

    2024年02月08日
    瀏覽(25)
  • Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)整數(shù)集(IntSet)詳解

    Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)整數(shù)集(IntSet)詳解

    上個篇章回顧,我們上個章節(jié)我們學(xué)習(xí)了《Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)字典(Dictionary)詳解》,我們從源碼層了解字典是一種以鍵值對(key-value)形式存儲數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。在 Redis 中,字典使用哈希表來實現(xiàn)。哈希表是一種以常數(shù)時間復(fù)雜度 O(1) 進行插入、刪

    2024年02月09日
    瀏覽(20)
  • 【Redis】內(nèi)存數(shù)據(jù)庫Redis進階(Redis哨兵集群)

    【Redis】內(nèi)存數(shù)據(jù)庫Redis進階(Redis哨兵集群)

    基于 Redis 集群解決單機 Redis 存在的四大問題: ??搭建一個三節(jié)點形成的 Sentinel 集群,來監(jiān)管 Redis 主從集群。 ??【Redis】內(nèi)存數(shù)據(jù)庫Redis進階(Redis主從集群) ??架構(gòu)圖: 三個sentinel實例信息: 節(jié)點 IP PORT s1 192.168.150.101 27001 s2 192.168.150.101 27002 s3 192.168.150.101 27003 之前

    2024年02月14日
    瀏覽(19)
  • Redis學(xué)習(xí)路線(2)—— Redis的數(shù)據(jù)結(jié)構(gòu)

    一、Redis的數(shù)據(jù)結(jié)構(gòu) Redis是一個Key-Value的數(shù)據(jù)庫,key一般是String類型,不過Value的類型卻有很多: String: Hello World Hash: {name: \\\"jack\\\", age: 21} List: [A - B - C - C] Set: {A, B, C} SortedSet: {A: 1, B: 2, C: 3} GEO: {A: (120.3, 30.5)} BitMap: 0110110101110101011 HyperLog: 0110110101110101011 由于Redis對數(shù)據(jù)

    2024年02月15日
    瀏覽(26)
  • mysql數(shù)據(jù)庫遞歸查詢樹形結(jié)構(gòu)(適用場景:菜單多級分類,多級關(guān)聯(lián)評論查詢),用strea流把list轉(zhuǎn)成樹的方法詳解

    mysql數(shù)據(jù)庫遞歸查詢樹形結(jié)構(gòu)(適用場景:菜單多級分類,多級關(guān)聯(lián)評論查詢),用strea流把list轉(zhuǎn)成樹的方法詳解

    層次關(guān)系: 現(xiàn)在的需求是把這個層級關(guān)系,在前端顯示出來,后端的處理方法有兩種: 1.直接把全部的數(shù)據(jù)從數(shù)據(jù)庫中拿到,然后在java代碼里面使用樹形結(jié)構(gòu)來進行解析,但是這種做法只能在數(shù)據(jù)量比較小的時候使用,然后數(shù)據(jù)量一大會造成內(nèi)存溢出 2.在mysql中創(chuàng)建一個函數(shù)

    2024年02月05日
    瀏覽(24)
  • 【Redis】Redis中的數(shù)據(jù)結(jié)構(gòu)和內(nèi)部編碼

    【Redis】Redis中的數(shù)據(jù)結(jié)構(gòu)和內(nèi)部編碼

    type命令實際返回的就是當(dāng)前鍵的數(shù)據(jù)結(jié)構(gòu)類型,它們分別是:string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合),但這些只是Redis對外的數(shù)據(jù)結(jié)構(gòu), 實際上Redis針對每種數(shù)據(jù)結(jié)構(gòu)都有??的底層內(nèi)部編碼實現(xiàn),?且是多種實現(xiàn),這樣Redis會在合適的

    2024年02月07日
    瀏覽(21)
  • redis1之安裝redis,啟動,常用數(shù)據(jù)結(jié)構(gòu)

    redis1之安裝redis,啟動,常用數(shù)據(jù)結(jié)構(gòu)

    ? 目錄 redis安裝與啟動、常見數(shù)據(jù)結(jié)構(gòu) 啟動 ?Redis客戶端 數(shù)據(jù)結(jié)構(gòu)與常見的命令 ?redis的通用命令 ?String類型的用法 Hash命令的用法 ?List命令 ?Set命令 ?SortedSet類型用法 1,在linux上安裝上gcc的依賴,我這里是centos7.6,gcc是4.5 我們在LInux上查看一下我們的系統(tǒng)信息 ?我這里安裝

    2024年02月06日
    瀏覽(56)
  • Redis - 底層數(shù)據(jù)結(jié)構(gòu)

    Redis - 底層數(shù)據(jù)結(jié)構(gòu)

    Redis 的底層數(shù)據(jù)結(jié)構(gòu)主要以下幾種: SDS(Simple Dynamic String, 簡單動態(tài)字符串) ZipList(壓縮列表) QuickList(快表) Dict(字典) IntSet(整數(shù)集合) ZSkipList(跳躍表) 在 Redis 中,并不會直接使用 C 語言自帶的字符串結(jié)構(gòu)作為實際的存儲結(jié)構(gòu),而只是將字符串作為字面量使用,大多數(shù)情況使用自

    2023年04月12日
    瀏覽(30)
  • redis核心數(shù)據(jù)結(jié)構(gòu)

    redis核心數(shù)據(jù)結(jié)構(gòu)

    redis下載地址:Download | Redis linux進入redis目錄首先使用make命令進行c++的編譯,修改redis.conf文件: 啟動退出相關(guān)命令: redis五種數(shù)據(jù)結(jié)構(gòu)圖: 1、常用命令 2、應(yīng)用場景 1)、單值緩存 2)、對象緩存 3)、分布式鎖? 4)、計數(shù)器 5)?、計數(shù)器 6)?、分布式系統(tǒng)全局序列號 1、

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包