导航

  • 什么是Redis?
  • Redis特点
  • Redis应用场景
  • Redis能解决哪些需求
  • Redis的缺点

什么是Redis?

Redis:全称"Remote Dictionary Server ",即远程字典服务。是一个使用C语言编写的开源、支持网络、基于内存、可选持久性的键值对(key-value)存储数据库,根据月度排行网站DB-Engines.com的数据,Redis是最流行的键值对存储数据库。

Redis是一个NoSQL数据库。

Redis服务的默认端口为:6379

Redis特点

1.读写极佳
当数据依赖不再需要,Redis这种基于内存的性质,与在执行一个事务时将每个变化都写入硬盘的数据库系统相比就显得执行效率非常高。写与读操作速度没有明显差别。因Redis是将数据加载到内存的原因,其在读写方面性能极佳,Redis能读的速度是110000次/s,写的速度是81000次/s 。

2.支持数据持久化
都知道,数据在内存中是缺乏持久性的,服务器一旦断电或者宕机,在内存中的数据就会丢失。而Redis支持数据持久化,可以将内存中的数据保存在磁盘中,在服务器宕机或者重启时,可以重新读取使用。

3.支持多种数据结构
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

4.支持数据备份
Redis支持数据的备份,即master-slave模式的数据备份。

5.具有原子性
Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性。

6.架构灵活
Redis现有多种架构,用于不同的业务场合。业务较少的情况下大多使用主从即可满足需求,对于业务繁重的环境,大多使用集群架构,一定程度上弥补了因内存原因导致处理数据量有限的情况。

7.功能丰富
Redis还支持 publish/subscribe(发布/订阅), 通知, key 过期等等特性。

8.单线程
Redis采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。

Redis应用场景

1.热点数据缓存
热点数据(经常会被查询,但是不经常被修改或者删除的数据),由于redis访问速度块、支持的数据类型比较丰富,首选是使用redis缓存。

2.计数器
用来对商品购买,视频播放,文章阅读等数据计数,为保证数据的实时性,每次浏览访问,相应的数量都要+1,有些时候并发量非常高,这对服务器来说无疑是一种挑战。Redis读写性能极佳,非常适合这种计数场合。

3.消息队列
一些访问,点击量高的网站中必备中间件,主要用于流量削峰,异步处理实时性低的业务。(和专门的中间件效果要差些)

其他的一些功能还有聊天室好友列表,各种排行榜,秒杀,抢购,数据过期处理等等。

Redis能解决哪些需求

需求引用自什么是Redis?什么是nosql?NoSQL数据库的四大分类

1、High performance - 对数据库高并发读写的需求

web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求。

2、Huge Storage - 对海量数据的高效率存储和访问的需求

类似Facebook,twitter,Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。

3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求

在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

Redis的缺点

1.受限于硬件
Redis数据的容量受限于物理内存,这就导致单个Redis无法用于较大数据量的操作和运算上。

解决:可通过主从或集群实现

2.无法发挥多核CPU
因Redis采用单线程运行,在调用CPU时,也只会采用单核,因此无法发挥多核CPU的性能。

解决:可以通过单机多台Redis实现

3.缓存雪崩
大量key同一时间点失效,同时又有大量请求打进来,导致流量直接打在DB上,造成DB不可用。

解决:使用多级缓存,或为热点数据设置永不失效

4.缓存穿透
用户大量并发请求的数据(key)对应的数据在redis和数据库中都不存在,导致尽管数据不存在但还是每次都会进行查DB。

解决:也为空数据缓存或者使用过滤器。

