关于Redis

本片主要借鉴于《Redis的开发与运维》

1、什么是Redis

        Redis是一种基于键值对(Key-Value)的非结构数据库。它与其他键值对数据库的区别在于,Redis中的值可以是由String, Hash, listm set, zset, Bitmaps, HypeLoglog, GEO 等多种数据结构和算法组成。

        每种数据结构和算法,都有相应的应用场景,所以Redis可以在多种生活场景中使用,或者说,Redis可以满足多种生活场景。而且因为Redis会将所有数据都存放在内存中,所以它的读写性能非常惊人。同时,Redis还可以将内存的数据利用快照和日志的形式保存到硬盘上,实现数据的持久化,这样的话,如果发生了类似断电或者机器故障的时候,内存中的数据就不会“丢失”了。除此之外,Redis还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能。

2、Redis特性

        2.1、速度快

          正常情况下,Redis执行命令的速度非常快,官方给出的数据是读写性能可以达到10万/秒,当然这也取决于机器的性能。在不考虑性能的情况下,Redis速度快的原因可以大致归纳为以下几点:

  • Redis中的所有数据是存放在内存中的,具体为什么说数据放在内存中速度就快,可以浏览下表。
各层级硬件执行速度

层级

速度层级含义
L1 cache reference0.5ns读取CPU的一级缓存
Branch mispredict5ns转移、分支预测
L2 cache reference7ns读取CPU的二级缓存
Mutex lock/unlock25ns互斥锁\解锁
Main memory reference100ns读取内存数据
Compress 1K bytes with Zippy3000ns1k字节压缩
Send 2K bytes over 1 Gbps network20000ns在1Gbps的网络上发送2k字节
Read 1 MB sequentially from memory250000ns从内存顺序读取1MB
Round trip within same datacenter500000ns从一个数据中心往返一次
Disk seek10000000ns磁盘搜索
Read 1 MB sequentially from network10000000ns从网络上顺序读取1兆的数据
Read 1 MB sequentially from disk20000000ns从磁盘里面读出1MB
Send packet CA->Netherlands->CA 150000000ns一个包的一次远程访问
  • Redis是用C语言实现得,一般来说C语言实现的程序“距离”操作系统更近,所以速度相对较快。
  • Redis使用了单线程架构,预防了多线程可能产生的竞争问题。

      2.2、基于键值对的数据结构服务器

        几乎所有的编程语言都提供了类似字典的功能,如Python中dict,Java中map等这种组织数据的方式就叫做基于键值的方式。然而与很多键值对数据库不同的是,Redis中的值不单单可以是String,还可以是具体的数据结构,它提供了字符串、哈希、列表、集合、有序集合,同时在字符串的基础上有演变出位图、HyperLoglog这两种数据结构,并且随着基于定位服务的产生,Redis3.2中有加入了GEO的功能,这使得Redis可以应用于多种应用场景,同时也能够因此提高开发效率。

相关命令与数据结构介绍可前往网站Redis 的使用

      2.3、丰富的功能

        除了数据结构,Redis还提供了许多额外的功能:

  • 键过期的功能,可以用来实现缓存。
  • 发布订阅的功能,可以用来实现消息系统。
  • 支持Lua脚本功能,可以利用Lua创造出新的Redis命令。
  • 提供了简单的事物功能,能在一定程度上保证事物的特性。
  • 提供了流水线功能,这样客户能将一批命令一次性传到Redis,减少了网络开销。

      2.4、简单稳定

        Redis的简单功能主要表现在三个方面:

  • 首先,是Redis的源码很少,早期版本只有2w, 3.0版本后由于添加了集群功能,代码增至5w行左右,普通的开发和运维人员完全可以“吃透”它。
  • 其次,Redis使用单线程模型,这样不仅能使得Redis服务端处理模型变得简单,也能使得客户端开发变得简单。
  • 最后,Redis不需要依赖于操作系统中的类库(例如Memcache需要依赖libevent这样的系统类库),Redis自己实现了事件处理的相关功能。

      2.5、客户端语言多

        Redis提供了几乎涵盖了主流的编程语言,如Java、PHP、Python、C、C++、Nodejs等。

     2.6、持久化

        Redis提供了两种持久化方式:RDB,AOF。具体持久化流程详情:

        redis的持久化策略:RDB, AOF

      2.7、主从复制

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

      2.8、高可用和分布式

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值