zoukankan      html  css  js  c++  java
  • Redis是什么?

    1.Redis简介
    Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,如 字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具有半径查询和流的地理空间索引。Redis具有内置复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区。
    您可以 对这些类型运行原子操作,例如附加到字符串 ; 递增哈希值 ; 将元素推送到列表中 ; 计算集合交集, 并集和差异 ; 或者在排序集中获得排名最高的成员。
    为了实现其出色的性能,Redis使用 内存数据集。根据您的使用情况,您可以通过 每隔一段时间将数据集转储到磁盘或通过将每个命令附加到日志来保留它。如果您只需要功能丰富的网络内存缓存,则可以选择禁用持久性。
    Redis还支持简单到设置的主从异步复制,具有非常快速的非阻塞第一次同步,自动重新连接以及在网络分割上的部分重新同步。
    其他功能包括:
      交易
      发布/订阅
      Lua脚本
      钥匙的生存时间有限
      LRU逐出钥匙
      自动故障转移
      您可以使用大多数编程语言中的 Redis 。
    Redis是用ANSI C编写的,适用于大多数POSIX系统,如Linux,* BSD,OS X,没有外部依赖性。Linux和OS X是Redis开发和测试的两个操作系统,我们建议使用Linux进行部署。Redis可能在Solaris衍生系统(如SmartOS)中工作,但支持是最好的努力。Windows版本没有官方支持,但Microsoft开发并维护了Redis的Win-64端口。

    2.Redis特性
    Redis之所以受到如此多公司的青睐, 必然有之过人之处, 下面是关于Redis的8个重要特性。
    1.速度快
    正常情况下, Redis执行命令的速度非常快, 官方给出的数字是读写性能可以达到10万/秒, 当然这也取决于机器的性能, 但这里先不讨论机器性能上的差异, 只分析一下是什么造就了Redis除此之快的速度, 可以大致归纳为以下四点:
      ·Redis的所有数据都是存放在内存中的,把数据放在内存中是Redis速度快的最主要原因。
      ·Redis是用C语言实现的, 一般来说C语言实现的程序“距离”操作系统更近, 执行速度相对会更快。
      ·Redis使用了单线程架构, 预防了多线程可能产生的竞争问题。
    ·作者对于Redis源代码可以说是精打细磨, 曾经有人评价Redis是少有的集性能和优雅于一身的开源代码。

    2.基于键值对的数据结构服务器
      几乎所有的编程语言都提供了类似字典的功能, 例如Java里的map、Python里的dict, 类似于这种组织数据的方式叫作基于键值的方式, 与很多键值对数据库不同的是, Redis中的值不仅可以是字符串, 而且还可以是具体的数据结构, 这样不仅能便于在许多应用场景的开发, 同时也能够提高开发效率。 Redis的全称是REmote Dictionary Server, 它主要提供了5种数据结构: 字符串、 哈希、 列表、 集合、 有序集合, 同时在字符串的基础之上演变出了位图(Bitmaps) 和HyperLogLog两种神奇的“数据结构”, 并且随着LBS(Location Based Service, 基于位置服务) 的不断发展, Redis3.2版本中加入有关GEO(地理信息定位) 的功能, 总之在这些数据结构的帮助下, 开发者可以开发出各种“有意思”的应用。
    3.丰富的功能
    除了5种数据结构, Redis还提供了许多额外的功能:
      ·提供了键过期功能, 可以用来实现缓存。
      ·提供了发布订阅功能, 可以用来实现消息系统。
      ·支持Lua脚本功能, 可以利用Lua创造出新的Redis命令。
      ·提供了简单的事务功能, 能在一定程度上保证事务特性。
      ·提供了流水线(Pipeline) 功能, 这样客户端能将一批命令一次性传到Redis, 减少了网络的开销。
    4.简单稳定
    Redis的简单主要表现在三个方面。 首先, Redis的源码很少, 早期版本的代码只有2万行左右, 3.0版本以后由于添加了集群特性, 代码增至5万行左右, 相对于很多NoSQL数据库来说代码量相对要少很多, 也就意味着普通的开发和运维人员完全可以“吃透”它。 其次, Redis使用单线程模型, 这样不仅使得Redis服务端处理模型变得简单, 而且也使得客户端开发变得简单。 最后, Redis不需要依赖于操作系统中的类库(例如Memcache需要依赖libevent这样的系统类库) , Redis自己实现了事件处理的相关功能。Redis虽然很简单, 但是不代表它不稳定。 以笔者维护的上千个Redis为例, 没有出现过因为Redis自身bug而宕掉的情况。
    5.客户端语言多
    Redis提供了简单的TCP通信协议, 很多编程语言可以很方便地接入到Redis, 并且由于Redis受到社区和各大公司的广泛认可, 所以支持Redis的客户端语言也非常多, 几乎涵盖了主流的编程语言, 例如Java、 PHP、Python、 C、 C++、 Nodejs等
    6.持久化
    通常看, 将数据放在内存中是不安全的, 一旦发生断电或者机器故障,重要的数据可能就会丢失, 因此Redis提供了两种持久化方式: RDB和AOF, 即可以用两种策略将内存的数据保存到硬盘中(如图1-1所示) , 这样就保证了数据的可持久性。

    7.主从复制
    Redis提供了复制功能, 实现了多个相同数据的Redis副本, 复制功能是分布式Redis的基础。


    8.高可用和分布式
    Redis从2.8版本正式提供了高可用实现Redis Sentinel, 它能够保证Redis节点的故障发现和故障自动转移。 Redis从3.0版本正式提供了分布式实现Redis Cluster, 它是Redis真正的分布式实现, 提供了高可用、 读写和容量的扩展性。

    3.Redis使用场景
    1.缓存
    缓存机制几乎在所有的大型网站都有使用, 合理地使用缓存不仅可以加快数据的访问速度, 而且能够有效地降低后端数据源的压力。 Redis提供了键值过期时间设置, 并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。 可以这么说, 一个合理的缓存设计能够为一个网站的稳定保驾护航。
    2.排行榜系统
    排行榜系统几乎存在于所有的网站, 例如按照热度排名的排行榜, 按照发布时间的排行榜, 按照各种复杂维度计算出的排行榜, Redis提供了列表和有序集合数据结构, 合理地使用这些数据结构可以很方便地构建各种排行榜系统。
    3.计数器应用
    计数器在网站中的作用至关重要, 例如视频网站有播放数、 电商网站有浏览数, 为了保证数据的实时性, 每一次播放和浏览都要做加1的操作, 如果并发量很大对于传统关系型数据的性能是一种挑战。 Redis天然支持计数功能而且计数的性能也非常好, 可以说是计数器系统的重要选择。
    4.社交网络
    赞/踩、 粉丝、 共同好友/喜好、 推送、 下拉刷新等是社交网站的必备功能, 由于社交网站访问量通常比较大, 而且传统的关系型数据不太适合保存这种类型的数据, Redis提供的数据结构可以相对比较容易地实现这些功能。
    5.消息队列系统
    消息队列系统可以说是一个大型网站的必备基础组件, 因为其具有业务解耦、 非实时业务削峰等特性。 Redis提供了发布订阅功能和阻塞队列的功能, 虽然和专业的消息队列比还不够足够强大, 但是对于一般的消息队列功能基本可以满足。

    4.Redis与其他key-value存储有什么不同?
    Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
    Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

     参考书籍:《Redis开发与运维》

  • 相关阅读:
    搭建ip代理池思想
    maven中央仓库
    git 基本操作
    利用阿里云发送信息
    Ubuntu配置java环境
    mysql 配置
    Quartz中的时间配置
    如何在Maven中配置Spring依赖
    Jquery动态添加/删除表格行和列
    改行做窗纱批发了(浙江绍兴柯桥窗纱)
  • 原文地址:https://www.cnblogs.com/brokencolor/p/10505255.html
Copyright © 2011-2022 走看看