1. 程式人生 > >04_NoSQL資料庫之Redis資料庫:set型別和zset型別

04_NoSQL資料庫之Redis資料庫:set型別和zset型別



sets型別及操作

Set是集合,它是string型別的無序集合。set是通過hash table實現的,新增,刪除和查詢複雜度都是01)。對集合我們可以取並集、交集、差集。通過這些操作我們可以實現sns中的好友推薦和blogtag功能。

sadd:向集合中新增一個元素,通名稱為keyset中新增元素。

[toto@localhost bin]$ ./redis-cli

127.0.0.1:6379> sadd myset1 one

(integer) 1

127.0.0.1:6379> sadd myset1 two

(integer) 1

127.0.0.1:6379> sadd myset1 two

再次新增的時候新增不成功了。

(integer) 0

127.0.0.1:6379>

通過smembers檢視集合中有哪些元素

127.0.0.1:6379> smembers myset1

1) "two"

2) "one"

127.0.0.1:6379>

srem:刪除名稱為keyset中的元素,刪除成功返回1,刪除失敗返回0

127.0.0.1:6379> smembers myset2

1) "two"

2) "one"

3) "three"

127.0.0.1:6379> srem myset2 two

(integer) 1

127.0.0.1:6379> srem myset2 two

(integer) 0

127.0.0.1:6379> smembers myset2

1) "one"

2) "three"

127.0.0.1:6379>

spop:無法指定彈出元素,是隨機返回並刪除名稱為keyset中一個元素。

127.0.0.1:6379> sadd myset3 one

(integer) 1

127.0.0.1:6379> sadd myset3 two

(integer) 1

127.0.0.1:6379> sadd myset3 three

(integer) 1

127.0.0.1:6379> sadd myset3 four

(integer) 1

127.0.0.1:6379> sadd myset3 five

(integer) 1

127.0.0.1:6379> smembers myset3

1) "four"

2) "three"

3) "one"

4) "two"

5) "five"

127.0.0.1:6379> spop myset3//隨機彈出的是three

"three"

127.0.0.1:6379> smembers myset3

1) "one"

2) "four"

3) "five"

4) "two"

127.0.0.1:6379> spop myset3//隨機彈出的是four

"four"

127.0.0.1:6379> smembers myset3

1) "one"

2) "five"

3) "two"

127.0.0.1:6379>

sdiff:兩個集合的差集。

返回所有給定key與第一個key的差集。

127.0.0.1:6379> smembers myset3

1) "one"

2) "four"

3) "five"

4) "two"

127.0.0.1:6379> spop myset3

"four"

127.0.0.1:6379> smembers myset3

1) "one"

2) "five"

3) "two"

127.0.0.1:6379> sadd myset2 three

(integer) 1

127.0.0.1:6379> sadd myset2 four

(integer) 1

127.0.0.1:6379> sadd myset2 one

(integer) 1

127.0.0.1:6379> smembers myset2

1) "one"

2) "four"

3) "three"

127.0.0.1:6379> sdiff myset2 myset3//去除myset2中含有與myset3元素的值。

1) "three"

2) "four"

127.0.0.1:6379>

sdiffstore:返回所有給定key與第一個key的差集,並將結果存為另一個key.

sdiffstore myset4 myset2 myset3表示的意思是將myset3myset2的差集儲存到myset4裡面。

127.0.0.1:6379> sadd myset2 one

(integer) 1

127.0.0.1:6379> sadd myset2 two

(integer) 1

127.0.0.1:6379> sadd myset2 three

(integer) 1

127.0.0.1:6379> sadd myset3 one

(integer) 1

127.0.0.1:6379> sadd myset3 two

(integer) 1

127.0.0.1:6379> sadd myset3 three

(integer) 1

127.0.0.1:6379> sadd myset3 four

(integer) 1

127.0.0.1:6379> sadd myset3 five

(integer) 1

127.0.0.1:6379> sadd myset3 six

(integer) 1

127.0.0.1:6379> sdiff myset2 myset3

(empty list or set)

127.0.0.1:6379> sdiff myset3 myset2 //顯示myset3中含有myset2的元素

1) "six"

2) "five"

3) "four"

127.0.0.1:6379> sdiffstore myset4 myset3 myset2myset3myset2的差集存入myset4

(integer) 3

127.0.0.1:6379> smembers myset4

1) "six"

2) "five"

3) "four"

127.0.0.1:6379>

sinter:

返回所有給定key的交集

sinterstore將取出的差集存入到另外的一個集合中。

127.0.0.1:6379> sadd myset1 one

