<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Redis的數據類型

      1、Redis的數據類型

      Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

       

      2、String 數據類型

      string 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個 key 對應一個 value。

      string 類型是二進制安全的。意思是 redis 的 string 可以包含任何數據。比如jpg圖片或者序列化的對象。

      string 類型是 Redis 最基本的數據類型,string 類型的值最大能存儲 512MB。

       

      2.1、常用命令

      Redis 中設置 string 類型的 key 命令如下:

      • set key value:設置指定 key 的值。如果對同一key重復設值,后面的賦值會覆蓋掉前面的

      帶后綴參數的命令說明:

      • setex:同時設置 key 的超時秒數
      • setpx:key的超時毫秒數,與EX互斥
      • setnx:當數據庫中key不存在時,可以將key-value添加數據庫
      • setxx:當數據庫中key存在時,可以將key-value添加數據庫,與NX參數互斥

       

      2.1.1、常規操作

      Redis 中 string 類型的 key 的其他常用命令如下:

      • get key:獲取指定 key 的值。
      • append key value:如果 key 已經存在并且是一個字符串, APPEND 命令將指定的 value 拼接到該 key 原來值(value)的末尾。
      • strlen key:獲得 value 的字符串長度
      • setnx key value:只有在 key 不存在時,才設置 key 的值,如果該 key 已存在,則該命令返回0,即設置失敗。
      • getrange key 起始位置 結束位置:獲得指定范圍的字符串段,類似 java 中的substring 方法。
      • setrange key 起始位置 value:用指定的字符串 value 插入到已有的字符串的指定索引的位置。
      • setex key 過期時間 value:設置鍵值的同時,設置過期時間,單位秒。
      • getset <key><value>:以新換舊,返回之前的 value 值,并設置新的 value 值。

       

      2.1.2、數字操作

      數字操作相關命令:

      • incr key: key 中儲存的數字值增1,只能對數字值操作。如果該 key 不存在,則新增 key 并設置值為1
      • decr key: key 中儲存的數字值減1,只能對數字值操作。如果該 key 不存在,則新增 key 并設置值為-1
      • incrby | decrby key num: key 中儲存的數字值增減指定的數值

       

      2.1.3、批量操作

      批量操作相關命令:

      • mset key1 value1 key2 value2...(空格隔開):同時設置一個或多個key-value對 
      • mget:key1 key2 key3...(空格隔開):同時獲取一個或多個 key 的 value 值
      • msetnx key1 value1 key2 value2 ...:同時設置一個或多個 key-value 對。當且僅當所有給定 key 都不存在時操作才成功,因為 Redis 的單操作都是原子性的,所以只要有一個失敗所有的 key 都不會設置成功。

       

      2.2、Redis字符串類型的數據結構

      Redis 中 String 的類型的底層數據結構實際為簡單動態字符串(Simple Dynamic String,縮寫SDS),是可以修改的字符串,內部結構實現上類似于 Java ArrayList,采用預分配冗余空間的方式來減少內存的頻繁分配.

      如上圖所示,當前字符串實際分配的空間 capacity 一般要高于實際字符串長度 len。當字符串長度小于1M時,擴容都是加倍現有的空間,如果超過1M,擴容時一次只會多擴1M的空間。需要注意的是字符串最大長度為512M

       

      3、List 數據類型

      Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。

      它的底層實際是個雙向鏈表,對兩端的操作性能很高,通過索引下標的操作中間的節點性能會較差。

       

      3.1、常用命令

      生成一個 list 類型的 key 命令如下:

      • lpush/rpush  key value1 value2 value3> .... :從左邊/右邊插入一個或多個值。

       

      • lpop/rpop key:從左邊/右邊取出一個值,并且會將該值刪除。該方法返回取出的值,當某個key的值全部都取出時,該key也不將存在。
      • rpoplpush key1 key2:從 key1 列表右邊取出一個值,并且插到 key2 列表左邊

      • lrange key start stop:按照索引下標獲得元素(從左到右)。如:lrange list 0 2,0表示從左邊數的第一個,2表示從左邊數的第三個。當 stop 索引為 -1 時,表示獲取所有元素

      • index key index:獲取該 list 中指定索引的元素。

      • llen key:獲得 list 的元素數量

      • linsert  key before|after value newvalue:在指定的 value 的前面或者后面插入一個新值 newvalue。

      • lrem key n value:從左邊開始將 個相同 value 值刪除。注意,是將 n 個值為指定的 value 的元素刪除掉

      • lset key index value:將指定 index 索引的值替換成指定的 value

       

      3.2、Redis中list類型的數據結構

      List的數據結構為快速鏈表quickList

      首先在列表元素較少的情況下會使用一塊連續的內存存儲,這個結構是ziplist,也即是壓縮列表。它將所有的元素緊挨著一起存儲,分配的是一塊連續的內存。

      當數據量比較多的時候才會改成quicklist因為普通的鏈表需要的附加指針空間太大,會比較浪費空間。比如這個列表里存的只是int類型的數據,結構上還需要兩個額外的指針prevnextRedis將鏈表和ziplist結合起來組成了quicklist。也就是將多個ziplist使用雙向指針串起來使用。這樣既滿足了快速的插入刪除性能,又不會出現太大的空間冗余。

       

      4、set數據類型

      Redis set 對外提供的功能與 list 類似是一個列表的功能,特殊之處在于 set 是可以自動去重的,即集合成員是唯一的,集合中不會有重復的數據。

      Redis 的 Set 是 string 類型的無序集合。它底層其實是一個 value 為 null 的 hash 表,所以添加,刪除,查找的復雜度都是O(1)。O(1)復雜度的算法,查找數據的時間不會隨著數據的增加而變長

      set 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

       

      4.1、常用命令

      • sadd key value1 value2> .....:將一個或多個 member 元素加入到集合 key 中,已經存在的 member 元素將被忽略。
      • smembers key:取出該集合的所有值。
      • sismember key value:判斷集合 key 是否為含有該 value 值,有1,沒有0。
      • scard key:返回該集合的元素個數。
      • srem key value1 value2 ....: 刪除集合中的某些元素。
      • spop key:隨機從該集合中吐出一個值,并刪除該值。
      • srandmember key n:隨機從該集合中取出n個值。每次取出的值都可能不一樣,并且不會將這些值從集合中刪除 
      • smove key1 key2 value:將 key1 集合中指定的移出到 key2 集合中。
      • sinter key1 key2:返回兩個集合的交集元素,即共有的元素集合。
      • sunion key1 key2:返回兩個集合的并集元素。
      • sdiff key1 key2:返回兩個集合的差集元素(即只屬于 key1 中的,key2 不包含的元素集合)

       

      4.2、Redis中set類型的數據結構

      Set 數據結構是 dict 字典,字典是用哈希表實現的

      Java 中 HashSet 的內部實現使用的是 HashMap,只不過所有的 value 都指向同一個對象。Redis 的 set 結構也是一樣,它的內部也使用 hash 結構,所有的 value 都指向同一個內部值。

       

      5、Hash 數據類型

      Redis hash 是一個鍵值對集合。Redis hash是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象。類似Java里面的Map<String,Object>

      Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)。

       

      5.1、常用命令

      • hset key field value:添加名為 key 的 hash 集合,并指定該 hash 中的某個字段 field 賦值為 value
      • hget key field:獲取 key 集合中的 field 的 value 值
      • hmset key field1 value1 field2 value2...:批量設置 hash 中 filed 的值
      • hexists key1 field:查看哈希表 key 中,給定域 field 是否存在。
      • hkeys key:列出該 hash 集合的所有field
      • hvals key:列出該hash集合的所有value
      • hincrby key field num:為哈希表 key 中的指定的 field 字段的 value 值加上增量值 num
      • hsetnx key field value:將哈希表 key 中的域 field 的值設置為 value ,當且僅當域 field 不存在才會生效,否則不會有效果。

      操作示例:

       

       

       

      5.2、Redis中hash類型的數據結構

      Hash類型對應的數據結構有兩種:ziplist(壓縮列表)、hashtable(哈希表)。當field-value長度較短且個數較少時,使用ziplist,否則使用hashtable

       

      6、Zset數據類型

      Redis 有序集合 zset 與普通集合 set 非常相似,是一個沒有重復元素的字符串集合。不同之處是有序集合的每個成員都關聯了一個評分(score),這個評分被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重復的 因為元素是有序的, 所以你也可以很快的根據評分(score)或者次序(position)來獲取一個范圍的元素。

      訪問有序集合的中間元素也是非常快的,因此你可以使用 zset 集合作為一個沒有重復成員的有序列表。

       

      6.1、常用命令

      • zadd key score1 value1 score2 value2 …:將一個或多個元素及其 score 值加入到有序集 key 當中。
      • zrange key start stop [WITHSCORES]:返回有序集 key 中下標在<start><stop>之間的元素,參數 WITHSCORES 表示輸出時是否需要讓分數和值一起返回。
      • zrangebyscore key minmax [withscores] [limit offset count]:返回有序集 key 中,所有 score 值介于 min max 之間(包括等于 min max )的成員。有序集成員按 score 值遞增(從小到大)次序排列。
      • zrevrangebyscore key maxmin [withscores] [limit offset count]:同上,改為從大到小排列。
      • zincrby <key><increment><value>:為元素的score加上增量
      • zrem  <key><value>:刪除該集合下,指定值的元素
      • zcount <key><min><max>:統計該集合,分數區間內的元素個數
      • zrank <key><value>:返回該值在集合中的排名,從0開始。

      操作示例:

       

       

      6.2、Redis中zset類型的數據結構

      SortedSet(zset)是Redis提供的一個非常特別的數據結構,一方面它等價于Java的數據結構Map<String, Double>,可以給每一個元素value賦予一個權重score,另一方面它又類似于TreeSet,內部的元素會按照權重score進行排序,可以得到每個元素的名次,還可以通過score的范圍來獲取元素的列表。

      zset底層使用了兩個數據結構

      (1)hash,hash的作用就是關聯元素value和權重score,保障元素value的唯一性,可以通過元素value找到相應的score值。

      (2)跳躍表,跳躍表的目的在于給元素value排序,根據score的范圍獲取元素列表。

       

      posted @ 2022-01-16 18:42  wenxuehai  閱讀(1910)  評論(0)    收藏  舉報
      //右下角添加目錄
      主站蜘蛛池模板: 蜜臀av性久久久久蜜臀aⅴ麻豆| 国产女精品视频网站免费| 欧美牲交a欧美牲交aⅴ一| 亚洲自在精品网久久一区| 另类专区一区二区三区| 岛国最新亚洲伦理成人| 久久综合色最新久久综合色| 四虎成人精品在永久免费| 天美传媒xxxxhd videos3| 99精品国产中文字幕| 青青草原国产精品啪啪视频| 精品中文字幕人妻一二| 欧美日韩在线视频| 无码专区 人妻系列 在线| 深夜av在线免费观看| 久久久亚洲欧洲日产国码αv | 日本不卡一区| 国产精品人伦一区二区三| 熟妇人妻无码中文字幕老熟妇| 性xxxx欧美老妇胖老太性多毛| 蜜桃av亚洲精品一区二区| 麻豆麻豆麻豆麻豆麻豆麻豆| 久久精品日日躁夜夜躁 | 高级艳妇交换俱乐部小说 | 三上悠亚精品一区二区久久| 波多野结衣无内裤护士| 免费黄色大全一区二区三区| 亚洲一区成人在线视频| 久久久精品波多野结衣av | 武邑县| 国产精品麻豆va在线播放| 国产精品综合一区二区三区| 亚洲国产韩国欧美在线| 久久精品国产福利一区二区| 国产精品白浆免费视频| 国产一区二区高潮视频| 国产精品午夜福利合集| 囯产精品久久久久久久久久妞妞 | 手机看片福利一区二区三区| 精品超清无码视频在线观看 | 丁香五月婷激情综合第九色|