Redis学习(二)Redis常用数据类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwl2014100338/article/details/82807459

常用数据类型

字符串

特点

(一) 键都是字符串类型
(二) 字符串类型的 值最大不能超过512MB

命令

(一)批量设置值

mset key value [key value ... ]   时间复杂度:O(k),k是键的个数

(二)批量获取值

mget key [key ... ]   时间复杂度:O(k),k是键的个数

(三)计数

incr key
内部编码

int:8个字节的长整型
embstr:小于等于39个字节的字符串
raw:大于39个字节的字符串

Redis会根据当前值的类型和长度决定使用哪种内部编码实现

典型使用场景
(一)缓存功能

Redis作为缓存层,MySQL作为存储层,大部分请求的数据都是从Redis中获取。

(二)计数

Redis可以实现快速计数、查询缓存的功能,例如视频播放次数计数

(三)共享Session

使用Redis将用户的Session进行集中管理

哈希

在Redis中,哈希类型是指键值本身又是一种键值对结构

内部编码

(一)ziplist(压缩列表):ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀
(二)hashtable(哈希表):hashtable的读写时间复杂度为O(1)

使用场景

三种方法缓存用户信息
1)原生字符串类型:每个属性一个键

set user:1:name tom
set user:1:age 23
set user:1:city beijing

优点:简单直观
缺点:占用过多的键,内存占用量大,此种方案一般不会在生产环境使用
2)序列化字符串类型:将用户信息序列化后用一个键存储

set user:1 serialize(userInfo)

优点:简化编程
缺点:序列化和反序列化有一定开销,,每次更新属性都需要反序列化取出数据,更新之后再序列化到Redis
3)哈希类型:每个用户属性使用一对filed-value,但是只用一个键保存

hmset user:1 name tom age .....

优点:简单直观
缺点:要控制好哈希在ziplist和hashtable两种内部编码的转换,hashtable会消耗更多内存

列表

(一)在Redis中,可以对列表两端插入和弹出,可以充当栈和队列的角色
(二)列表中的元素是有序的
(三)列表中的元素可以是重复的

命令

(一)从右边插入元素

rpush key value [value ...]

(二)从左边插入元素

lpush key value [value ...]

(三)从列表左侧弹出元素

lpop key

(四)从列表右侧弹出

rpop key
内部编码

ziplist(压缩列表)
linkedlist(链表)
Redis 3.2版本之后提供了quicklist内部编码,结合了ziplist和linkedlist两者的优势

使用场景

(一)消息队列
Redis的lpush+brpop命令组合实现阻塞队列
(二)文章列表

集合

特点

(一)集合中不允许有重复元素
(二)集合中的元素无序

内部编码

(一)intset:整数集合
(二)hashtable

使用场景

(一)标签

给用户添加标签
sadd user:1:tags tag1 tag2 tag5

有序集合

特点

(一)没有重复元素
(二)元素可排序

内部编码

(一)ziplist(压缩列表)
(二)skiplist(跳跃表)

使用场景

(一)排行榜系统

猜你喜欢

转载自blog.csdn.net/lwl2014100338/article/details/82807459
今日推荐