(integer) 1

127.0.0.1:6379> sadd myset1 two

(integer) 1

127.0.0.1:6379> sadd myset2 two

(integer) 1

127.0.0.1:6379> sadd myset2 three

(integer) 1

127.0.0.1:6379> sadd myset2 four

(integer) 1

127.0.0.1:6379> sadd myset2 five

(integer) 1

127.0.0.1:6379> sadd myset3 four

(integer) 1

127.0.0.1:6379> sadd myset3 five

(integer) 1

127.0.0.1:6379> sadd myset3 six

(integer) 1

127.0.0.1:6379> sadd myset3 seven

(integer) 1

127.0.0.1:6379> smembers myset1

1) "two"

2) "one"

127.0.0.1:6379> smembers myset2

1) "four"

2) "three"

3) "five"

4) "two"

127.0.0.1:6379> smembers myset3

1) "seven"

2) "four"

3) "six"

4) "five"

127.0.0.1:6379> sinter myset3 myset2

1) "four"

2) "five"

127.0.0.1:6379> sinterstore myset6 myset3 myset2

(integer) 2

127.0.0.1:6379> smembers myset6

1) "four"

2) "five"

127.0.0.1:6379>

sunion:表示插入並集。

返回所有給定key的並集。

127.0.0.1:6379> sadd myset1 one

(integer) 1

127.0.0.1:6379> sadd myset2 two

(integer) 1

127.0.0.1:6379> sadd myset1 two

(integer) 1

127.0.0.1:6379> sadd myset2 three

(integer) 1

127.0.0.1:6379> sadd myset2 four

(integer) 1

127.0.0.1:6379> sunion myset1 myset2檢視並集

1) "three"

2) "two"

3) "four"

4) "one"

127.0.0.1:6379> sunionstore myset7 myset1 myset2 將並集的結果存入myset7

(integer) 4//返回值是4表示成功將4個元素插入myset7

127.0.0.1:6379> smembers myset1

1) "two"

2) "one"

127.0.0.1:6379> smembers myset2

1) "three"

2) "two"

3) "four"

127.0.0.1:6379> smembers myset7

1) "three"

2) "two"

3) "four"

4) "one"

127.0.0.1:6379>

smove:從第一個key對應的set中移除member並新增到第二個對應的set中。(將第一個集合中的元素剪下下來放入第二個元素中)

smove myset2 myset7 three表示:myset2中的three元素扔到myset7

127.0.0.1:6379> smembers myset1

1) "two"

2) "one"

127.0.0.1:6379> smembers myset2

1) "three"

2) "two"

3) "four"

127.0.0.1:6379> sadd myset1 five

(integer) 1

127.0.0.1:6379> smembers myset8

(empty list or set)

127.0.0.1:6379> smove myset1 myset8 two myset1中的two元素移動到myset8

(integer) 1

127.0.0.1:6379> smembers myset8

1) "two"

127.0.0.1:6379> smembers myset1

1) "five"

2) "one"

127.0.0.1:6379>

scard返回名稱為keyset的元素個數。(看集合中的元素個數)

127.0.0.1:6379> smembers myset1myset1集合中的元素有哪些

1) "five"

2) "one"

127.0.0.1:6379> smembers myset2myset2集合中的元素有哪些

1) "three"

2) "two"

3) "four"

127.0.0.1:6379> smembers myset8myset8集合中的元素有哪些

1) "two"

127.0.0.1:6379> scard myset1檢視myset1中的元素個數

(integer) 2

127.0.0.1:6379> scard myset2檢視myset2中的元素個數

(integer) 3

127.0.0.1:6379> scard myset8

(integer) 1

127.0.0.1:6379>

sismember:測試member是否是名稱為keyset的元素。(判斷某個元素是否是某個集合中的元素,是返回1,不是返回0

127.0.0.1:6379> smembers myset1

1) "five"

2) "one"

127.0.0.1:6379> sismember myset1 one判斷one是否是myset1中的元素

(integer) 1

127.0.0.1:6379> sismember myset1 two判斷two是否是myset1中的元素

(integer) 0

127.0.0.1:6379>

srandmember:隨機返回名稱為keyset的一個元素,但不刪除元素。

127.0.0.1:6379> smembers myset1

1) "five"

2) "one"

127.0.0.1:6379> srandmember myset7

"three"

127.0.0.1:6379> srandmember myset7

"two"

127.0.0.1:6379> srandmember myset7

"four"

127.0.0.1:6379> srandmember myset7

"three"

Sorted sets型別及操作

