<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                >[info] hash數據類型與結構 **hash類型介紹:** Redis hash數據結構 是一個鍵值對(key-value)集合,它是一個 string 類型的 field 和 value 的映射表,redis 本身就是一個key-value型數據庫,因此hash數據結構相當于在value中又套了一層key-value型數據。所以 redis中hash數據結構特別適合存儲關系型對象。比如用來存儲學生基本信息,或者用戶信息等。 ***** **Hmset 命令:** 用于同時將多個field-value (字段-值)對設置到哈希表中。假如hash表中已經存在field,則會對其 進行覆蓋。如果哈希表不存在,會創建一個空哈希表,并執行 HMSET 操作。 ``` 127.0.0.1:6379> hmset users id 1 username starsky age 18 sex 1 OK 127.0.0.1:6379> ``` ***** **Hmget 命令:** 用于返回hash表中field字段對應的值,如果field不存在,那么返回nil值。 ``` 127.0.0.1:6379> hmget users id username age 1) "1" 2) "starsky" 3) "18" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/48/83/4883d47e606a3b0025be69fe25dc3e4f_414x105.png) ***** **Hset 命令:** 對hash表中field對應的value進行賦值,如果哈希表不存在,一個新的哈希表被創建并進行 HSET 操 作。 ``` 127.0.0.1:6379> hmget users id username age sex 1) "1" 2) "starsky" 3) "18" 4) "1" 127.0.0.1:6379> hset users age 30 (integer) 0 127.0.0.1:6379> hset users sex 0 (integer) 0 127.0.0.1:6379> hmget users id username age sex 1) "1" 2) "starsky" 3) "30" 4) "0" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/86/59/8659187ecaa56c64ec73266a71dd4dd8_493x299.png) ***** **Hvals 命令:** 用于返回哈希表所有field對應的值。 ``` 127.0.0.1:6379> hvals users 1) "1" 2) "starsky" 3) "30" 4) "0" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/0b/bb/0bbb866969622329372a0891e3c13edc_281x127.png) ***** **Hdel 命令:** 用于刪除指定哈希表中的一個或多個field,不存在的field將被忽略。 ``` 127.0.0.1:6379> hdel users sex (integer) 1 127.0.0.1:6379> hvals users 1) "1" 2) "starsky" 3) "30" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/43/d0/43d049dd561454a3d58f3a83cdc96cf3_309x153.png) ***** **Hgetall 命令:** 用于返回哈希表中,所有的字段和值。 ``` 127.0.0.1:6379> hgetall users 1) "id" 2) "1" 3) "username" 4) "starsky" 5) "age" 6) "30" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/79/ea/79ea489e9e5b5949be70a8fa11f226f4_284x162.png) ***** >[info] 存儲對象 hash類型的(key, field, value)的結構與對象的(對象id, 屬性, 值)的結構相似,也可以用來存儲對象。 ***** 在介紹string類型的應用場景時有所介紹,string + json也是存儲對象的一種方式,那么存儲對象時,到底用 string + json還是用hash呢? 兩種存儲方式的對比如下表所示: ![](https://img.kancloud.cn/31/42/31426f1c76a15125c5427d3cdefd3ea3_1115x379.png) ***** 當對象的某個屬性需要頻繁修改時,不適合用string+json,因為它不夠靈活,每次修改都需要重新將整個對 象序列化并賦值,如果使用hash類型,則可以針對某個屬性單獨修改,沒有序列化,也不需要修改整個對 象。比如,商品的價格、銷量、關注數、評價數等可能經常發生變化的屬性,就適合存儲在hash類型里。 ***** 當然,不常變化的屬性存儲在hash類型里也沒有問題,比如商品名稱、商品描述、上市日期等。但是,當 對象的某個屬性不是基本類型或字符串時,使用hash類型就必須手動進行復雜序列化,比如,商品的標簽 是一個標簽對象的列表,商品可領取的優惠券是一個優惠券對象的列表(如下圖所示)等,即使以 coupons(優惠券)作為field,value想存儲優惠券對象列表也還是要使用json來序列化,這樣的話序列化工 作就太繁瑣了,不如直接用string + json的方式存儲商品信息來的簡單。 ***** >[info] zset類型與結構(有序集合) redis有序集合也是集合類型的一部分,所以它保留了集合中元素不能重復的特性,但是不同的是,有序集 合給每個元素多設置了一個分數,利用該分數作為排序的依據。 ***** 有序集合可以利用分數進行從小到大的排序。雖然有序集合的成員是唯一的,但是分數(score)卻可以重復。 就比如在一個班中,學生的學號是唯一的,但是每科成績卻是可以一樣的,redis可以利用有序集合存儲學 生成績快速做成績排名功能。 ***** **什么是跳表(skiplist dict)呢?** 二分查找法 ![](https://img.kancloud.cn/eb/65/eb654cf8658b32e6f8e487abc004dd64_1751x404.png) ![](https://img.kancloud.cn/4b/0a/4b0afacfb77a677b483a568e06262509_1706x385.png) ![](https://img.kancloud.cn/19/1e/191e83772b09552b0af8cdfc125e486f_1772x393.png) ***** **Zadd 命令:** 向一個有序集合中加入一個或者多個元素及其分數。假如加入的元素已經存在,那么更新這個成 員的分數值,然后進行重新插入,來定位自己的位置。如果key不存在,那么創建一個新的有序集合并進行 插入操作。 ``` 127.0.0.1:6379> zadd score 80 will 90 starsky 100 harry (integer) 3 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/50/b9/50b9870cf572fc49657d905a2c32fa41_519x96.png) ***** **Zcard 命令:** 用于計算有序集合中元素的數量。 ``` 127.0.0.1:6379> zcard score (integer) 3 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/d1/06/d106d1fab73cf5aefacba57c4f4f4eef_275x68.png) ***** **Zcount 命令:** 用于計算有序集合中指定分數區間的成員數量。 ``` 127.0.0.1:6379> zcount score 80 90 (integer) 2 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/5b/97/5b972e993d625297367d0783a667cbda_323x85.png) ***** **Zrange 命令:** 用于返回指定區間內的成員。其中成員的位置按分數值遞增(從小到大)來排序。這里的下標參數都 是從0開始的,負數代表是從最后一個成員算起,-1表示最后一個成員。 ``` 127.0.0.1:6379> zrange score 0 -1 1) "will" 2) "starsky" 3) "harry" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/5a/df/5adf0af2fe33205c3028c28da208c5c5_335x109.png) ***** **Zrevrange 命令:** 用于返回指定分數區間內的成員。其中成員的位置按分數值遞減(從大到小)來排序。 ``` 127.0.0.1:6379> zrevrange score 0 -1 1) "harry" 2) "starsky" 3) "will" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/2c/06/2c0654200bf95422b511c0f1632f6f62_350x105.png) ***** **Zrangebyscore 命令:** 回有序集合中指定分數區間的成員列表。其中集成員按分數值遞增(從小到大)來排序。 ``` 127.0.0.1:6379> zrangebyscore score 80 90 1) "will" 2) "starsky" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/80/48/8048d79ebea7dcad6e9b4f6987fb756e_417x121.png) ***** **Zrank 命令:** 用于返回有序集中指定成員的排名。 ``` 127.0.0.1:6379> zrank score harry (integer) 2 127.0.0.1:6379> zrank score will (integer) 0 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/e5/94/e594b0022f33e942a1a0f6a033eaab39_359x110.png) ***** **Zrem 命令:** 用于移除有序集中的一個或多個成員,不存在的成員將被忽略。 ``` 127.0.0.1:6379> zrem score starsky (integer) 1 127.0.0.1:6379> zrange score 0 -1 1) "will" 2) "harry" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/50/89/50896d0acc4dca4f76d2981c22b43a99_325x125.png) ***** **Zremrangebyrank 命令:** 用于移除有序集中,指定排名(rank)區間內的所有成員。-1 最后一個 ``` 127.0.0.1:6379> zremrangebyrank score 0 0 (integer) 1 127.0.0.1:6379> zrange score 0 -1 1) "harry" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/f0/1b/f01ba61ff3288300f53fa554ce61883a_438x110.png) ***** **Zscore 命令:** 返回有序集中,成員的分數值。 如果成員元素不是有序集 key 的成員,或 key 不存在,返回 nil ``` 127.0.0.1:6379> zscore score tony "95" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/01/4f/014f59b712dc066571f8ca3f7b666819_310x65.png) ***** **Zscan 命令:** 用于迭代有序集合中的元素(包括元素成員和元素分值)。 ``` 127.0.0.1:6379> zscan score 0 match tony 1) "0" 2) 1) "tony" 2) "95" 127.0.0.1:6379> ``` ![](https://img.kancloud.cn/b1/58/b158fd2a439920b8b1a036ef2a953196_388x137.png) ***** >[info] 字典 字典又稱符號表,關聯數組或者映射,是一種用于保存鍵值對的抽象數據結構。 字典中的每個鍵都是獨一無二的,程序可以在字典中根據鍵值查找與之關聯的值,或者通過鍵來更新值,刪除等。 ***** **字典的結構屬性:** ![](https://img.kancloud.cn/da/43/da4376afe0fbd35c87274a461b6dc26e_1255x755.png) ***** **字典中的hash表:** ![](https://img.kancloud.cn/05/22/0522d99a8dd89a6520f0d8ae9a95788a_1472x846.png) ***** **Hash表中的hash節點:** ![](https://img.kancloud.cn/51/da/51daee4a6add1895fe6025a73be035f7_1337x624.png) ***** **字典總體結構:**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看