Redis是什么?有什么用?相关推荐

  1. Spring AOP + Redis解决重复提交的问题

    Spring AOP + Redis解决重复提交的问题 用户在点击操作的时候,可能会连续点击多次,虽然前端可以通过设置按钮的disable的属性来控制按钮不可连续点击,但是如果别人拿到请求进行模拟,依 ...

  2. Redis问题——Error: 磁盘在使用中,或被另一个进程锁定。

    Redis出于对数据保护,默认只能本地客户端连接.远程连接就会出现以上错误.如何解决这一问题,看下: server -A,PC-A, 修改server-A的redis.conf:注释掉本地绑定: bi ...

  3. 实现 连续15签到记录_MySQL和Redis实现用户签到,你喜欢怎么实现?

    现在的网站和app开发中,签到是一个很常见的功能 如微博签到送积分,签到排行榜 微博签到 如移动app ,签到送流量等活动, 移动app签到 用户签到是提高用户粘性的有效手段,用的好能事半功倍! 下面 ...

  4. Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)

    Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...

  5. Redis 笔记(15)— 管道 pipeline(客户端将批量命令打包发送用来节省网络开销)

    Redis 是一种基于客户端-服务端模型以及请求/响应协议的 TCP 服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听 Socket 返回,通常是以阻塞模式,等 ...

  6. Redis 笔记(14)— 持久化及数据恢复(数据持久方式 RDB 和 AOF、数据恢复、混合持久化)

    1. 持久化 所谓持久化是指将数据从内存中以某种形式同步到硬盘中,在 Redis 重启后能够根据硬盘中的记录恢复数据.Redis 持久化有两种方式,分别为 RDB(redis data base) [ ...

  7. Redis 笔记(13)— scan 和 keys 寻找特定前缀key 字段(命令格式、使用示例、定位大key)

    1. keys Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key. 127.0.0.1:6379> keys * (empty array) 127. ...

  8. Redis 笔记(12)— 单线程架构(非阻塞 IO、多路复用)和多个异步线程

    Redis 使用了单线程架构.非阻塞 I/O .多路复用模型来实现高性能的内存数据库服务.Redis 是单线程的.那么为什么说是单线程呢? Redis 在 Reactor 模型内开发了事件处理器,这个 ...

  9. Redis 笔记(11)— 文本协议 RESP(单行、多行字符串、整数、错误、数组、空值、空串格式、telnet 登录 redis)

    RESP 是 Redis 序列化协议Redis Serialization Protocol 的简写.它是一种直观的文本协议,优势在于实现异常简单,解析性能极好. ​ Redis 协议将传输的结构数据 ...

  10. Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)

    1. 发布-订阅概念 发布-订阅 模式包含两种角色,分别为发布者和订阅者. 订阅者可以订阅一个或者若干个频道(channel): 而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都可以收到此消 ...

最新文章

  1. css超过两行显示为..._这6种组织CSS的方式,可以帮助你解决CSS扩展维护难的问题...
  2. R语言使用GGally包的ggpairs函数可视化变量相关性分析图:包含散点图、密度图、柱状图、箱图等、并自定义数据点的大小
  3. bzoj4025-二分图【线段树分治,并查集】
  4. 在Java中获取素数的无限列表
  5. android p 第三方预装,android P 隐藏API对系统APP的影响
  6. Ethercat解析(十四)之初始化流程
  7. 单链表的合并算法_图解算法:单链表两两反转 | 眼睛会了手就会系列
  8. POJ 1002 电话号码字符串处理
  9. 拓端tecdat|R语言优化交易系统:用平行坐标图可视化系统参数优化结果
  10. 【老孙随笔】想学程序设计,先学人生设计!
  11. DSP28335 CAN模块详解
  12. 数字通信系统的组成框图
  13. 苹果手机怎么投屏王者荣耀
  14. 金山毒霸2002界面
  15. 前端性能优化方案(图片)
  16. [OpenCV实战]1 基于深度学习识别人脸性别和年龄
  17. 基于SARIMA、XGBoost和CNN-LSTM的时间序列预测对比
  18. 浅谈 ext2 文件系统的特点、优缺点以及使用场景
  19. 潘多拉STM32L475 1.初探
  20. 国内外学者联合撰写,ChatGPT技术路线图

热门文章

  1. 务实的思维与学习–如何有意识地思考思维与学习
  2. Android9怎样安装xposed,EdXposed 在android 9 上的安装和使用
  3. libusb函数说明
  4. MYSQL ‘S APPLY
  5. C语言——for循环
  6. 如何实现H5可视化编辑器的实时预览和真机扫码预览功能
  7. 数据结构第四篇——(一般)线性表(基于C语言)
  8. Java中byte与short、int、long互转(包含大端,小端)
  9. 多项式曲线拟合之最小二乘法推导
  10. 查看linux版本是多少位