原文:一文搞懂Redis
什么是NoSQL
NoSQL = not only sql (不仅仅是SQL)
Redis
redis是什么?
Redis = Remote Dictionary Server,即远程字典服务
开源、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
Redis可周期性将更新的数据写入磁盘或修改操作写入记录文件,并在此基础上实现master-slave(主-从)同步
Redis五大基本类型
1、String(字符串)
最大能存储512M
应用场景
- 缓存 配合其他数据库的存储层。支持高并发特点,可加快读写速度,降低数据库压力
- 计数器 做实时计数器,可快速实现计数和查询功能,结果可转存其他数据库
- 统计多单位的数据, 例:uid:gongming count:0 根据不同的uid更新count数量
- 共享用户session 保证用户session的更新和获取都可快速完成,大大提高效率
2、 List(列表)
存储多个有序的字符串,每个字符看成一个元素
支持插入2^32-1个元素
可从两端进行插入(push)和弹出(pop),支持读取指定范围元素
也可读取下标元素
应用场景
- 消息队列 redis的链表结构,可以实现阻塞队列。使用左进右出的命令来完成队列的设计。
例:数据的生产者可以通过Lpush命令从左边插入数据,多个数据消费者,可以使用BRpop命令阻塞的“抢”列表尾部的数据 - 文章列表或数据分页展示的应用。
例:博客文章列表,可用redis获取有序且按照范围内的元素,可解决文章分页查询功能。
3、Set(集合)
类似list,可以存储多个字符串元素的集合
set不允许重复的元素,没有顺序,不存在元素下标
支持集合内的增删改查,支持多个集合间的交集、并集、差集操作。
应用场景
- 标签:用兴趣标签把他们进行归并
- 共同好友、共同喜好或者引申到二度好友之类的拓展应用
- 统计网站的独立IP,利用set集合当中元素不唯一行,可以快速实时统计访问网站的独立IP
数据结构
set的底层结构相对复杂些,使用intset和hashset
4、 sorted set(有序集合)
是集合类型的一部分,不能重复,但有序集合给每个元素多设置了一个分数
该分数可作为排序的依据
应用场景
- 排行榜:有序集合经典使用场景。 例:视频网站的用户上传排行榜,按照时间、播放量、赞等
- 带权重的队列 例 普通消息的score为1,重要消息的score为2。工作线程可按score的倒序来获取工作任务,让重要的先执行。
5、 Hash(哈希)
hash数据结构是一个键值对(key-value)集合,它是一个string类型的field和value的映射表,redis本身就是一个key-value型数据库,因此hash数据结构特别适合存储关系型对象
应用场景
- 存储关系型数据库中表记录。 一条记录作为一个key-value,把每列属性值对应为field-value存储在哈希表中,通过key值来区分表当中的主键
- 存储用户相关信息。 优化用户信息的获取,不需要重复从数据库当中读取,提高系统性能。
网友评论