redis是乙個開源的使用ansi c語言編寫、遵守bsd協議、支援網路、可基於記憶體亦可持久化的日誌型、key-value資料庫,並提供多種語言的api。redis 是速度非常快的非關係型(nosql)記憶體鍵值資料庫,可以儲存鍵和五種不同型別的值之間的對映。
鍵的型別只能為字串,值支援五種資料型別:字串(string)、列表(list)、集合(set)、雜湊表(hash)、有序集合(zset)。
redis 支援很多特性,例如將記憶體中的資料持久化到硬碟中,使用複製來擴充套件讀效能,使用分片來擴充套件寫效能。
redis 效能極高,redis能讀的速度是110000次/s,寫的速度是81000次/s
redis 的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過multi和exec指令包起來。
redis資料庫中的每個鍵值對都是由物件組成的,其中:
string
string 型別是 redis 最基本的資料型別,string 型別的值最大能儲存 512mb。乙個鍵最大儲存也是 512mb。
string 型別是二進位制安全的。意思是 redis 的 string 可以包含任何資料不出現錯誤,比如儲存jpg或者序列化的物件。
比如c語言的char陣列就不能儲存任何資料,如果資料中包含\0,則會錯誤地認為字串結束,即不是二進位制安全的。
> set hello world
ok> get hello
"world"
> del hello
(integer) 1
> get hello
(nil)
list
redis list(列表)是簡單的字串列表,按照插入順序排序。你可以新增乙個元素到列表的頭部(左邊)或者尾部(右邊),也可在頭部或尾部刪除乙個元素。
列表最多可儲存 2的32次方 - 1 個元素 (4294967295, 每個列表可儲存40多億)。
127.0.0.1:6379> lpush ooc a
(integer) 1
127.0.0.1:6379> lpush ooc b
(integer) 2
127.0.0.1:6379> rpush ooc c
(integer) 3
127.0.0.1:6379> lrange ooc 0 2
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> lrange ooc 0 -1
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> lindex ooc 2
"c"127.0.0.1:6379> lpop ooc
"b"127.0.0.1:6379> lrange ooc 0 -1
1) "a"
2) "c"
127.0.0.1:6379> rpop ooc
"c"127.0.0.1:6379> lrange ooc 0 -1
1) "a"
set
redis的set是string型別的無序集合。
集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是o(1)。
sadd 命令新增乙個 string 元素到 key 對應的 set 集合中,成功返回1,如果元素已經在集合中返回 0,如果 key 對應的 set 不存在則返回錯誤。
集合中最大的成員數為 232 - 1(4294967295, 每個集合可儲存40多億個成員)。
> sadd set-key item
(integer) 1
> sadd set-key item2
(integer) 1
> sadd set-key item3
(integer) 1
> sadd set-key item
(integer) 0
> smembers set-key
1) "item"
2) "item2"
3) "item3"
> sismember set-key item4
(integer) 0
> sismember set-key item
(integer) 1
> srem set-key item2 # 刪除元素
(integer) 1
> srem set-key item2
(integer) 0
> smembers set-key
1) "item"
2) "item3"
hash
redis hash 是乙個鍵值對(key -> value
)集合。
redis hash 是乙個string型別的 field 和 value 的對映表,hash 特別適合用於儲存物件。
每個 hash 可以儲存 232 -1 鍵值對(40多億)。
> hset hash-key sub-key1 value1
(integer) 1
> hset hash-key sub-key2 value2
(integer) 1
> hset hash-key sub-key1 value1
(integer) 0
> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
> hdel hash-key sub-key2
(integer) 1
> hdel hash-key sub-key2
(integer) 0
> hget hash-key sub-key1
"value1"
> hgetall hash-key
1) "sub-key1"
2) "value1"
zset (sorted set:有序集合)
redis zset 和 set 一樣也是string型別元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯乙個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
zset的成員是唯一的,但分數(score)卻可以重複。
> zadd zset-key 728 member1 # zadd key score member
(integer) 1
> zadd zset-key 982 member0
(integer) 1
> zadd zset-key 982 member0
(integer) 0
> zrange zset-key 0 -1 withscores # 取出 0 到 n ,(按分數第幾個)
1) "member1"
2) "728"
3) "member0"
4) "982"
> zrangebyscore zset-key 0 800 withscores # 取出分數 0 到 800
1) "member1"
2) "728"
> zrem zset-key member1 # 刪除
(integer) 1
> zrem zset-key member1
(integer) 0
> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"
Redis物件 Redis物件系統簡介
最新 redis記憶體 三個重要的緩衝區 最新 redis記憶體 記憶體消耗 記憶體都去哪了?最新 redis持久化 如何選擇合適的持久化方式 最新 redis持久化 aof日誌 之前幾篇文章,簡單介紹 redis用到的所有主要資料結構,簡單動態字串 sds 雙端鍊錶 字典 壓縮列表 整數集合 跳躍...
Redis 物件 雜湊物件
每種型別的變數至少使用了兩種不同的編碼 1 五種物件的底層編碼 字串型別物件 redis encoding int redis encoding embstr redis encoding raw 列表型別的物件 redis encoding ziplist redis encoding linke...
redis中的物件
1 redis中是通過物件來儲存鍵和鍵值,其中物件是由sds 鍊錶 字典 跳躍表 整數合集 壓縮列表 這些基本 型別組成,2 redis 對應基於引用計數的記憶體 機制,當物件的引用計數為零時,物件會比 通過引用計數可以 實現物件共享,物件共享主要是多個資料庫鍵可以共享乙個物件來節約記憶體。3 re...