zoukankan      html  css  js  c++  java
  • Redis的应用场景和优缺点

          Redis作为一个典型的非关系型数据库,目前来说在企业级应用中使用广泛。它十分适合存储存储量小、访问量巨大的场景,所有数据全部in-memory保证了数据的高速访问。作为和他一个类型的noSQL,它和memcached又有什么区别和优点呢?

    一、Memcached和Redis相比的劣势

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

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

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

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

    二、Redis的特点

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

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

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

    三、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发生了变化,则直接回滚。
     

    四、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会自动删除对应数据。

  • 相关阅读:
    运行自动安装apk代码,报错: Original error: Could not find aapt Please set the ANDROID_HOME environment variable with the Android SDK root directory path.
    已安装Appium-Python-Client,但appium无法导入WebDriver
    打开uiautomatorviewer.bat闪退
    常见的python面试题【杭州多测师】【python笔试题】
    支付功能怎么测试?
    自动化运维工具——ansible详解
    服务端编程——异常+校验器+环境变量
    服务端编程——初始koa
    用postman发送请求,在koa中获取的请求body为undefined
    jQuery入口函数测试
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602197.html
Copyright © 2011-2022 走看看