redis中數據類型命令整理_Redis

來源:腳本之家  責任編輯:小易  

redis開創了一種新的數據存儲思路,使用redis,我們不用在面對功能單調的數據庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的數據結構和數據操作,為不同的大象構建不同的冰箱。redis常用數據類型redis最為常用的數據類型主要有以下五種:stringhashlistsetsorted set在具體描述這幾種數據類型之前,我們先通過一張圖了解下redis內部內存管理中是如何描述這些不同數據類型的:首先redis內部使用一個redisobject對象來表示所有的key和value,redisobject最主要的信息如上圖所示:type代表一個value對象具體是何種數據類型,encoding是不同數據類型在redis內部的存儲方式,比如:type=string代表value存儲的是一個普通字符串,那么對應的encoding可以是raw或者是int,如果是int則代表實際redis內部是按數值型類存儲和表示這個字符串的,當然前提是這個字符串本身可以用數值表示,比如:"123456"這樣的字符串。這里需要特殊說明一下vm字段,只有打開了redis的虛擬內存功能,此字段才會真正的分配內存,該功能默認是關閉狀態的,該功能會在后面具體描述。通過上圖我們可以發現redis使用redisobject來表示所有的key/value數據是比較浪費內存的,當然這些內存管理成本的付出主要也是為了給redis不同數據類型提供一個統一的管理接口,實際作者也提供了多種方法幫助我們盡量節省內存使用,我們隨后會具體討論。下面我們先來逐一的分析下這五種數據類型的使用和內部實現方式:string常用命令:set,get,decr,incr,mget 等。應用場景:string是最常用的一種數據類型,普通的key/value存儲都可以歸為此類,這里就不所做解釋了。實現方式:string在redis內部存儲默認就是一個字符串,被redisobject所引用,當遇到incr,decr等操作時會轉成數值型進行計算,此時redisobject的encoding字段為int。hash常用命令:hget,hset,hgetall 等。應用場景:我們簡單舉個實例來描述下hash的應用場景,比如我們要存儲一個用戶信息對象數據,包含以下信息:用戶id為查找的key,存儲的value用戶對象包含姓名,年齡,生日等信息,如果用普通的key/value結構來存儲,主要有以下2種存儲方式:第一種方式將用戶id作為查找key,把其他信息封裝成一個對象以序列化的方式存儲,這種方式的缺點是,增加了序列化/反序列化的開銷,并且在需要修改其中一項信息時,需要把整個對象取回,并且修改操作需要對并發進行保護,引入cas等復雜問題。第二種方法是這個用戶信息對象有多少成員就存成多少個key-value對兒,用用戶id+對應屬性的名稱作為唯一標識來取得對應屬性的值,雖然省去了序列化開銷和并發問題,但是用戶id為重復存儲,如果存在大量這樣的數據,內存浪費還是非常可觀的。那么redis提供的hash很好的解決了這個問題,redis的hash實際是內部存儲的value為一個hashmap,并提供了直接存取這個map成員的接口,如下圖:也就是說,key仍然是用戶id,value是一個map,這個map的key是成員的屬性名,value是屬性值,這樣對數據的修改和存取都可以直接通過其內部map的key(redis里稱內部map的key為field),也就是通過 key(用戶id)+field(屬性標簽)就可以操作對應屬性數據了,既不需要重復存儲數據,也不會帶來序列化和并發修改控制的問題。很好的解決了問題。這里同時需要注意,redis提供了接口(hgetall)可以直接取到全部的屬性數據,但是如果內部map的成員很多,那么涉及到遍歷整個內部map的操作,由于redis單線程模型的緣故,這個遍歷操作可能會比較耗時,而另其它客戶端的請求完全不響應,這點需要格外注意。實現方式:上面已經說到redishash對應value內部實際就是一個hashmap,實際這里會有2種不同實現,這個hash的成員比較少時redis為了節省內存會采用類似一維數組的方式來緊湊存儲,而不會采用真正的hashmap結構,對應的valueredisobject的encoding為zipmap,當成員數量增大時會自動轉成真正的hashmap,此時encoding為ht。list常用命令:lpush,rpush,lpop,rpop,lrange等。應用場景:redislist的應用場景非常多,也是redis最重要的數據結構之一,比如twitter的關注列表,粉絲列表等都可以用redis的list結構來實現,比較好理解,這里不再重復。實現方式:redislist的實現為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷,redis內部的很多實現,包括發送緩沖隊列等也都是用的這個數據結構。set常用命令:sadd,spop,smembers,sunion 等。應用場景:redisset對外提供的功能與list類似是一個列表的功能,特殊之處在于set是可以自動排重的,當你需要存儲一個列表數據,又不希望出現重復數據時,set是一個很好的選擇,并且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。實現方式:set 的內部實現是一個value永遠為null的hashmap,實際就是通過計算hash的方式來快速排重的,這也是set能提供判斷一個成員是否在集合內的原因。sorted set常用命令:zadd,zrange,zrem,zcard等使用場景:redis sorted set的使用場景與set類似,區別是set不是自動有序的,而sortedset可以通過用戶額外提供一個優先級(score)的參數來為成員排序,并且是插入有序的,即自動排序。當你需要一個有序的并且不重復的集合列表,那么可以選擇sortedset數據結構,比如twitter 的publicwww.13333515.buzz防采集請勿采集本網。

