Redis數據的類型

Redis一共分為五種基本數據類型:String、Hash、List、Set、Zset.

string

  • 內部編碼有三種,raw,embstr,int ?
  • String 是二進制的。可以存儲序列化對象,圖片,字符串,數值等 ?
  • set和get方法 :設置值 set key value;取值 get key ;刪除值 del key ?
  • setnx(not exists):name 如果不存在進行設置,存在就不需要進行設置了,返回0 ?
  • setex(expired)/psetex(毫秒單位)? :set key 10 value 設置key有效期為10秒,10秒后返回nil ?
  • setrange? :setrange key index value (index 表示從第幾位開始替換)
  • 使用一次性設置多個和獲取多個值的mset、mget方法:mset key1 value1 key2 value2 key3 value3 ;mget key1 key2 key3 ;msetnx
  • 一次性設置和取值的getset方法 :set key value ;getset key value1,這個getset key value1返回的是value,使用get vakue得到value1的值
  • incr和decr方法:對某一個值進行遞增和遞減
  • incrby和decrby方法:對某個值進行指定長度的遞增和遞減
  • append [name]方法:字符串追加方法
  • strlen [name]方法:獲取字符串的長度

HASH

  • Hash類型是String類型的field和value的映射表,或者說一個String集合。它的特別適合存儲對象,相比較而言,將一個對象類型存儲在Hash類型里要比存儲在String類型里占用更少的內存空間,并方便存取整個對象。
  • 形如:hset key field value(含義是 hset是hash集合, key是集合名字 field是字段名 value為其值)使用hget ?key field 獲取內容,也可以存儲多個值
  • hmset可以進行批量存儲多個鍵值對:hmset key field1 value1 field2 value2,也可使用hmget進行批量獲取多個鍵值對。
  • 同樣也有hsetnx,和setnx大同小異,不存在則賦值,存在不修改
  • hincrby集合遞增。
  • hexists 是否存在key 如果存在返回,不存在返回0
  • hlen 返回hash集合里的所有的鍵數值
  • hdel 刪除指定hash的field
  • hkeys 返回hash里所有的字段
  • hvals 返回hash的所有value
  • hgetall 返回hash里所有的key和value

LIST

  • List類型是一個鏈表結構的集合,其主要功能有push、pop、獲取元素等。更詳細的說,List類型是一個雙向鏈表的結構,我們可以通過相關操作進行集合的頭部或者尾部添加刪除元素,list的設計非常簡單精巧,即可以做為棧,又可以作為隊列
  • lpush方法: 從頭部加入元素(棧) 先進后出: lpush key1 value ;lrange list1 0 -1表示從頭取到末尾
  • rpush方法:從尾部加入元素(隊列) 先進先出: rpush key2 ?value rpush list2 ?value2 lrange key2 0 -1
  • linsert方法:插入元素 Linsert keys before [element] [newelement]
  • LSET key index value 設置 index 位置的list元素的值為 value
  • LREM key count value 從存于 key 的列表里移除前 count 次出現的值為 value 的元素。 這個 count 參數通過下面幾種方式影響這個操作
  • count > 0: 從頭往尾移除值為 value 的元素
  • count < 0: 從尾往頭移除值為 value 的元素
  • count = 0: 移除所有值為 value 的元素
  • LTRIM key start stop 修剪(trim)一個已存在的 list,這樣 list 就會只包含指定范圍的指定元素。start 和 stop 都是由0開始計數的, 這里的 0 是列表里的第一個元素(表頭),1 是第二個元素,以此類推。
  • LPOP key 移除并且返回 key 對應的 list 的第一個元素
  • RPOP key 移除并返回存于 key 的 list 的最后一個元素
  • RPOPLPUSH source destination 原子性地返回并移除存儲在 source 的列表的最后一個元素(列表尾部元素), 并把該元素放入存儲在 destination 的列表的第一個元素位置(列表頭部)
  • LINDEX key index 返回名稱為key的list中 index位置的元素
  • LLEN key 返回存儲在 key 里的list的長度

