redis支援五種資料結構 string(字串), hash(雜湊),list(列表),set(集合),zset(有序集合)
key-value形式儲存記憶體資料庫,操作redis相當於操作unordered_map, unordered_map內部實現了雜湊表,查詢速度非常快
redis儲存key沒有採用map 紅黑樹平衡二叉搜尋樹形式,olog(n)時間負責度查詢速度很快的,redis對key資料進行儲存或者查詢時候,key需要對每乙個
節點進行字元比較速度會很慢的;使用hash(即unordered_map),就避免跟每乙個節點進行比較的操作
泛型支援string,lis,set,zset,hash 資料結構如下:
#include#include#include#includeusing namespace std;
//string
unordered_mapstrings;
//list
unordered_map> lists;
//set
unordered_map> sets;
//zset
unordered_map> zsets;
//hash
unordered_map < string, unordered_maphases;
redis字串採用非c結構中的字串,是乙個二進位制安全的字串(不會被特殊字元『\0』隔斷);string中包含長度資訊來標識字串長度
如何操作redis呢?
redis採用cs結構模式,採用resp協議進行通訊,客戶通過請求響應來操作redis
client----------->server redis unordered_mapresp請求
client
redis資料儲存規則
string結構及應用
set key val // 設定key的value值
get key //獲取key的value值
incr key //執行原子加一的操作
incrby key increment // 執行原子加乙個整數操作
decr key // 執行原子減一操作
decrby key decrement //執行原子減乙個整數的操作
setnx key value //如果key不存在,等同set命令,當key存在,不進行操作
del key //刪除key val鍵值對
作用 設定單值: set hello world
儲存物件 : set role:100001 ''
分布式鎖: setnx lock 客戶唯一標識 //獲取鎖
操作臨界資源 del lock
list結構及應用
lpush key value //佇列左側入隊乙個或多個元素
lpop key // 從佇列左側彈出乙個元素
rpush key value //從佇列右側入隊乙個或多個元素
rpop key //從佇列的右側彈出乙個元素
lrange key start end //返回佇列從start和end之間的元素
lrem key count value //從存有key的列表中移除前count次出現的值為value的元素
brpop key timeout //它是rpop的阻塞版本,因為這個命令會在給定list無法彈出任何元素的時候阻塞連線
應用棧(先進後出 filo first in last out) lpush+lpop 或者 rpush+rpop
佇列(先進先出) lpush+rpop 或者 rpush+lpop
阻塞佇列(blocking queue) lpush+brpop 或者 rpush+blpop 阻塞在當前的連線上,命令執行上的
lpush role:10002 ''
lrange role:10002 0 9
hash結構與應用
hget key filed //獲取key對應的hash的filed對應的值
hset key filed //設定key對應的hash中的filed對應的值
hmset key filed1 value1 field2 value2 ... filedn valuen //設定多個hash鍵值對
hmget key filed1 filed2...filedn
hincrby key filed increment //給key對應hash中的field對應的值加乙個整數值
hlen key //獲取key對應的hash有多少個鍵值對
hdel key field //刪除key對應的hash的鍵值對,該鍵為field
應用hmset role:10001 name zhangsan age 15
與string 比較,hset對於修改資料中某乙個鍵值對更快速,如果使用string修改需要取出字段資訊,在修改欄位中某一項資料
hash與list進行混合使用
id為key , 商品id為filed ,商品數量 value
新增商品
hset mycart:10001 40001 1
lpush myitem:10001 40001
增加數量
hincrby mycart:10001 40001 1
hincrby mycart:10001 40001 -1 //減少數量1
顯示所有物品數量
hlen mycart:10001
刪除商品:
hdel mycart:10001 40001
lrem myitem:10001 1
獲取所有物品:
lrange myitem:10001 0 -1
hget mycart:10001
set結構和應用
sadd key member [member ...] //新增乙個或多個指定member元素到集合key中
scard key //計算集合元素的個數
smembers key // 集合key中元素
sismember key member //返回成員member是否是儲存集合key的成員
srandmember key [count] //隨機返回key集合的乙個或者多個元素,不刪除這些元素
spop key [count] //從儲存在key的集合中移除並返回乙個或多個隨機元素
sdiff key [key ...] //返回乙個集合與給定集合的差集的元素
sinter key [key ...] //返回指定所有的集合的成員的交集
sunion key [key... ] //返回給定的多個集合中的所有成員
應用:**新增多個使用者 sadd award:1 1001 1002 1003 1004
檢視所有參加**有效使用者 smembers award:1
抽取多個使用者 srandmember award:1 2
**三等獎3名 spop award:1 3 二等獎2名 spop award:1 2
共同關注 sinter follow:a follow:c
可能認識的人 sdiff follow:a follow:c
zset結構及應用
zadd key [nx|xx] [ch] [incr] score member [score member ...] //新增到鍵為key有序集合(sorted set)裡面
zrem key member [member ...] // 從鍵為key有序集合中刪除member的鍵值對
zscore key member //返回有序集key中,成員member的score值
zincrby key increment member //有序集key的成員member的score值加上增量increment
zcard key //返回key的有序集元素個數
zrank key member //返回有序集key中成員member的排名
zrange key start stop [withscores] //返回儲存在有序集合key中的指定範圍的元素
zrevrange key start stop [withscores] //返回有序集key中,指定區間內的成員逆序
應用熱榜:
zincrby hot:1 1 10002
zincrby hot:1 1 10003
zincrby hot:1 1 10004
獲取排行
zrevrange hot:1 0 2 withscores
Redis資料結構總結
set runoobkey redisget runoobkeyredis hash 是乙個string型別的field和value的對映表,hash特別適合用於儲存物件。hmset runoobkey name redis tutorial description redis basic comm...
Redis 基礎資料結構
基礎資料型別 5種 string 字串 hash 雜湊 list 列表 set 集合 zset 有序集合 set key name value 命令用於設定給定key的值,如果key已經儲存其它值,則會覆蓋舊值,且與型別無關 get key name 命令用於獲取指定key的值,如果key不存在,則...
Redis 基礎資料結構
redis有5種基礎資料結構,分別是 string list hash set zset。1 string 字串 字串string是redis最簡單的資料結構,內部表示的就是乙個字元陣列。儲存值 set key value 獲取值 get key redis可以對多個字串進行批量讀寫。批量儲存 ms...