redis是一種高階的鍵值對key-value
的儲存系統,其中值value
支援五種資料型別:
redis資料型別
字串型別是redis中最為基礎的資料儲存型別,在redis中二進位制是安全的,也就是說,redis中的字串可以接受任何格式的資料,如jpeg影象資料、json物件描述資訊等。
redis中字串型別的值最大可容納512mb的資料長度,從內部實現來看其實string可看做byte陣列,最大上限是1g位元組。若僅僅使用string型別,redis可視為加上持久化的memcached。
redis原理
struct sdshdr
另外,string型別可被部分命令按int
處理,比如incr
等命令,若只用string型別,redis就可被看做加上持久化特性的memcached。當然redis對string型別的操作比memcached要多的多。
string資料結構是簡單的kv型別,value
不僅可以是string
,也可以是數字。使用string
型別,可完全實現目前memcache
功能,並且效率更高,可享受redis的定時持久化,可選擇rdb模式或aof模式。
string字串型別的操作
$ redis-cli
# 設定key對應的string型別的value
> set name junchow
# key值追加字串
"junchow520"
# 擷取key值,從起始下標到終止下標
> substr name 0 6
"junchow"
# 批量設定多個key值
> mset name junchow age 30 gender male
ok
# 批量獲取多個key值
> mget name age gender
# 為key值自增並返回新值
> incr age
31
# 為key值自減並返回新值
> decr age
30
# key值增加指定量
> incrby age 10
40
# key值減少指定量
> decrby age 5
35
$ get name
"junchow"
$ setnx name zhoujun
(integer) 0
$ get name
"junchow"
lists of binary-safe stringslist型別實質上是乙個雙向鍊錶,通過push、pop操作從鍊錶的左側頭部或右側尾部新增或刪除元素,因此list即可用作棧也可用作佇列。
應用場景: 獲取最新10個登入使用者資訊
-- 使用sql語句實現
select * from user order by logintime desc limit 10
在資料量大時使用sql語句查詢時資料庫所有資料都要受到影響,對資料庫的負載比較高。必要情況下給關鍵字段設定索引,索引也比較耗費系統資源。
若通過redis的list鍊錶實現,可在list鍊錶中僅保留最新的10個資料,每次進入乙個新資料就刪除乙個舊元素,就可以從鍊錶中直接獲得需要的資料,極大節省各方面資源消耗。
鍊錶操作
list 鍊錶型別操作
$ redis-cli
# 在key對應list的左側頭部新增元素
> lpush loginuser alice
> lpush loginuser ben
> lpush loginuser carl
> lpush loginuser dan
# 獲取list長度,key不存在則返回0,若key對應型別不是list則返回錯誤
> llen loginuser
# 返回指定區間內的元素,下標從0開始
> lrange loginuser 0 -1
# 擷取list保留指定區間內的元素
> ltrim loginuser 0 -1
# 從list頭部刪除元素並返回刪除的元素
> lpop loginuser
# 從list右側尾部刪除元素並返回刪除元素
> rpop loginuser
# 在key對應的list的尾部新增
> rpush loginuser elva
> rpush loginuser fifi
> 對於list雙向鍊錶的結構,若上進上出(先進後出)就是棧,若上進下出(先進先出)就是佇列。所以list即可作為棧又可作為佇列。
Redis資料結構
字典 dict 是redis裡最核心的資料結構,正如其全稱remote dictionary service所說,redis其實就是乙個字典服務,字典以key value的形式呈現給使用者,key是簡單的字串,而value可以是各種資料結構,比如字串 string 鍊錶 list 集合 set 排序...
Redis 資料結構
最近接觸到了redis的使用,借這個機會深入的了解一下redis的實現和設計原理。下面先介紹一下redis底層所用到的資料結構。redis的實現幾乎都是基於下面的幾個資料結構之上的。struct sdshdr struct listnode struct list struct dictentry ...
redis 資料結構
今天學習了redis的列表型別 lpush ltrim lrange lpush mylist content ltrim 0,99 lrange 0,1 lrange 兩個引數 分別代表第乙個元素和最後乙個元素 redis的列表型別,可以用來做訊息佇列 使用乙個程序 用lpush命名作為生產者 使...