SET

  • set集合是string類型的無序集合 ,set是通過intset或者hashtable實現的,對集合我們可以取交集、并集、差集
  • 內部編碼有 intset(元素類型是int類型的且元素的個數小于512字節)和hashtable(元素中有非int類型或者個數大于512字節)
  • SADD key member [member ...] 添加一個或多個指定的member元素到集合的 key中, set集合不允許重復元素 smembers查看set集合的元素
  • SREM key member [member ...] 在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素則忽略 如果key集合不存在則被視為一個空的集合,該命令返回0
  • SPOP key [count]隨機返回刪除的key
  • SDIFF key [key ...] 返回一個集合與給定集合的差集的元素.
  • SDIFFSTORE destination key [key ...] 該命令類似于 SDIFF, 不同之處在于該命令不返回結果集,而是將結果存放在destination集合中.如果destination已經存在, 則將其覆蓋重寫
  • SINTER key [key ...] 返回指定所有的集合的成員的交集.
  • SINTERSTORE destination key [key ...] 這個命令與SINTER命令類似, 但是它并不是直接返回結果集,而是將結果保存在 destination集合中.
  • SUNION key [key ...] 返回給定的多個集合的并集中的所有成員.
  • SUNIONSTORE destination key [key ...] 該命令作用類似于SUNION命令,不同的是它并不返回結果集,而是將結果存儲在destination集合中.
  • SMOVE source destination member 將member從source集合移動到destination集合中. 對于其他的客戶端,在特定的時間元素將會作為source或者destination集合的成員出現
  • SCARD key 集合元素的數量,SRANDMEMBER key [count]隨機返回一元素
  • SISMEMBER key member 返回成員 member 是否是存儲的集合 key的成員
  • 有序集合有兩種內部編碼方式:ziplist和skiplist

ZSET

  • 元素個數小于128且元素值小于64使用ziplist編碼,否則使用skiplist編碼
  • ZADD key [NX|XX] [CH] [INCR] score member [score member ...] 將所有指定成員添加到鍵為key有序集合(sorted set)里面。 添加時可以指定多個分數/成員(score/member)對。 如果指定添加的成員已經是有序集合里面的成員,則會更新改成員的分數(scrore)并更新到正確的排序位置.
  • XX: 僅僅更新存在的成員,不添加新成員。
  • NX: 不更新存在的成員。只添加新成員
  • CH: 修改返回值為發生變化的成員總數,原始是返回新添加成員的總數
  • INCR: 當ZADD指定這個選項時,成員的操作就等同ZINCRBY命令,對成員的分數進行遞增操作
  • ZREM key member [member ...]刪除名稱為key的zset中的元素member
  • ZINCRBY key increment member 為有序集key的成員member的score值加上增量increment
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回key的有序集合中的分數在min和max之間的所有元素(包括分數等于max或者min的元素)。元素被認為是從低分到高分排序
  • ?ZREMRANGEBYRANK key start stop 移除有序集key中,指定排名(rank)區間內的所有成員。下標參數start和stop都以0為底,0處是分數最小的那個元素
  • ZRANK key member 返回有序集key中成員member的排名,從小到大。
  • ZREVRANK key member 返回有序集key中成員member的排名,其中有序集成員按score值從大到小排列。
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 找到指定區間范圍的數據進行返回
  • COUNT key min max 返回有序集key中,score值在min和max之間(默認包括score值等于min或max)的成員個數。

查看

  • 如果使用set test1 value1進行設置,使用命令object encoding test1查看編碼方式
  • 字符串39位數以內使用embstr編碼,39位以上使用raw編碼
  • list編碼方式最新的只有quicklist,原先的ziplist和linkedlist已經取消

RedisObject實例講解

?

  • 數據類型,參考上圖的數據結構
  • 編碼方式,參考上圖的內部編碼
  • 數據指針,key對應的數據存在哪個SDS對象中
  • SDS包含三部分,len表示數據的長度,free表示空閑空間,buffer存儲數據

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447338.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447338.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447338.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis高級命令與特性以及單點模式的介紹