Sortedsetset的一個升級版本,它在set的基礎上增加了一個順序屬性,這一屬性在新增修改元素的時候可以指定,每次指定後,zset會自動重新按新的值調整順序。可以理解為由兩列的mysql表,一列存value,一列存順序。操作中key理解為zset的名字。

zadd:向名稱為keyzset中新增元素member,score用於排序。如果該元素存在,則更新器順序。語法:zadd set名稱順序

127.0.0.1:6379> zadd myzset 1 "one"

(integer) 1

127.0.0.1:6379> zadd myzset 2 "two"

(integer) 1

127.0.0.1:6379> zadd myzset 3 "two"

(integer) 0

這裡的0 -1表示順序號withscores表示的意思是帶上順序號。

127.0.0.1:6379> zrange myzset 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "3"

127.0.0.1:6379>

再如:

127.0.0.1:6379> zadd sset1 1 two

(integer) 1

127.0.0.1:6379> zadd sset1 2 two

(integer) 0

127.0.0.1:6379> zadd sset1 3 two

(integer) 0

127.0.0.1:6379> zadd sset1 1 one

(integer) 1

127.0.0.1:6379> zrange sset1 0 -1

1) "one"

2) "two"

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "3"

127.0.0.1:6379>

zrem:刪除名稱為keyzset中的元素member

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "3"

127.0.0.1:6379> zrem sset1 two

(integer) 1

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "1"

127.0.0.1:6379>

zincrby:如果在名稱為keyzset中已經存在元素member,則該元素的score增加increment,否則向該集合中新增該元素,其score的值為increment

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "1"

127.0.0.1:6379> zincrby sset1 2 one//one的順序號增加3,同樣可以減2

"3"//表示one的順序號變成了3

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "3"//one的序號變成了3

127.0.0.1:6379>

zrank:返回名稱為keyzset中的member元素的排名。(按score從小到大排序)即下標。(返回的是索引值,和序號值是有差別的)

127.0.0.1:6379> zadd sset2 1 one

(integer) 1

127.0.0.1:6379> zadd sset2 2 two

(integer) 1

127.0.0.1:6379> zadd sset2 3 three

(integer) 1

127.0.0.1:6379> zadd sset2 4 four

(integer) 1

127.0.0.1:6379> zadd sset2 5 five

(integer) 1

127.0.0.1:6379> zrange sset2 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "2"

5) "three"

6) "3"

7) "four"

8) "4"

相關推薦

04_NoSQL資料庫Redis資料庫set型別zset型別

 sets型別及操作 Set是集合,它是string型別的無序集合。set是通過hash table實現的,新增,刪除和查詢複雜度都是0(1)。對集合我們可以取並集、交集、差集。通過這些操作

Redis資料庫set型別zset型別

一.set型別 set是一個集合,它是string型別的無序集合,set是通過hash table實現的,新增,刪除,查詢的時間複雜度都是O(1),對於集合我們可以取並集,交集,差集。通過這些操作我們可以實現SNS中好友推薦和Blog的tag功能。 set常見操作:

五十二、Redis 資料庫 2set型別zset型別、hash型別

一、set集合型別(無序集合型別) redis裡面的set集合型別是string型別的無序集合,被稱為無序集合型別。 set元素最大可以包含(2的32次方-1)個元素。 1、集合滿足三個特點:

三十七、python學習Redis資料庫

一、簡介 1.Nosql: 1.1.什麼是Nosql: 一類新出現的資料庫(not only sql),他的特點: (1)不支援 SQL語法。 (2)儲存結構跟傳統的關係型資料庫的那種關係表完全不同,nosql中儲存的資料都是鍵值對的形式。 (3)No

