redis中插入使用者集合的語句,有四個屬性

2022-04-22 15:51:09 字數 2736 閱讀 6892

一、redis 資料結構使用場景

原來看過 redisbook 這本書,對 redis 的基本功能都已經熟悉了,從上週開始看 redis 的原始碼。目前目標是吃透 redis 的資料結構。我們都知道,在 redis 中一共有5種資料結構,那每種資料結構的使用場景都是什麼呢?

string——字串

hash——字典

list——列表

set——集合

sorted set——有序集合

下面我們就來簡單說明一下它們各自的使用場景:

1. string——字串

string 資料結構是簡單key - value型別,value不僅可以是string,也可以是數字,(當數字型別用long可以表示的時候encoding就是整數,其他都儲存在sdshdr當字串)。使用string型別,可以完全實現目前(memcached )的功能,並且效率更高。還可以享受redis的定時持久化,(可以選擇rdb模式或者aof模式),操作日誌及replication 等功能。除了提供與memcached 一樣的get。set , incr,decr 等操作外,redis還提供了下面一些操作:

1.len niushuai:o(1)獲取字串長度

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

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

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

6.原子計數器

7.getset 命令的妙用,請於清空舊值的同時設定乙個新值,配合原子計數器使用

2. hash——字典

在memcached 中,我們經常將一些結構化的資訊打包成hashmap,在客戶端序列化後儲存為乙個字串的值(一般是json格式)

比如使用者的年齡,性別,積分,等。這時候在需要將字串(json)取出來。然後進行反序列化,修改某個的值,在序列化成字串(json)儲存回去。簡單修改一下屬性就幹這麼多事情。消耗必定是很大的。也不大適用於一些可能併發操作的場合。(比如兩個併發的操作都是需要修改積分的)。而reids的hash結構可以使你像值資料庫中update乙個屬性一樣只修改某一項的值。

儲存,讀取,修改使用者屬性。

3. list——列表

1.微博 timeline

2.訊息佇列

4. set——集合

set就是乙個集合,集合的概念就是一堆不重複值的組合,利用reids提供的set資料結構,可以儲存一些集合性的資料。比如在微博應用中。可以將乙個使用者所有的關注人存在乙個集合中。將其所有粉絲存在乙個集合中。因為redis非常人性化的為集合提供了求交集,並集,差集等操作,那麼就可以很方便的實現如共同關注,共同喜好,二度友好等功能。對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是儲存在乙個新的集合中。

1.共同友好,二度好友。

2.利用唯一性。可以統計訪問**的所有獨立的ip。

3.好友推薦的時候.根據tag求交集,大於某個threshold就可以推薦。

5. sorted set——有序集合

和sets相比,sorted sets是將 set 中的元素增加了乙個權重引數 score,使得集合中的元素能夠按 score 進行有序排列,比如乙個儲存全班同學成績的 sorted sets,其集合 value 可以是同學的學號,而 score 就可以是其考試得分,這樣在資料插入集合的時候,就已經進行了天然的排序。另外還可以用 sorted sets 來做帶權重的佇列,比如普通資訊的 score 為1,重要訊息的 score 為2,然後工作執行緒可以選擇按 score 的倒序來獲取工作任務。讓重要的任務優先執行。

1.帶有權重的元素,比如乙個遊戲的使用者得分排行榜

2.比較複雜的資料結構,一般用到的場景不算太多

二、redis 其他功能使用場景

1. 訂閱-發布系統

pub/sub 從字面上理解就是發布(publish)與訂閱(subscribe),在 redis 中,你可以設定對某乙個 key 值進行訊息發布及訊息訂閱,當乙個 key 值上進行了訊息發布後,所有訂閱它的客戶端都會收到相應的訊息。這一功能最明顯的用法就是用作實時訊息系統,比如普通的即時聊天,群聊等功能。

2. 事務——transactions

誰說 nosql 都不支援事務,雖然 redis 的 transactions 提供的並不是嚴格的 acid 的事務(比如一串用 exec 提交執行的命令,在執行中伺服器宕機,那麼會有一部分命令執行了,剩下的沒執行),但是這個 transactions 還是提供了基本的命令打包執行的功能(在伺服器不出問題的情況下,可以保證一連串的命令是順序在一起執行的,中間有會有其它客戶端命令插進來執行)。redis 還提供了乙個 watch 功能,你可以對乙個 key 進行 watch,然後再執行 transactions,在這過程中,如果這個 watched 的值進行了修改,那麼這個 transactions 會發現並拒絕執行。

redis中set集合的命令

1.sadd 新增 2.srem 刪除 3.smembers 檢視set裡面的值 4.sismember 判斷某個元素是否是集合中元素 返回1 是,返回0 不是 5.sdiff 差集,相差的內容,跟key的前後位置有關,第乙個key中的不在第二個key中的元素 6.sinter 交集,兩個集合中都有...

mysql 中插入語句的錯誤

public int register string email,string name,string password,string loc,double latitude,double longitude,string user pic system.out.println 郵箱未註冊 執行更新...

Redis的整數集合

整數集合是集合鍵的底層實現之一,是redis用於儲存整數值的集合抽象資料結構,可以儲存的型別為int16 t int32 t int64 t,並保證集合中不會出現重複元素 typedef struct intset intset 將乙個新元素加到整數集合,如果新元素的型別比整數集合現有所有元素的型別...