下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Redis基础知识

作者:课课家教育     来源: http://www.kokojia.com点击数:672发布时间: 2017-09-19 10:00:27

标签: 数据库Redis数据库基础

  redis(RemoteDictionaryServer)是一种Nosql技术,它是一个开源的高级kv存储和数据结构存储系统,它经常被拿来和Memcached相比较,但是Memcached不提供持久化的数据保存机制而redis可以将数据保存在磁盘中,redis不仅仅是能够存储key和value这种简单的键值对,还能存储例如集合、hash表、列表、字典等。

  redis在整个运行过程中,数据统统都是存储在内存中的,因此,性能是相当高的,由于此特性,redis对于内存的要求比较高,它会周期性的将内存中的数据写入在磁盘中,从而实现数据持久化的访问能力,但是这种存储只是保证redis在下次启动还有数据可以读取,而不是提供访问。redis是单线程服务的,只有一个线程。redis还支持主从模式以及支持通过lua脚本去编写扩展,并且支持高可用和分布式集群解决方案。

 redis(RemoteDictionaryServer)是一种Nosql技术,它是一个开源的高级kv存储和数据结构存储系统,它经常被拿来和Memcached相比较,但是Memcached不提供持久化的数据保存机制而redis可以将数据保存在磁盘中,redis不仅仅是能够存储key和value这种简单的键值对,还能存储例如集合、hash表、列表、字典等。    redis在整个运行过程中,数据统统都是存储在内存中的,因此,性能是相当高的,由于此特性,redis对于内存的要求比较高,它会周期性的将内存中的数据写入在磁盘中,从而实现数据持久化的访问能力,但是这种存储只是保证redis在下次启动还有数据可以读取,而不是提供访问。redis是单线程服务的,只有一个线程。redis还支持主从模式以及支持通过lua脚本去编写扩展,并且支持高可用和分布式集群解决方案。

  Redis有三个主要特点,使它优越于其它键值数据存储系统:

  a.Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。

  b.与其它键值数据存储相比,Redis有一组相对丰富的数据类型。

  c.Redis可以将数据复制到任意数量的从机中。

  Redis的优点

  a.异常快:Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。

  b.支持丰富的数据类型:Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。

  c.操作具有原子性-所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。

  d.多实用工具:redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。

  Redis与其他键值存储系统

  a.Redis是键值数据库系统的不同进化路线,它的值可以包含更复杂的数据类型,可在这些数据类型上定义原子操作。

  b.Redis是一个内存数据库,但在磁盘数据库上是持久的,因此它代表了一个不同的权衡,在这种情况下,在不能大于存储器(内存)的数据集的限制下实现非常高的写和读速度。

  c.内存数据库的另一个优点是,它与磁盘上的相同数据结构相比,复杂数据结构在内存中存储表示更容易操作。因此,Redis可以做很少的内部复杂性。

  Redis支持5种数据类型

  字符串

  Redis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达512兆字节的任何内容。

  散列/哈希

  Redis散列/哈希(Hashes)是键值对的集合。Redis散列/哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。

  列表

  Redis列表只是字符串列表,按插入顺序排序。您可以向Redis列表的头部或尾部添加元素。

  集合

  Redis集合是字符串的无序集合。在Redis中,您可以添加,删除和测试成员存在的时间O(1)复杂性。

  可排序集合

  Redis可排序集合类似于Redis集合,是不重复的字符集合。不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复。

  在具体的应用中使用Redis

  redis-cli是我们命令行的客户端,我们在将Redis集成到自己的应用中的时候不可能用redis-cli命令行工具。Redis的官方网站上列出的Redis支持的语言绑定,对于常见的语言我们可以直接使用。我们通过一个简单的聊天程序来看看怎么在项目中使用Redis。

  1、聊天程序分析

  首先我们来想想我们的应用需求,然后抽象成模型,最后对应于相应的数据结构。对于一个聊天程序我们需要什么?

  好友

  能发消息给好友

  能查看聊天记录

  自己的个性设置

  上面这些需求是一个聊天程序的核心。对于好友,其实就是人们间的关系,对于单个用户来说的话就是metomanyusers,也是一种一对多的关系,而且好友具有不重复性和无序性。对应于Redis的数据结构正好是Set。

  而能够发消息给好友是我们聊天交流的基础,细分开来还可以分为可以给在线好友发送消息和可以给离线好友发送消息,这里我们为了简化,我们只考虑给在线好友发送消息的情况。当一个用户上线了,这个用户可以说:Iamready,我可以收消息了,换个说法就是我在监听所有好友发送给我的消息。抽象出来这是一个观察者模式,对应于Redis,我们可以用订阅/发布功能来实现。

  聊天记录其实就是一个有序的列表,这个太直白不过了,自己个性设置,我们可以看做一个用户有许多属性,这里我们用hash来实现。

  好友–>Set

  能发消息给好友->Pub/Sub

  能查看聊天记录->ZSet

  自己的个性设置->Hash

  2、聊天程序的总体架构和技术选择

2、聊天程序的总体架构和技术选择

  小编结语:

  更多内容尽在课课家教育!

赞(26)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程