《SQL入門經典》筆記(第四章建立資料庫規格化資料庫

1. 原始資料庫: 在未規格化之前,一些資料可能會在多個表中出現,這被稱作資料冗餘。資料冗餘對安全、磁碟利用、查詢速度和資料庫更新都有壞處。尤其是資料完整性會受到影響。   2. 什麼是規格化? 規格化是把原始資料庫分解為表,去除資料庫裡冗餘資料的過程。資料庫開發人員利用規

《SQL入門經典》筆記(第三章建立資料庫管理資料庫物件)

1. 什麼是資料庫物件? 資料庫物件用於儲存或引用資料,需要被定義,例如表、試圖、簇、序列、索引和異名(讓表具有另一個名稱)。   2. 什麼是規劃? 規劃是與資料庫某個使用者名稱相關聯的資料庫物件集合。相應的使用者名稱被稱為“規劃所有人”/“關聯物件組的所有人”。 同

資料庫redis篇(1)—— redis資料庫安裝,簡單使用

簡介 reids,由Salvatore Sanfilippo寫的一個高效能的key-value資料庫,並且它是非關係型資料庫,也就是沒有像mysql那樣多表連結操作,並且它是是完全開源免費的,遵守BSD協議。   reids 與其他 key - value 快取產品有以下三個特點: r

資料庫redis篇(2)—— redis配置檔案,常用命令,效能測試工具

redis配置 如果你是找網上的其他教程來完成以上操作的話,相信你見過有的啟動命令是這樣的:   啟動命令帶了這個引數:redis.windows.conf,由於我測試環境是windows平臺,所以是這個,有的是redis.conf。顧名思義,redis.conf就是配置檔案,然後啟動時加

資料庫---redis叢集

Redis cluster tutorial Redis叢集提供一種方式自動將資料分佈在多個Redis節點上。 Redis Cluster provides a way to run a Redis installation where data is automatically sharded

資料庫Redis的簡單使用

一、redis redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。這些資料型別都支援push/pop、add/remo

第十四招 PHPRedis資料庫

下載redis 到github上下載最新的redis,筆者下載了壓縮版的,下載解壓後便可使用。 下載連結:https://github.com/MicrosoftArchive/redis/releases   解壓後的目錄檔案   雙擊r

Oracle資料庫group by按自定規則分組

在資料庫分組查詢group by 中,預設的方式有按某一個欄位的均分查詢(如按班級編號分組,每一個班分組,每兩個班分組。。。) 在這裡寫出一種按照自定義規則分組的方式: 以下語句,按自定義的格式將大於等於18個班級的學生分為4類,統計每個類別的學生數量。當然,同類未必要班

NoSQL 資料庫 Redis 學習總結

1、NoSQL介紹   為了解決高併發、高可用、高可擴充套件,大資料儲存等一系列問題而產生的資料庫解決方案。NoSql,叫非關係型資料庫,它的全名Not only sql。它不能替代關係型資料庫,只能作為關係型資料庫的一個良好補充。2、NoSQL分類a>  鍵值(Key

JAVA訪問資料庫連線資料庫

開發一個訪問資料庫的應用程式,首先要載入資料庫的驅動程式,只需要在第一次訪問資料庫時載入一次,然後每次執行時建立一個Connection例項,緊接著執行操作資料庫的SQL語句,並處理返回的結果集,最後在完成完成此次操作時銷燬前面建立的Connection,釋放與

Redis】(sorted set) 有序集合資料型別的使用,應用問題

Redis 有序集合(sorted set)資料型別的使用,應用和問題 Overview Redis 有序集合(sorted set)資料型別的使用,應用和問題 redis-cli 操作資料庫 - n/a Python 操作 Redis

修改mybatis-generator中資料庫型別Java型別的對映關係

離你越近的地方,路途越遠;最簡單的音調,需要最艱苦的練習。——《泰戈爾詩選》 1、修改型別對映關係 在專案中,為了降低資料的儲存空間,status狀態欄位一般使用tinyint, 1個tinyint型資料只佔用一個位元組,一個int型資料佔用四個位

python操作資料庫讀取資料庫資料方法

自動化測試經常會往資料庫裡寫資料,然後從資料庫裡讀取資料。 下面講下從資料庫裡讀取資料的方法。 前提:已安裝mysql.connector模組 已建立的資料庫為(在test資料庫的tet表下): 一、            使用fetchone()獲取結果集的下

C#增刪改查操作Access資料庫二(資料庫的增加)

功能:新增四個TextBox控制元件,在這四個控制元件中分別輸入要新增的ID,學號,姓名,年齡,性別資訊,單擊Insert按鈕將資料新增到Access資料庫中並通過datagridview顯示新增後的資料庫。此外,設定了學號為主鍵,在新增資料到資料庫前要判斷一下是否已存在這

小猿圈資料庫Oracle資料庫效能優化

資料庫有好多種,分為關係型資料庫和非關係型資料庫,小猿圈加加這篇文章對oracle資料庫效能優化有個小技巧分享給大家,看到這篇文章

應用負載均衡LVS(一)基本概念三種模式

保存 訪問 方式 video big key vhdl cisc vid 網站架構中,負載均衡技術是實現網站架構伸縮性的主要手段之一。所謂"伸縮性",是指可以不斷向集群中添加新的服務器來提升性能、緩解不斷增加的並發用戶訪問壓力。通俗地講,就是一頭牛拉不動時,就用兩頭、三