redis是鍵值對的數據庫,有5中主要數據類型:

語法 redis 127.0.0.1:6379>TYPE KEY_NAME 可用版本 1.0.0 返回值 key 的數據類型,數據類型有: none(key不存在) string(字符串) list(列表) set(集合) zset(有序集) hash(哈希表)

字符串類型(string),散列類型(hash),列表類型(list),集合類型(set),有序集合類型(zset)

1.LPUSH/LPUSHX/LRANGE: redis-cli#在Shell提示符下啟動redis客戶端工具。redis 127.0.0.1:6379>del mykey (integer)1 mykey鍵并不存在,該命令會創建該鍵及與其關聯的List,之后在將參數中的

幾個基本的命令:

1、首先redis內部使用一個redisobject對象來表示所有的key和value,redisobject最主要的信息如上圖所示:type代表一個value對象具體是何種數據類型,encoding是不同數據類型在redis內部的存儲方式,比如:

函數 說明
keys * 獲得當前數據庫的所有鍵

exists key [key ...] 判斷鍵是否存在,返回個數,如果key有一樣的也是疊加數
del key [key ...] 刪除鍵,返回刪除的個數

type key 獲取減值的數據類型(string,hash,list,set,zset)
flushall 清空所有數據庫
config [get、set] redis配置

在指定Key所關聯的List Value的如果該Key不存在,該命令將在插入之前創建一個與該Key關聯的空鏈表,之后再將數據從鏈表的頭部插入。如果該鍵的Value不是鏈表類型,該命令將返回相關的錯誤信息。

-inf 負無窮

1、打開reidis,選擇第三個百數據庫。2、rpush listInfo aa,度向listInfo添加數專據,向后加,r代表右。3、push listInfo bb,向listInfo添加數據,向前加。4、lrange listInfo 0-1,代表查詢

+inf正無窮

一:字符串類型(string)

字符串類型是Redis的最基本類型,它可以存儲任何形式的字符串。其它的四種類型都是字符串類型的不同形式。

函數 語法
最基本的命令:GET、SET GET key,SET key value value如果有空格需要雙引號以示區分
整數遞增:INCR INCR key 默認值為0,所以首先執行命令得到 1 ,不是整型提示錯誤
增加指定的整數:INCRBY INCRBY key increment
整數遞減:DECR DECR key 默認值為0,所以首先執行命令得到 -1,不是整型提示錯誤
減少指定的整數:DECRBY DECRBY key increment
增加指定浮點數:INCRBYFLOAT INCRBYFLOAT key increment 與INCR命令類似,只不過可以遞增一個雙精度浮點數
向尾部追加值:APPEND APPEND key value redis客戶端并不是輸出追加后的字符串,而是輸出字符串總長度
獲取字符串長度:STRLEN STRLEN key 如果鍵不存在返回0,注意如果有中文時,一個中文長度是3,redis是使用UTF-8編碼中文的
獲取多個鍵值:MGET MGET key [key ...] 例如:MGET key1 key2
設置多個鍵值:MSET MSET key value [key value ...] 例如:MSET key1 1 key2 "hello redis"
二進制指定位置值:GETBIT

GETBIT key offset 例如:GETBIT key1 2 ,key1為hello 返回 1,返回的值只有0或1,當key不存在或超出實際長度時為0

設置二進制位置值:SETBIT SETBIT key offset value ,返回該位置的舊值
二進制是1的個數:BITCOUNT BITCOUNT key [start end] ,start 、end為開始和結束字節
位運算:BITOP BITOP operation destkey key [key ...] ,operation支持AND、OR、XOR、NOT
偏移:BITPOS BITPOS key bit [start] [end]

二:散列類型(hash)

