reids資料型別

2022-05-18 22:30:20 字數 3660 閱讀 9567

今天第一次開通,寫的不好,請諒解

redis並不是簡單的key-value儲存,實際上它是乙個資料結構伺服器,支援不同型別的值,也就是說,我們不僅僅把字串當作鍵所指向的值,

如下這些資料型別都可以作為值型別:

1 二進位制安全的字串:string;

2 二進位制安全的字串列表:list of string;

3二進位制安全的字串集合:set of string,換言之:它是一組無重複未排序的element; 可以把它看成ruby中的hash-其key等於element,value都等於'true'。

4 有序集合:sorted set of string,類似於集合set,但其中每個元素都和乙個浮點數score(評分)關聯。element根據score排序,可以把它看成ruby中的hash-其key等於element,value等於score,但元素總是按score的順序排序,無需額外的排序操作

redis 鍵

redis key值是二進位制安全的,這意味著可以可以用任何二進位制序列作為key值,從形如"foo"的簡單字串到乙個jpeg檔案的內容都可以。

空字串也是有效key值。

key的規則:

1太長的鍵值不是好主意,例如1024位元組的鍵值就不是好主意,不僅因為消耗記憶體,而且在資料中查詢這類鍵值的計算成本很高;

2太短的鍵值通常也不是好主意,如果你要用"u:1000:pwd"來代替"user:1000:password",這沒有什麼問題,但後者更易閱讀,並由此增加的空間消耗相對於key object和value object本身來說很小,也沒有人去阻止您一定要用更短的鍵值節省一丁點空間;

3 最好堅持一種模式。如:"object-type:id:field"就是個不錯的注意,像這樣"user:1000:password"。在多單詞的欄位名中加上乙個點,就像:"comment:1234:reply.to"

字串是redis的基本值型別

字串型別:redis就像乙個可以持久化的memcached伺服器(注:memcache的資料僅儲存在記憶體中,伺服器重啟後,資料將丟失)。

通常用set command 和 get command來設定和獲取字串值。

值可以是任何種類的字串(包括二進位制資料),例如你可以在乙個鍵下儲存一副jpeg。值的長度不能超過1gb。

原子遞增:

$ redis-cli set counter 100

ok $ redis-cli incr counter

(integer) 101

$ redis-cli incr counter

(integer) 102

$ redis-cli incrby counter 10

(integer) 112

incr 命令將字串值解析成整型,將其加一,最後將結果儲存為新的字串值,類似的命令有incrby, decr and decrby。實際上他們在內部就是同乙個命令,只是看上去有點兒不同。

getset命令:為key設定新值並且返回原值,如果我們的系統中有新的使用者訪問時就用incr命令操作乙個redis key,但如果我們希望每小時對這個資訊收集一次,那麼我們就可以用getset這個key並給其賦值0並讀取原值

列表型別:一般來講,列表就是有序元素的序列:10,20,1,2,3就是乙個列表,但用陣列實現的list和用linked list實現的list,在屬性方面大不相同。

redis lists用linked list實現的原因是:對於資料庫系統來說,至關重要的特性是:能非常快的在很大的列表上新增元素。另乙個重要因素是,正如你將要看到的:redis lists能在常數時間取得常數長度。

redis的七種特性:

一 strings資料結構

簡單的key-value型別,value其實不僅是string,也可以是數字。

使用strings型別,你可以完全實現目前 memcached 的功能,並且效率更高。

還可以享受redis的定時持久化,操作日誌及 replication等功能。

除了提供與 memcached 一樣的get、set、incr、decr 等操作外,

redis還提供了下面一些操作:

獲取字串長度

設定和獲取字串的某一段內容

設定及獲取字串的某一位(bit)

批量設定一系列字串的內容

二 hashs

在memcached中,我們經常將一些結構化的資訊打包成hashmap,在客戶端序列化後儲存為乙個字串的值,比如使用者的暱稱、年齡、性別、積分等,這時候在需要修改其中某一項時,通常需要將所有值取出反序列化後,修改某一項的值,再序列化儲存回去。

這樣不僅增大了開銷,也不適用於一些可能併發操作的場合(比如兩個併發的操作都需要修改積分)。

而redis的hash結構可以使你像在資料庫中update乙個屬性一樣只修改某一項屬性值。

三 lists

lists 就是鍊錶,相信略有資料結構知識的人都應該能理解其結構。

使用lists結構,我們可以輕鬆地實現最新訊息排行等功能。

lists的另乙個應用就是訊息佇列,可以利用lists的push操作,將任務存在lists中,然後工作執行緒再用pop操作將任務取出進行執行。

redis還提供了操作lists中某一段的api,你可以直接查詢,刪除lists中某一段的元素。

四 sets

sets 就是乙個集合,集合的概念就是一堆不重複值的組合。

利用redis提供的sets資料結構,可以儲存一些集合性的資料,比如在微博應用中,可以將乙個使用者所有的關注人存在乙個集合中,將其所有粉絲存在乙個集合。

redis還為集合提供了求交集、並集、差集等操作,可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到乙個新的集合中。

五 sorted sets

和sets相比,sorted

sets增加了乙個權重引數score,使得集合中的元素能夠按score進行有序排列,比如乙個儲存全班同學成績的sorted

sets,其集合value可以是同學的學號,而score就可以是其考試得分,這樣在資料插入集合的時候,就已經進行了天然的排序。

另外還可以用sorted

sets來做帶權重的佇列,比如普通資訊的score為1,重要訊息的score為2,然後工作執行緒可以選擇按score的倒序來獲取工作任務。讓重要的任務優先執行。

六 pub/sub

pub/sub

從字面上理解就是發布(publish)與訂閱(subscribe),在redis中,你可以設定對某乙個key值進行訊息發布及訊息訂閱,當乙個key值上進行了訊息發布後,所有訂閱它的客戶端都會收到相應的訊息。

這一功能最明顯的用法就是用作實時訊息系統,比如普通的即時聊天,群聊等功能。

七 transactions

誰說nosql都不支援事務,雖然redis的transactions提供的並不是嚴格的acid的事務(比如一串用exec提交執行的命令,在執行中伺服器宕機,那麼會有一部分命令執行了,剩下的沒執行),

但是這個transactions還是提供了基本的命令打包執行的功能(在伺服器不出問題的情況下,可以保證一連串的命令是順序在一起執行的,中間有會有其它客戶端命令插進來執行)。

redis還提供了乙個watch功能,你可以對乙個key進行watch,然後再執行transactions,

在這過程中,如果這個watched的值進行了修改,那麼這個transactions會發現並拒絕執行。

reids入門 Redis 資料型別及應用場景

目錄 一 redis 特點 二 設計 redis key 三 string資料型別的應用場景 四 hash 資料型別的應用場景 五 list 資料型別的應用場景 六 set 資料型別的應用場景 七 sorted set 資料型別的應用場景 通常我們都把資料存到關係型資料庫中,但為了提公升應用的效能,...

資料型別基礎資料型別

資料型別 基礎型別 除八大基礎型別其他的都是引用型資料型別 引用資料型別 基礎資料型別 整型 byte 佔乙個位元組,範圍 128 127 short 佔兩個位元組,範圍 32768 32767 int 最常用 佔四個位元組,範圍 2147483648 2147483647 long 佔八個位元組 ...

資料型別 基本資料型別和引用資料型別

一.分類 1,五種簡單資料型別 基本資料型別 number,string,boolean,null,undefined,新增symbol es6 基本資料型別是指存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配,它們是直接按值存放的,所以可以直接按值訪問。1 undefined 宣告的變...