Redis作为一个典型的非关系型数据库,目前来说在企业级应用中使用广泛。

1、Memcached和Redis相比的劣势

业界常用MySQL+Memcached这样的存储架构,但是随着访问量的不断攀蛇,随之而来的问题也有很多。

1、MySQL需要不停的拆库拆表,Memcached也需要跟着不断扩容;

2、Memcached与MySQL之间存在着一定的数据不一致的现象;

3、如果Memcached容易命中率变低,直接穿透到MySQL,导致数据库无法支撑;

2、Redis的特点

说起Redis,很多开发者都只知道它和Memcached一样是非关系型数据库,可以直接存储K-V形式的数据,但是相比起Memcached来说,他也有很多不同的地方。

1、Redis不仅仅只支持简单的K-V形式的数据存储,还支持list、set、hash、zset等等集合类数据的存储;

2、Redis支持实时的数据备份,及时宕机,也可以把数据恢复过来;

3、Redis支持数据的持久化,可以存放在内存memory中的数据直接保存在磁盘上;

3、Redis常用的数据类型

String、Hash、Set、List、SortedSet、pub/sub、Transactions。

1、String:Strings就是一个最最简单的Key-Value形式存储的变量。其中Value既可以是数字也可以是字符串。其实现方式是在Redis内部默认存储一个字符串,被redisObject引用,当检测到数字操作如自增自减incr、decr等等命令时,自动转化为数字进行计算,计算完毕后再转化为String存储起来。

2、Hash:Hash存储是键值对的value。即Key-Hash,而Hash又是一个k-v的结构,如果使用的Memcached,则需要把整个Hash打包存储在内存中,如果需要查询其中某个值,还要全部取出整个Hash,再查找对应值。而Redis可以直接通过命令获取到Value,大大提高了性能。 其实现原理:当成员较少时,Redis为了节约内存会采用类似一维数组的紧凑存储,而当对象较多时,则直接转为HashMap存储。

3、Set:Set是一个无序的天然去重的集合,即Key-Set。此外还提供了交集、并集等一系列直接操作集合的方法,对于求共同好友、共同关注什么的功能实现特别方便。其底层是靠HashMap实现的,其中value为null;

4、List:List是一个有序可重复的集合,其遵循FIFO的原则,底层是依赖双向链表实现的,因此支持正向、反向双重查找。通过List,我们可以很方面的获得类似于最新回复这类的功能实现。

5、SortedSet:类似于java中的TreeSet,是Set的可排序版。此外还支持优先级排序,维护了一个score的参数来实现。其底层主要依赖HashMap来实现的,通过维持插入的数值和Score优先级的映射来进行排序。

6、pub/sub:发布订阅,类似于消息队列mq。可以选择对某个Key进行订阅,一旦这个key发布了一些消息,则所有订阅了这个Key的对象就可以收到这个消息。主要可以用在实时消息系统上,例如聊天之类的。

7、Transactions:NoSQL不支持事务,但是通过提供了打包执行的功能,即这个包里面的所有命令必须要一起执行,此外还可以锁定某个Key,在打包执行命令时如果检测到这个Key发生了变化,则直接回滚。

4、Redis的常用应用场景

redis使用内存提供存储,通过持久化功能保存数据。且针对request是单线程操作。这一系列特点使得redis具有十分神奇的功能。

1、查找最新的回复。

如果在传统的关系型数据库,这就需要使用select * from table where name="" order by time desc limit 100;这十分消耗数据库性能,但是通过Redis,就可以直接在Redis里面通过Id创建一个List,指定长度1w,当需要查找时,直接输出该list的后100条记录。

2、排行问题

常见的排行问题,例如最热话题、游戏排名等等,这些都可以通过Redis来轻松实现,直接使用ZRank即可得到。

3、删除过期数据

Redis不是真正意义上的可持久化数据库,可以给数据加上一个有效时间,在有效时间超过时,Redis会自动删除对应数据。

转载于:https://juejin.im/post/5ca2b5ece51d456eb75146c6