函數 語法
設置單個:HSET HSET key field value,不存在時返回1,存在時返回0,沒有更新和插入之分
設置多個:HMSET HMSET key field value [field value ...]
讀取單個:HGET HGET key field,不存在是返回nil
讀取多個:HMGET HMGET key field [field ...]
讀取全部:HGETALL HGETALL key,返回時字段和字段值的列表
判斷字段是否存在:HEXISTS HEXISTS key field,存在返回1 ,不存在返回0
字段不存在時賦值:HSETNX HSETNX key field value,與hset命令不同,hsetnx是鍵不存在時設置值
增加數字:HINCRBY HINCRBY key field increment ,返回增加后的數,不是整數時會提示錯誤
刪除字段:HDEL HDEL key field [field ...] ,返回被刪除字段的個數
只獲取字段名:HKEYS HKEYS key ,返回鍵的所有字段名
只獲取字段值:HVALS HVALS key ,返回鍵的所有字段值
字段數量:HLEN HLEN key ,返回字段總數

三:列表類型(list)

內部使用雙向鏈表實現,所以獲取越接近兩端的元素速度越快,但通過索引訪問時會比較慢

函數 語法
添加左邊元素:LPUSH LPUSH key value [value ...] ,返回添加后的列表元素的總個數
添加右邊元素:RPUSH RPUSH key value [value ...] ,返回添加后的列表元素的總個數
移除左邊第一個元素:LPOP LPOP key ,返回被移除的元素值
移除右邊第一個元素:RPOP RPOP key ,返回被移除的元素值
列表元素個數:LLEN LLEN key, 不存在時返回0,redis是直接讀取現成的值,并不是統計個數
獲取列表片段:LRANGE

LRANGE key start stop,如果start比stop靠后時返回空列表,0 -1 返回整個列表正數時:start 開始索引值,stop結束索引值(索引從0開始)負數時:例如 lrange num -2 -1,-2表示最右邊第二個,-1表示最右邊第一個,

刪除指定值:LREM

LREM key count value,返回被刪除的個數

count>0,從左邊開始刪除前count個值為value的元素

count<0,從右邊開始刪除前|count|個值為value的元素

count=0,刪除所有值為value的元素

索引元素值:LINDEX LINDEX key index ,返回索引的元素值,-1表示從最右邊的第一位
設置元素值:LSET LSET key index value
保留列表片段:LTRIM LTRIM key start stop,start、top 參考lrange命令
一個列表轉移另一個列表:RPOPLPUSH

RPOPLPUSH source desctination ,從source列表轉移到desctination列表,該命令分兩步看,首先source列表RPOP右移除,再desctination列表LPUSH

四:集合類型(set)

集合類型值具有唯一性,常用操作是向集合添加、刪除、判斷某個值是否存在,集合內部是使用值為空的散列表實現的。

函數 語法
添加元素:SADD

SADD key member [member ...] ,向一個集合添加一個或多個元素,因為集合的唯一性,所以添加相同值時會被忽略。返回成功添加元素的數量。

刪除元素:SREM SREM key member [member ...] 刪除集合中一個或多個元素,返回成功刪除的個數。
獲取全部元素:SMEMBERS SMEMBERS key ,返回集合全部元素
值是否存在:SISMEMBER

SISMEMBER key member ,如果存在返回1,不存在返回0
差運算:SDIFF SDIFF key [key ...] ,例如:集合A和集合B,差集表示A-B,在A里有的元素B里沒有,返回差集合;多個集合(A-B)-C
交運算:SINTER SINTER key [key ...],返回交集集合,每個集合都有的元素
并運算:SUNION  SUNION key [key ...],返回并集集合,所有集合的元素
集合元素個數:SCARD SCARD key ,返回集合元素個數
集合運算后存儲結果

SDIFFSTROE destination key [key ...] ,差運算并存儲到destination新集合中SINTERSTROE destination key [key ...],交運算并存儲到destination新集合中SUNIONSTROE destination key [key ...],并運算并存儲到destination新集合中

隨機獲取元素:SRANDMEMGER

SRANDMEMBER key [count],根據count不同有不同結果,count大于元素總數時返回全部元素count>0 ,返回集合中count不重復的元素count<0,返回集合中count的絕對值個元素,但元素可能會重復

彈出元素:SPOP SPOP key [count] ,因為集合是無序的,所以spop會隨機彈出一個元素

五:有序集合類型 zset(sorted set:有序集合)

Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員。

不同的是每個元素都會關聯一個double類型的分數。

redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重復。

函數 語法
添加集合元素:ZADD ZADD key [NX|XX] [CH] [INCR] score member [score member ...],不存在添加,存在更新。
獲取元素分數:ZSCORE ZSCORE key member ,返回元素成員的score 分數
元素小到大:ZRANGE

ZRANGE key start top [WITHSCORES] ,參考LRANGE ,加上withscores 返回帶元素,即元素,分數當分數一樣時,按元素排序