高級命令 keys * 返回滿足條件的所有key&#xff0c;可以模糊匹配exists 是否存在指定的keypersist 取消過期時間select 選擇數據庫 &#xff08;0-15&#xff0c;總共16個數據庫&#xff09;move key index 將當前數據庫的 key 移動到給定的數據庫 db 當中randomkey 隨機返回…

華為副總裁徐家駿離職:年薪千萬工作感悟十二條

從普通的公司職員&#xff0c;到年薪千萬的華為副總裁&#xff0c;再到離開華為轉戰百度&#xff0c;徐家駿的十年從業經歷和經驗可資借鑒&#xff0c;我們從中也可以一窺華為的運作過程。徐家駿是華為數據中心的頭&#xff0c;技術超級牛人&#xff0c;一級部門總監&#xff0…

Redis持久化之RDB和AOF

Redis持久化之RDB和AOF Redis 有兩種持久化方案&#xff0c;RDB &#xff08;Redis DataBase&#xff09;和 AOF &#xff08;Append Only File&#xff09;&#xff1b; RDB 詳解 RDB 是 Redis 默認的持久化方案。在指定的時間間隔內&#xff0c;執行指定次數的寫操作&#…

同為程序員 為什么我的工資最低

我看著工資單上每一個開發團隊成員的薪水&#xff0c;慢慢地我不能保持淡定了。 而當我看到我的工資排名是倒數的時候——靠近最后一名——我不由得倒抽一口冷氣。就像圣誕故事中的那個可愛的小男孩Ralphie &#xff0c;想買氣槍卻被忽悠會有危險一樣&#xff0c;我也不斷忽悠…

Docker安裝Redis以及配置Redis環境

1&#xff0c;下載Redis鏡像 首先拉取 Redis 鏡像, 這里我選擇的是 redis:alpine 輕量級鏡像版本 docker pull redis:alpine 下載完成后&#xff0c;通過 docker images 查看我們已經下載的鏡像&#xff0c;看看是否已經下載到本地 2&#xff0c;運行 Redis 容器 docker run …

.NET程序性能的基本要領

摘要&#xff1a;本文分享了性能優化的一些建議和思考&#xff0c;比如不要過早優化、好工具很重要、性能的關鍵&#xff0c;在于內存分配等。開發者不要盲目的沒有根據的優化&#xff0c;首先定位和查找到造成產生性能問題的原因點最重要。 【編者按】Bill Chiles&#xff08…

redis.conf配置文件詳解

基本配置 daemonize no #是否以后臺進程啟動databases 16 #創建database的數量(默認選中的是database 0)save 900 1 #刷新快照到硬盤中&#xff0c;必須滿足兩者要求才會觸發&#xff0c;即900秒之后至少1個關鍵字發生變化save 300 10 #必須是300秒之后至少10個關鍵字發生變…

什么原因成就了一位優秀的程序員?

這些年我曾和很多程序員一起工作&#xff0c;他們之中的一些人非常厲害&#xff0c;而另一些人顯得平庸。不久前因為和一些技術非常熟練的程序員工作感覺很愉快&#xff0c;我花了一些時間在考慮我佩服他們什么呢&#xff1f;什么原因讓優秀的程序員那么優秀&#xff0c;糟糕的…

Redis的哨兵模式Sentinel

sentinel功能 redis的sentinel系統用于管理多個redis服務器&#xff0c;該系統主要執行三個任務&#xff1a;監控、提醒、自動故障轉移。 1、監控&#xff08;Monitoring&#xff09;&#xff1a; Redis Sentinel實時監控主服務器和從服務器運行狀態&#xff0c;并且實現自動…

csdn 到底怎么了?不準轉載?

