一文快速搞懂Redis的幾種數(shù)據(jù)類型方式
Redis簡(jiǎn)介
Redis 是一個(gè)開源(BSD許可)的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫、緩存和消息中間件。
它支持多種類型的數(shù)據(jù)結(jié)構(gòu),如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與范圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。
Redis 內(nèi)置了 復(fù)制(replication),LUA腳本(Lua scripting), LRU驅(qū)動(dòng)事件(LRU eviction),事務(wù)(transactions) 和不同級(jí)別的 磁盤持久化(persistence), 并通過 Redis哨兵(Sentinel)和自動(dòng) 分區(qū)(Cluster)提供高可用性(high availability)。
Redis有幾種數(shù)據(jù)類型
Redis是一個(gè)以key-value存儲(chǔ)系統(tǒng),一個(gè)Key鍵值對(duì)應(yīng)一個(gè)value值,鍵值不能重復(fù),它支持存儲(chǔ)的value類型有5種。
Redis支持五種數(shù)據(jù)類型:
- String(字符串)
- List(列表)
- Set(集合)
- Hash(哈希)
- Zset(sorted set:有序集合)
Redis的基本指令
在講數(shù)據(jù)類型前先來看一下Redis的基本指令,主要是針對(duì)Key鍵值和的一些操作。
Redis默認(rèn)16個(gè)數(shù)據(jù)庫,類似數(shù)組下標(biāo)從0開始,初始默認(rèn)使用0號(hào)庫

可以通過以下指令來修改默認(rèn)存放的數(shù)據(jù)庫
select <dbid> 如: select 1
Redis針對(duì)Key鍵值的一些基本操作。
keys * 查詢當(dāng)前庫的所有鍵,返回鍵值 exists <key> 判斷某個(gè)鍵是否存在,返回0或1 type <key> 查看鍵的類型 del <key> 刪除某個(gè)鍵 expire <key> <seconds> 為鍵值設(shè)置過期時(shí)間,單位秒 ttl <key> 查看還有多少秒過期,-1表示永不過期,-2表示已過期 dbsize 查看當(dāng)前數(shù)據(jù)庫的key的數(shù)量
Demo樣例,初始Redis中有a,b兩個(gè)鍵。

清空Redis庫的兩個(gè)指令
Flushdb 清空當(dāng)前庫 Flushall 清空全部庫
String(字符串)
- String是Redis最基本的類型,你可以理解成與Memcached一模一樣的類型,一個(gè)key對(duì)應(yīng)一個(gè)value。
- String類型是二進(jìn)制安全的。意味著Redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象 。
- String類型是Redis最基本的數(shù)據(jù)類型,一個(gè)Redis中字符串value最多可以是512M
基本指令:
set <key> <value> 添加鍵值 get <key> 查詢對(duì)應(yīng)的鍵值 append <key> <value> 將給定的<value> 追加到原鍵值的末尾 strlen <key> 獲取鍵值的長(zhǎng)度 setnx <key> <value> 只有在 key 不存在時(shí)設(shè)置 key 的值 incr <key> 將 key 中儲(chǔ)存的數(shù)字值自增1,只能對(duì)數(shù)字值操作,如果為空,新增值為1 decr <key> 將 key 中儲(chǔ)存的數(shù)字值減1,只能對(duì)數(shù)字值操作,如果為空,新增值為-1 incrby / decrby <key> <步長(zhǎng)> 將 key 中儲(chǔ)存的數(shù)字值增 / 減。自定義步長(zhǎng)。 mset <key1> <value1> <key2> <value2> .... 同時(shí)設(shè)置一個(gè)或多個(gè) key-value對(duì) mget <key1> <key2> <key3> ..... 同時(shí)獲取一個(gè)或多個(gè) value msetnx <key1> <value1> <key2> <value2> ..... 同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì),當(dāng)且僅當(dāng)所有給定 key 都不存在。 getrange <key> <起始位置> <結(jié)束位置> 獲得值的范圍,類似java中的substring setrange <key> <起始位置> <value> 用 <value> 覆寫<key> 所儲(chǔ)存的字符串值,從<起始位置>開始。 setex <key> <過期時(shí)間> <value> 設(shè)置鍵值的同時(shí),設(shè)置過期時(shí)間,單位秒。 getset <key> <value> 以新?lián)Q舊,設(shè)置了新值同時(shí)獲得舊值。
Demo樣例