元素大到小:ZREVRANGE ZREVRANGE key start [WITHSCORES] ,與zrange區別在于zrevrange是從大到小排序
指定分數范圍元素:ZRANGEBYSCORE

ZRANGEBYSCORE key min max [WITHSCORE] [LIMIT offest count]返回從小到大的在min和max之間的元素,( 符號表示不包含,例如:80-100,(80 100,withscore返回帶分數limit offest count 向左偏移offest個元素,并獲取前count個元素

指定分數范圍元素:ZREVRANGESCORE

ZREVRANGEBYSCORE key max min [WITHSCORE] [LIMIT offest count]與zrangebyscore類似,只不過該命令是從大到小排序的。

增加分數:ZINCRBY ZINCRBY key increment member ,注意是增加分數,返回增加后的分數;如果成員不存在,則添加一個為0的成員。

到此這篇關于redis中數據類型命令整理的文章就介紹到這了,更多相關redis中5種數據類型基本命令介紹內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

1.取最新N個數據的操作使用LPUSH latest.comments命令,向list集合中插入數據插入完成后再用LTRIM latest.comments 0 5000命令使其永遠只保存最近5000個ID然后我們在客戶端獲取某一頁評論時可以用下面的偽代碼 redis.lrange("latest.comments",start,start+num_items-1)ps:如果輸入無序則可以使用sorted set用時間作為score,然后lrangebyscore分頁讀取,按時間排序2.排行榜應用,取TOP n操作將你要排序的值設置成sorted set的score,將具體的數據設置成相應的value,每次只需要執行一條ZADD命令即可。3.需要精準設定過期時間的應用比如你可以把上面說到的sorted set的score值設置成過期時間的時間戳,那么就可以簡單地通過過期時間排序,定時清除過期數據了4.計數器應用INCR,DECR命令5.Uniq操作,獲取某段時間所有數據排重值使用Redis的set數據結構6.實時系統,反垃圾系統set7.Pub/Sub構建實時消息系統8.構建隊列系統使用list可以構建隊列系統,使用sorted set甚至可以構建有優先級的隊列系統。9.緩存其實沒有固定說那個類型一定用在什么場景,你需要了解redis數據類型的特點,并利用其特點來滿足你的場景需要。redis有字符串類型、列表、哈希表(散列表)、集合、有序集合這5種,各有不同。各有特點,列表經常用作隊列用作需要保持順序的場景,散列表可以去除重復值而且可以設置field屬性,集合可以去除重復而且支持集合操作適合tag系統以及關注人列表,有序集合在集合基礎上增加了排序內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • windows下redis的安裝使用圖解
  • redis實現布隆過濾器的方法及原理
  • redis有序集合類型的操作_動力節點java學院整理
  • 詳解redis是如何實現隊列消息的ack
  • redis中使用java腳本實現分布式鎖
  • redis的2種持久化方案深入講解
  • 深入了解redis的性能
  • 解決redis開啟遠程訪問及密碼問題
  • redis template實現分布式鎖的實例代碼
  • redis在php中常用的語法【推薦】
  • redis各種數據類型分別在什么情況下使用
  • 怎么向redis數據庫中同時插入不同類型的數據
  • 列表數據 redis用什么類型
  • redis 查看key的類型,是什么命令
  • redis 查看key的類型,是什么命令
  • redis里list類型的數據怎么使用
  • Redis數據庫適合使用于哪些應用場景
  • redis list數據類型中key值有哪些
  • 如何查詢redis存儲的所有數據
  • 如何統計Redis中各種數據的大小
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁rediswindows下redis的安裝使用圖解redis實現布隆過濾器的方法及原理redis有序集合類型的操作_動力節點java學院整理詳解redis是如何實現隊列消息的ackredis中使用java腳本實現分布式鎖redis的2種持久化方案深入講解深入了解redis的性能解決redis開啟遠程訪問及密碼問題redis template實現分布式鎖的實例代碼redis在php中常用的語法【推薦】超強、超詳細redis數據庫入門教程redis常用命令、常見錯誤、配置技redis操作命令總結redis中5種數據結構的使用場景介64位windows下安裝redis教程redis中使用redis-dump導出、導入redis中統計各種數據大小的方法redis常用命令小結讓redis在你的系統中發揮更大作用centos 6.6下redis安裝配置記錄談談redis分布式鎖的正確實現方法redis配置文件詳解redis list列表的詳細介紹玩轉redis搭建集群之sentinel詳解linux 下redis5.0.0安裝教程詳解redis 實現“附近的人”功能redis集群規范詳解windows環境部署redis集群redis中scan命令的基本使用教程利用redis統計網站在線活躍用戶的方法
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果