我轉載了20多文章&#xff0c;很多人閱讀過&#xff0c;但是今天看到閱讀量是0&#xff0c; csdn 到底怎么了&#xff1f; 對用戶這樣&#xff1f;請大家看看是不是這樣&#xff1f;

python3之后版本讀取網頁的內容

import urllib.request url "http://helloworldbook2.com/data/message.txt" #直接通過url來獲取網頁數據 print(第一種) response urllib.request.urlopen(url) code response.getcode() html response.read() mystr html.decode("utf8") response.c…

三十功名塵與土——資深程序員生涯自白

摘要&#xff1a;作者Codist&#xff08;網名&#xff09;在程序員崗位上工作了三十多年&#xff0c;在這期間他悟出了一些真理&#xff0c;比如&#xff0c;成功來自對失敗的總結學習&#xff1b;條條大路通羅馬&#xff0c;羅馬并不在乎你用什么方式到達。你在生活中積累了哪…

linux/unix核心設計思想

1&#xff09; 程序應該小而專一&#xff0c;程序應該盡量的小&#xff0c;且只專注于一件事上&#xff0c;不要開發那些看起來有用但是90%的情況都用不到的特性&#xff1b; 2&#xff09; 程序不只要考慮性能&#xff0c; 程序的可移植性更重要&#xff0c;shell和perl&…

操作系統環境變量

在 Java中&#xff0c;許多類都是 Iterable &#xff0c;主要包括所有的 Collection 類&#xff08;但不包括各種 Maps &#xff09;。 例如&#xff0c;下面的代碼可以顯示所有的操作系統環境變量&#xff1a; // collections/EnvironmentVariables.java // {VisuallyInspect…

用Unix的設計思想來應對多變的需求

摘要&#xff1a;無論是Unix設計&#xff0c;還是面向對象設計&#xff0c;還是別的什么如SOA&#xff0c;ECB&#xff0c;消息&#xff0c;事件&#xff0c;MVC&#xff0c;網絡七層模型&#xff0c;數據庫設計&#xff0c;等等&#xff0c;他們都在干三件事——解耦&#xff…

學習較底層編程:動手寫一個C語言編譯器

動手編寫一個編譯器&#xff0c;學習一下較為底層的編程方式&#xff0c;是一種學習計算機到底是如何工作的非常有效方法。 編譯器通常被看作是十分復雜的工程。事實上&#xff0c;編寫一個產品級的編譯器也確實是一個龐大的任務。但是寫一個小巧可用的編譯器卻不是這么困難。…

Arrays.deepToString() 方法同時適用于基元數組和對象數組

Arrays.deepToString() 方法同時適用于基元數組和對象數組&#xff1a; import java.util.*;public class MultiDimWrapperArray {public static void main(String[] args) {Integer[][] a1 { // Autoboxing{ 1, 2, 3, },{ 4, 5, 6, },};Double[][][] a2 { // Autoboxing{ {…

高效程序員的7個共同特征

要想成為高效的程序員&#xff0c;你需要具備一定的綜合素質才能夠讓你用你所掌握的技能、經驗和知識編寫出有效的代碼。有一些開發人員在技術方面具備一定的技巧&#xff0c;但他們永遠無法成為高效的程序員&#xff0c;就是因為他們缺乏所需的其它幾項特質。本文將給出成為一…

java.util.Array中的方法

概述 asList(): 獲取任何序列或數組&#xff0c;并將其轉換為一個 列表集合 &#xff08;集合章節介紹了此方法&#xff09;。 copyOf()&#xff1a;以新的長度創建現有數組的新副本。 copyOfRange()&#xff1a;創建現有數組的一部分的新副本。 equals()&#xff1a;比較兩…

有關編程的12個猜想

摘要&#xff1a;編程世界的將來如何目前仍難預料&#xff0c;但可以肯定的一點是技術一直在加速發展。本文搜羅出12個獨特的編程視角猜想&#xff0c;一起來看看有哪些猜想在不久的將來就能變為現實。 編程世界的將來如何目前仍難預料&#xff0c;但可以肯定的一點是技術一直…