String(字符串)
- 簡介:String 是 Redis 最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)類型,它是二進制安全的,可以存儲圖片
- 或者序列化的對象,值最大存儲為 512M
- 簡單使用舉例: set key value、get key等
- 應(yīng)用場景:共享 session、分布式鎖,計數(shù)器、限流。
- 內(nèi)部編碼有 3 種,int(8字節(jié)長整型)/embstr(小于等于 39字節(jié)字符串)/ raw(大于 39個字節(jié)字符串)
C 語言的字符串是 char[]實現(xiàn)的,而 Redis 使用 SDS(simple dynamic
string) 封裝,sds 源碼如下:
struct sdshdr{
unsigned int len; // 標記buf的長度
unsigned int free; // 標記buf中未使用的元素個數(shù)
char buf[]; // 存放元素的數(shù)組
}
Redis 為什么選擇 SDS 結(jié)構(gòu),而 C 語言原生的 char[]不香嗎?
舉例其中一點,SDS 中,O(1)時間復雜度,就可以獲取字符串長度;而 C 字符串,需要遍歷整個字符串,時間復雜度為 O(n)文章來源:http://www.zghlxwxcb.cn/news/detail-848408.html
Hash(哈希)
- 簡介:在 Redis 中,哈希類型是指 v(值)本身又是一個鍵值對(k-v)結(jié)構(gòu)
- 簡單使用舉例:hset key field value、hget key field
- 內(nèi)部編碼:ziplist(壓縮列表) 、hashtable(哈希表)
- 應(yīng)用場景:緩存用戶信息等。
- 注意點:如果開發(fā)使用 hgetall,哈希元素比較多?話,可能導致 Redis 阻塞, 可以使用 hscan。而如果只是獲取部分 field,?議使用 hmget。
List(列表)
- 簡介:列表(list)類型是用來存儲多個有序?字符串,一個列表最多可以存儲
- 2^32-1 個元素。
- 簡單實用舉例: lpush key value [value ...] 、lrange key start end
- 內(nèi)部編碼:ziplist(壓縮列表)、linkedlist(鏈表)
- 應(yīng)用場景: 消息隊列,文章列表,
list 應(yīng)用場景參考以下:文章來源地址http://www.zghlxwxcb.cn/news/detail-848408.html
lpush + lpop = Stack(棧)
lpush + rpop = Queue(隊列)
lpush + ltrim = Capped Collection(有限集合)
lpush + brpop = MQ(消息隊列)
Set(集合)
- 簡介:集合(set)類型也是用來保存多個?字符串元素,但是不允許重復元素
- 簡單使用舉例:sadd key element [element ...]、smembers key
- 內(nèi)部編碼:intset(整數(shù)集合)、hashtable(哈希表)
- 注意點:smembers 和 lrange、hgetall 都屬于比較重的命令,如果元素過多存 在阻塞Redis的可能性,可以使用 sscan 來完成。
- 應(yīng)用場景: 用戶標簽,生成隨機數(shù)抽獎、社交需求。
有序集合(zset)
- 簡介:已排序的字符串集合,同時元素不能重復
- 簡單格式舉例:zadd key score member [score member ...],zrank key member
- 底層內(nèi)部編碼:ziplist(壓縮列表)、skiplist(跳躍表)
- 應(yīng)用場景:排行榜,社交需求(如用戶點贊)。
到了這里,關(guān)于Redis的五種基本數(shù)據(jù)類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!