List(列表)
Redis 列表是簡(jiǎn)單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素導(dǎo)列表的頭部(左邊)或者尾部(右邊)。
它的底層實(shí)際是個(gè)雙向鏈表,對(duì)兩端的操作性能很高,通過索引下標(biāo)的操作中間的節(jié)點(diǎn)性能會(huì)較差。

基本指令:
lpush/rpush <key> <value1> <value2> <value3> .... 從左邊/右邊插入一個(gè)或多個(gè)值。 lpop/rpop <key> 從左邊/右邊吐出一個(gè)值并刪除。值在鍵在,值亡鍵亡。 rpoplpush <key1> <key2> 從<key1>列表右邊吐出一個(gè)值,插到<key2>列表左邊。 lrange <key> <start> <stop> 按照索引下標(biāo)獲得元素(從左到右) lindex <key> <index> 按照索引下標(biāo)獲得元素(從左到右) llen <key> 獲得列表長(zhǎng)度 linsert <key> before <value> <newvalue> 在<value>的前面插入<newvalue> 插入值 lrem <key> <n> <value> 從左邊刪除n個(gè)value(從左到右)
Demo樣式

Set(集合)
Redis set對(duì)外提供的功能與list類似是一個(gè)列表的功能,特殊之處在于set是可以自動(dòng)排重的,當(dāng)你需要存儲(chǔ)一個(gè)列表數(shù)據(jù),又不希望出現(xiàn)重復(fù)數(shù)據(jù)時(shí),set是一個(gè)很好的選擇,并且set提供了判斷某個(gè)成員是否在一個(gè)set集合內(nèi)的重要接口,這個(gè)也是list所不能提供的。
Redis的Set是string類型的無序集合。它底層其實(shí)是一個(gè)value為null的hash表,所以添加,刪除,查找的復(fù)雜度都是O(1)。
基本指令:
sadd <key> <value1> <value2> ..... 將一個(gè)或多個(gè) value元素加入到集合 key 當(dāng)中,已經(jīng)存在于集合的 value 元素將被忽略。 smembers <key> 取出該集合的所有值。 sismember <key> <value> 判斷集合<key>是否為含有該<value>值,有返回1,沒有返回0 scard <key> 返回該集合的元素個(gè)數(shù)。 srem <key> <value1> <value2> .... 刪除集合中的某個(gè)元素。 spop <key> 隨機(jī)從該集合中吐出一個(gè)值并刪除。 srandmember <key> <n> 隨機(jī)從該集合中取出n個(gè)值。不會(huì)從集合中刪除 sinter <key1> <key2> 返回兩個(gè)集合的交集元素。 sunion <key1> <key2> 返回兩個(gè)集合的并集元素。 sdiff <key1> <key2> 返回兩個(gè)集合的差集元素。
Demo樣式

Hash(哈希)
- Redis hash 是一個(gè)鍵值對(duì)集合。
- Redis hash是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象。
- 類似Java里面的Map<String,String>
基本指令:
hset <key> <field> <value> 設(shè)置<key>集合中指定字段的值 hget <key> <field> 從<key>集合取出字段的value hmset <key> <field1> <value1> <field2> <value2>... 批量設(shè)置hash的值 hexists key <field> 查看哈希表 key 中,給定域 field 是否存在。 hkeys <key> 列出該hash集合的所有field hvals <key> 列出該hash集合的所有value hincrby <key> <field> <increment> 將該對(duì)象中指定域的值增加給定的value,原子自增操作,只能是integer的屬性值可以使用 hsetnx <key> <field> <value> 將哈希表 key 中的域 field 的值設(shè)置為 value ,當(dāng)且僅當(dāng)域 field 不存在 .
Demo樣式