Redis的应用场景及优缺点相关推荐

  1. 大容量类 Redis 存储的场景补充-pika

    2019独角兽企业重金招聘Python工程师标准>>> 导读 我们在<大容量类 Redis 存储 - 有关 pika 的一切>里介绍过pika的诞生.pika的特点.pi ...

  2. python使用redis在实际场景使用_用python操作redis及redis的一些应用场景

    redis安装 网上很多windows.Linux的安装教程,可根据自己的需要寻找对应教程安装 redis-py安装 pip install redis redis可视化工具 API的使用 redis ...

  3. Redis 的应用场景

    之前讲过Redis的介绍,及使用Redis带来的优势,这章整理了一下Redis的应用场景,也是非常重要的,学不学得好,能正常落地是关键. 下面一一来分析下Redis的应用场景都有哪些. 1.缓存 缓存 ...

  4. redis的使用场景和基本数据类型

    一:redis使用的场景 redis是一个高性能的NoSQL数据库,特点是高性能,持久存储,适应高并发的应用场景. 下面看看它的使用场景 1.取最新N个数据的操作 比如取网站的最新文章,通过下面方式, ...

  5. 什么是Redis?简述它的优缺点?

    Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存. 因为是纯内存操作,Re ...

  6. Redis的应用场景汇总

    Redis应用场景 Redis作为一个非关系型数据库,除了在访问速度上拥有显著优势外,其本身支持的多种数据类型也非常有用,能覆盖系统开发中的很多应用场景.下面列举的场景有的是从网上其他人的博客里看到的 ...

  7. 华为云PB级数据库GaussDB(for Redis)揭秘第五期:高斯 Redis 在IM场景中的应用

    摘要:揭秘高斯 Redis 在IM场景中的应用. 本文分享自华为云社区<华为云PB级数据库GaussDB(for Redis)揭秘第五期:高斯 Redis 在IM场景中的应用>,原文作者: ...

  8. etc的常见算法_几个常用算法的适应场景及其优缺点(非常好)

    本文主要回顾下几个常用算法的适应场景及其优缺点! 机器学习算法太多了,分类.回归.聚类.推荐.图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验. ...

  9. 基于Redis解决业务场景中延迟队列的应用实践

    文章目录 一.业务概述 二.代码实现 2.1.工单队列实现 2.1.1.定义上下文类(`WorkOrderContext`) 2.1.2.定义抽象缓存类(`AbstractCacheManager`) ...

最新文章

  1. 2022-2028年中国水基胶行业市场深度评估及前瞻研究报告
  2. ulimit -SHn 65535 含义
  3. DRO:SFM任务中的深度循环优化器(阿里巴巴AI Lab)
  4. python图像插值
  5. vue elementUI表单输入时触发事件@input
  6. boost::math::students_t用法的测试程序
  7. 【LeetCode】191. Number of 1 Bits
  8. java 判断域密码到期提醒,Exchange Server 2010下,检测用户密码到期通知提醒脚本...
  9. windows2003 iis 配置 php
  10. zabbix mysql pgsql_Zabbix 5.0 监控 PostgreSQL 数据库
  11. Machine Learning Mastery 博客文章翻译:深度学习与 Keras
  12. spring在java工程中的运用
  13. java 联合_如何在java中进行联合,相交,区分和反向数据
  14. html中怎样滚动图片,CSS如何实现滚动的图片栏(代码实例)
  15. 应用统计学学什么科目_统计学考研初试都要考哪些科目?
  16. win10好用的小软件(小插件)
  17. CF106C Buns动态规划解决多重背包
  18. 微信支付和分享到朋友圈-struts版本
  19. 自动化做任务、收能量工具Hamibot,我愿称它为神器
  20. [PCIe]PCIe设备在一个系统中是如何发现与访问的

热门文章

  1. 如何利用框选工具获取多边形范围?
  2. keystone v2 to v3
  3. redis3.0.2 编译安装 (启动服务方式启动)
  4. java第二阶段学习day5
  5. 【转】C++面试题(四)——智能指针的原理和实现
  6. Gerrit 代码审核服务器的工作流和原理
  7. 使用P3P共享Cookie与Session小结
  8. window powershell 获取前后日期,格式化日期
  9. linux普通用户home目录锁定
  10. 问题-Delphi2007编译时提示内存错误“sxs.dll. No Debug Info.ACCESS 0xXXXXX