一、简述
- Redis的前身是一个实现高性能队列功能的数据库。
- Redis的底层使用ANSI C编写的数据库。
- 开源
- 支持网络
- 基于内存
- 可选的持久性
- 键值对存储
二、Redis特性
2.1 运行速度
- 读写性能:10万/次
- 因数据放在了内存
- 底层是C编写的梗接近得层
- 丰富的数据结构,不需要耗费时间去做结构变化而浪费性能
- 使用单线程架构,防止多进程而产生的竞争问题(mysql是多进程的)。
2.2 支持多种数据类型
- 基于key-value键值对的数据结构服务器。支持多种数据结构(而mysql是基于表的)
- 字符串
- 列表
- 集合
- 有序集合
- 哈希
2.3 支持多种功能
- 键过期功能:实现缓存
- 发布订阅功能:实现消息系统
- 支持lua脚本
- 事务功能:保证了事务特性(ACID)
- 流水线功能:客户端可以将一批命令一次性传到Redis服务端,减少了网络的开销和IO次数。
2.4 简单稳定
- Redis 3.0 支持集群特性,代码仅5玩行。
- Redis服务端处理模型简单
- Redis客户端开发简单
- Redis自身实现了事务处理的功能(不依赖于系统的类库)
- 极少因为Redis自身BUG导致Redis宕机
2.5 自持多种客户端
- Redis提供了简单的TCP通信协议,多种编程语言可以方便地接入。
- Java
- PHP
- Python
- C
- C++
- Nodejs
2.6 持久化
Redis提供了不同级别的持久化方式:
- RDB持久化能在指定的时间间隔对数据进行快照存储。
- AOF持久化方式能够记录每次对服务器写的操作并保存到
.Redis结尾的文件
,当服务器重启时Redis会自动从.Redis结尾的文件
文件读取这些操作并使数据库恢复原有的数据。
2.7 高可用和分布式
- Redis sentinel保证节点的故障发现和故障的自动切换
- Redis cluster 提供了高可用、读写和容量的扩展性。
MySQL是关系型数据库,是持久化存储的,查询检索的话,会涉及到磁盘IO操作,为了提高性能,可以使用缓存技术,而memcached就是内存数据库,数据存储在内存中(当然也可以进行持久化存储),可以用作缓存数据库。用户首先去memcached查询数据,如果未查询到(即缓存未命中),才去MySQL中查询数据,查询到的数据会更新到缓存数据库中,提供给下次可能进行的查询。提高了数据查询方面的性能。
Redis和memcached都是缓存数据库,可以大大提升高数据量的web访问速度。但是memcached只是提供了简单的数据结构string,而Redis的value可以是string、list、set、hash、sorted set这些,功能更加强大。
web应用中一般采用MySQL+Redis的方式,web应用每次先访问Redis,如果没有找到数据,才去访问MySQL。
Redis是内存数据库,数据保存在内存中,访问速度快。MySQL是关系型数据库,功能强大,存储在磁盘中,数据访问速度慢。像memcached,MongoDB,Redis等,都属于No sql系列。
作者:HelloWorld丶丶
来源:CSDN
原文:https://blog.csdn.net/called>www/article/details/79379134
版权声明:本文为博主原创文章,转载>请附上博文链接!
三、Redis使用场景
- 缓存
- Redis提供了键值过期时间设置
- 提供了控制最大内存和内存溢出后的淘汰策略。
- 排行榜系统
- 可以实现按照热度排名的排行榜、按照发布时间的排行榜等
- 基于列表和有序集合这两个数据结构
- 计数器应用
- 可以实现视频网站播放数等数据的实时性和数据叠加
- Redis可以应对并发量很大的计数
- Redis天然支持计数功能且性能好
- 社交网络
- 基于丰富的数据结构和大访问量特性来实现赞、粉丝、共同好友这类功能。
- 消息队列系统
- Redis提供了发布订阅和阻塞队列的功能
- 不适合大规模数据存储
- Redis是将数据存储在内存中的,大规模数据存储会导致成本极其高昂
- 不适合存储冷数据