Java學習筆記 Redis 資料型別

2021-09-02 08:07:36 字數 3758 閱讀 5447

redis是一種面向「key-value」型別資料的分布式nosql資料庫系統,具有高效能、持久儲存、適應高併發應用場景等優勢,是乙個高效能的鍵值對(key-value)資料庫。

redis整體的資料結構都是key-value(鍵值對)形式的,key都是string型別,value具有五種資料型別,分別是:stirng、hash、list、set、sortedset(zset)。

關於key的定義,注意如下幾點:

key不要太長,最好不要操作1024個位元組,這不僅會消耗記憶體還會降低查詢效率

key不要太短,如果太短會降低key的可讀性(見名知意)

在專案中,key最好有乙個統一的命名規範(一般在專案中根據模組以及功能來進行命名)

type key值:獲得該key對應值的型別,該命令將以字串的格式返回。 

clear:清屏  

del key值1,key值2...:刪除指定key的資料(該key下的所有資料全部刪除),返回刪除的個數。

exists key:判斷該key是否存在,1代表存在,0代表不存在

ltrim key startindex length:將key裁剪成指定長度【可能只適用於list】

flushall:重新整理全部

2、string型別(字元型別:string)

​ 字串型別是redis中最為基礎的資料儲存型別,儲存的都是二進位制資料(在redis中是二進位制安全的),這便意味著該型別存入和獲取的資料相同,因此不存在中文亂碼的問題(儲存的都是二進位制,存啥取啥《在工具裡正常顯示,在命令列顯示二進位制資料》),在redis中字串型別的value最多可以容納的資料長度是512m。

儲存結構:[key:value]

相當於:map​

1、設定值:set key值 value值

設定乙個與key值關聯的value值。如果key不存在,那麼就先設定乙個指定名稱(key值)的key,並將value值賦值給key;

如果該key已經存在,那麼使用新的value覆蓋該key的原始value。 ---> 新建或覆蓋

2、獲取值(只能獲取string型別):

1)、get key值

存在:該key值對應的是string型別,那麼返回該key值對應的value值;若該key值對應的不是string型別,報錯。

不存在:返回nil(表示不存在)

2)、 getset key值 value值

先獲取key值對應的原始value值,再使用指定的value值替換掉原始的value值(必須是string型別)。

​3、刪除值:del key值(通用指令)

3、hash型別(雜湊型別:map)

​ 主要用於儲存物件類的資料[key相當於物件名,filed相當於屬性名,value相當於屬性值],但是在實際開發中一般使用 string型別 + json資料格式 替代hash資料型別《操作簡單》。

​ 如果hash中包含很少的字段,那麼該型別的資料也將僅占用很少的磁碟 空間。每乙個hash可以儲存4294967295個鍵值對。

​ redis中的hash型別可以看成具有string key和string value的map容器。所以該型別非常適合於儲存鍵值對的信 息。

public class user

也就是說user裡面有三個屬性:username *** age

user user = new user("jack","boy",18);

​ hash就可以直接將這個user物件裡面的資料儲存到redis資料中! ---> key相當於物件的引用(物件名),filed相當於屬性名,

value相當於屬性值  

同乙個key(物件)可以具有多個filed(屬性),乙個filed(屬性)只能有乙個value(屬性值)

hset user name jack

hset user age 18

keys * // user

hget user name // jack

hget user age // 18

儲存結構:[key1:[filed1:value1,filed2:value2...],key2:[filed1:value1,filed2:value2...]...]

key:物件名

filed:屬性名

value:屬性值

相當於:map>​​

1、設定值:為指定的key值,設定指定的filed值-value值(鍵值對)

1)、一次設定單個值:hset key值 filed值 value值

2)、一次設定多個值:hset key值 filed值1 value值1 filed值2 value值2...

2、獲取值:獲取key值中指定filed的value值。

1)、一次獲取單個值:hget key值 filed值

2)、一次獲取多個值:hmget key值 filed值1 filed值2...

3)、獲取全部值:hgettall key值 ---> 獲取所有的filed及對應的value

3、刪除值:

一次刪除單個值:hdel key值 filed值   ---> 可以刪除乙個或多個字段,返回值是被刪除的字段個數

刪除所有:hdel key

4、list型別(列表型別:雙向鍊錶 --> 佇列)

​ 在redis中,list型別是按照插入順序排序的字串鍊錶。和資料結構中的普通鍊錶一樣,我們可以在其頭部(left)和 尾部(right)新增新的元素。在插入時,如果該鍵並不存在,redis將為該鍵建立乙個新的鍊錶。與此相反,如果鏈 表中所有的元素均被移除,那麼該鍵也將會被從資料庫中刪除。list中可以包含的最大元素數量是4294967295。

​ list型別採用的鍊錶是雙向鍊錶,乙個key對應著乙個鍊錶,乙個鍊錶可以儲存若干個value。採用key+索引的方式區分不同的value,value可以重複。

儲存結構:[key1:[value1,value2...],key2:[value1,value2...]....] ----> value可以重複,有序

key:集合名

value:鍊錶

相當於:map5、set型別(集合型別:無序集合)

​ 在redis中,我們可以將set型別看作為沒有排序的字元集合,和list型別一樣,我們也可以在該型別的資料值上執 行新增、刪除或判斷某一元素是否存在等操作。需要說明的是,這些操作的時間複雜度為o(1),即常量時間內完成 次操作。set可包含的最大元素數量是4294967295,和list型別不同的是,set集合中不允許出現重複的元素。

​ 不允許資料重複(同乙個key中的value不能相同,相同的新增不進去《只新增乙個》) ,無序的列表,多個set之間可以進行聚合操作(並集 交集 差集)。 ---> 底層採用的可能是set集合

儲存結構:[key1:[value1,value2...],key2:[value1,value2...]....] ----> value不可以重複,無序

key:集合名

value:set集合

相當於:map>> c1 c5 c7

6、sortedset(zset,有序集合型別)

​ 乙個key可以對應多個score,乙個score可以對應多個value[相當於乙個key對應著多個score,每個score對應著乙個鍊錶]score可以重複 但是value不可以重複《不同score中也不能含有相同的value>[預設按照分數從低到高的順序排序] ----> 底層:map + 鍊錶。

redis學習筆記 redis資料型別

泛指非關係型的資料庫。隨著網際網路web2.0 的興起,傳統的關聯式資料庫在應付web2.0 特別是超大規模和高併發的sns型別的web2.0純動態 已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。nosql資料庫的產生就是為了解決大規模資料集合...

Redis學習筆記 Redis資料過期策略詳解

本文對redis的過期機制簡單的講解一下 講解之前我們先丟擲乙個問題,我們知道很多時候伺服器經常會用到redis作為快取,有很多資料都是臨時快取一下,可能用過之後很久都不會再用到了 比如暫存session,又或者只存放日 資料 那麼就會出現一下幾個問題了 redis會自己 清理不用的資料嗎?如果能,...

Redis學習筆記 Redis內部資料結構

redis內部資料結構 redis和其他key value資料庫的很大區別是它支援非字串型別的value值。它支援的value值的型別如下 sds dynamic string 簡單動態字串 雙端鍊錶 字典 dictionary map associative array 跳躍表 skiplist ...