Zset(sorted set:有序集合)
Redis有序集合zset與普通集合set非常相似,是一個(gè)沒有重復(fù)元素的字符串集合。不同之處是有序集合的每個(gè)成員都關(guān)聯(lián)了一個(gè)評(píng)分(score) ,這個(gè)評(píng)分(score)被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評(píng)分可以是重復(fù)了 。
因?yàn)樵厥怯行虻? 所以你也可以很快的根據(jù)評(píng)分(score)或者次序(position)來獲取一個(gè)范圍的元素。訪問有序集合的中間元素也是非??斓?因此你能夠使用有序集合作為一個(gè)沒有重復(fù)成員的智能列表。
基本指令:
zadd <key> <score1> <value1> <score2> <value2>... 將一個(gè)或多個(gè) value元素及其 score 值加入到有序集 key 當(dāng)中。 zrange <key> <start> <stop> [WITHSCORES] 返回有序集 key 中,下標(biāo)在<start> <stop>之間的元素,帶WITHSCORES,可以讓分?jǐn)?shù)一起和值返回到結(jié)果集。 zrangebyscore key min max [withscores] [limit offset count] 返回有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列。 zrevrangebyscore key max min [withscores] [limit offset count] 同上,改為從大到小排列。 zincrby <key> <increment> <value> 為元素的score加上增量 zrem <key> <value> 刪除該集合下,指定值的元素 zcount <key> <min> <max> 統(tǒng)計(jì)該集合,分?jǐn)?shù)區(qū)間內(nèi)的元素個(gè)數(shù) zrank <key> <value> 返回該值在集合中的排名,從0開始。
Demo樣式

RedisDesktopManager數(shù)據(jù)查看工具
RedisDesktopManager是一款開源的Redis數(shù)據(jù)庫管理應(yīng)用程序。
- 官網(wǎng)下載:https://redisdesktop.com/download
- GitHub地址:https://github.com/uglide/RedisDesktopManager/releases
下載完成后,安裝就直接點(diǎn)下一步即可
安裝完成后創(chuàng)建連接后就可以使用了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis創(chuàng)建并修改Lua 環(huán)境的實(shí)現(xiàn)方法
為了在Redis服務(wù)器中執(zhí)行Lua腳本, Redis在服務(wù)器內(nèi)嵌了一個(gè)Lua環(huán)境, 并對(duì)這個(gè)Lua環(huán)境進(jìn)行了一系列修改,本文主要介紹了Redis創(chuàng)建并修改Lua 環(huán)境的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
Redisson如何解決redis分布式鎖過期時(shí)間到了業(yè)務(wù)沒執(zhí)行完問題
這篇文章主要介紹了Redisson如何解決redis分布式鎖過期時(shí)間到了業(yè)務(wù)沒執(zhí)行完問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
redis反序列化報(bào)錯(cuò)原因分析以及解決方案
這篇文章主要介紹了redis反序列化報(bào)錯(cuò)原因分析以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
詳解Redis在SpringBoot工程中的綜合應(yīng)用
這篇文章主要介紹了Redis在SpringBoot工程中的綜合應(yīng)用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
Redis如何在項(xiàng)目中合理使用經(jīng)驗(yàn)分享
這篇文章主要給大家介紹了關(guān)于Redis如何在項(xiàng)目中合理使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Redis腦裂導(dǎo)致數(shù)據(jù)丟失的解決
本文主要介紹了Redis腦裂導(dǎo)致數(shù)據(jù)丟失的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
redis中5種數(shù)據(jù)基礎(chǔ)查詢命令
本文主要介紹了redis中5種數(shù)據(jù)基礎(chǔ)查詢命令,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
使用Redis實(shí)現(xiàn)用戶積分排行榜的教程
這篇文章主要介紹了使用Redis實(shí)現(xiàn)用戶積分排行榜的教程,包括一個(gè)用PHP腳本進(jìn)行操作的例子,需要的朋友可以參考下2015-04-04
Windows中Redis安裝配置流程并實(shí)現(xiàn)遠(yuǎn)程訪問功能
很多在windows環(huán)境中安裝Redis總是出錯(cuò),今天小編抽空給大家分享在Windows中Redis安裝配置流程并實(shí)現(xiàn)遠(yuǎn)程訪問功能,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-06-06

