什么是NoSQL

概述

  • NoSQL:Not Only SQL,意思不仅仅是SQL,它是属于非关系型数据库。那什么是关系型数据库?数据结构是一种有行有列的数据库。
  • NoSQL数据库是为了解决高并发、高可用、高可扩展、大数据存储问题而产生的数据库解决方案。
  • NoSQL可以作为关系型数据库的良好补充,但是不能替代关系型数据库。
  • Redis就属于非关系型数据库,而传统的MySQL、Oracle、DB2、SQL Server等都是关系型数据库。

分类

  • 键值存储数据库(Redis、Memcached)
  • 列存储数据库(Cassandra、Hbase)
  • 文档存储数据库(MongoDB、CouchDB、Couchbase)
  • 图形存储数据库(Neo4j)
  • 对象存储数据库(db4o)
  • xml存储数据库(BaseX)

为什么需要NoSQL,主要针对以下问题

  • High Performance——高并发读写
  • Huge Storage——海量数据的高效率存储和访问
  • High Scalablility&&High Availability——高可扩展性和高可用性

特点

  • 灵活的数据模型
  • 大数据量,高性能
  • 易扩展
  • 高可用

什么是Redis

Redis全名:Remote Dictionary Server(远程字典服务),由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis作为NoSql数据库的一种,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合(sorted set))和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集以及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同 方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

zset原为sorted set。为了避免sorted set简写sset导致命令冲突,所以改为zset。

Redis的出现,很大程度补偿了memcached这类key/value数据库存储的不足,在部分场合可以对关系型数据库起到很好的补充作用。它提供了Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等客户端,使用很方便。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

Redis的优势

  • 性能极高——Redis的读取速度是110000次/s,写入速度是81000次/s 。
  • 丰富的数据类型——Redis支持二进制案例的 Strings、Lists、Hashes、Sets以及Ordered Sets数据类型操作。
  • 原子——Redis的所有操作都是原子性的。意思就是要么成功执行要么失败完全不执行。单个操作是原子性的,多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性——Redis还支持publish/subscribe(发布-订阅模式)、通知、key过期等特性。

Redis性能

下面是官方的bench-mark数据:

测试完成了50个并发执行100000个请求。

设置和获取的值是一个256字节字符串。

Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。

文本执行使用loopback接口(127.0.0.1)。

结果:读的速度是110000次/s,写的速度是81000次/s 。

更多详细数据请见官方bench-mark page(http://code.google.com/p/redis/wiki/Benchmarks)

影响Redis性能的因素

  • 网络带宽和延迟。在执行基准测试前使用ping快速检测客户端和服务器端的延迟是一个良好的做法。对于带宽,比较好的做法是估计Gbits/s 的吞吐量和网络的理论带宽值比较。在很多实际的情况,Redis的吞吐量在网络之前会受限于CPU。
  • CPU也会是一个重要因素。由于单线程的,Redis受益于快速的含有巨大缓存的CPU。
  • 内存的速度和容量对于小的对象影响不大。但对于大于10KB的对象,可能对需要注意。通常购买昂贵的快速内存模块并不是真正的很有效。
  • Redis在虚拟机上运行慢。虚拟化对很多普通操作来说代价太高了,Redis并没有增加多少开销在所需的系统调用和网络中断上。
  • 客户端和服务器在一台机器运行,对于基准测试TCP/IP回送和UNIX域套接字都可以使用。取决于平台,但UNIX域套接字比TCP/IP回送增加50%的吞吐量。
  • 当大量使用pipelining时,UNIX域套接字获得的性能好处会减少。
  • 当以太网访问Redis时,在数据大小小于以太网数据包的大小(大约1500字节)时,聚集命令使用pipelining会非常有效。
  • 在多CPU套接字服务器,Redis的表现变得依赖于NUMA配置和处理位置。
  • 在高端配置,客户端连接的数量也是一个重要的因素。基于epool/kqueue模型,Redis的事件循环是相当可伸缩的。
  • 在高端的配置,通过调优NIC(s)配置和相关中断可能取得高吞吐量。
  • 根据平台,Redis编译可以使用不同的内存分配器,这可能有不同的行为在原始速度、内部和外部的碎片方面

Redis的应用场景

  • 缓存(例如:数据查询、短连接、新闻内容、商品内容等)
  • 消息队列(例如:秒杀、抢购、12306等)
  • 分布式锁(例如:String类型setnx方法,只有不存在时才能添加成功,返回true)
  • 解决分布式集群架构中的Session分离问题(例如:Session共享)
  • 计数器(例如:文章的阅读量、微博点赞数,允许一定的延迟,先写入Redis再定时同步到数据库)
  • 位统计(例如:使用Redis的bitmaps统计用户留存率、活跃用户量等)
  • 排行榜(例如:使用使用zset(sorted set)和一个计算热度的算法便可以轻松打造一个热度排行榜)
  • 限流(例如:以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false)
  • 商品筛选、好友关系、用户关注(例如:使用Redis来通过set解决传统数据库无法快速计算集合中交、并、差集功能)
  • 数据过期处理(可以精确到毫秒)
  • 内存数据库(例如:登录信息、购物车信息、用户浏览记录等)
  • 支持发布订阅的消息模式

Redis学习(1)---Redis概述的更多相关文章

  1. Redis学习笔记~Redis主从服务器,读写分离

    回到目录 Redis这个Nosql的存储系统一般会被部署到linux系统中,我们可以把它当成是一个数据服务器,对于并发理大时,我们会使用多台服务器充当Redis服务器,这时,各个Redis之间也是分布 ...

  2. redis学习笔记-redis的安装

    Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择, ...

  3. Redis学习笔记-Redis内部数据结构

    Redis内部数据结构 Redis和其他key-value数据库的很大区别是它支持非字符串类型的value值.它支持的value值的类型如下: sds (simple dynamic string) ...

  4. redis学习之——redis.conf配置(基本)文件学习

    # Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...

  5. Redis学习-redis概述

    最近刚刚接触了redis技术,对此有一些了解,这是简单做一点总结. Redis简介 首先,简单了解一下NoSQL(Not only sql),不要错误的理解为:没有SQL,而是不仅仅是SQL.NoSQ ...

  6. redis学习一 大体概述

    redis 命令查找:http://doc.redisfans.com/ 1,redis 技术简介以及疑问      redis是一个开源的,内存存储的数据结构服务器.可以用做数据库,高速缓存和消息队 ...

  7. redis学习笔记——Redis过期键的删除策略

    Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期 ...

  8. Redis学习笔记——Redis的基本操作

    之前介绍过如何在ubuntu安装Redis服务器:https://www.cnblogs.com/zifeiy/p/9062738.html 接下来,我们在Redis上进行一些基本的操作. 所县使用命 ...

  9. Redis学习:Redis的安装与配置

    Redis是新兴的一种内存数据库技术,在数据高速读写方面有着明显的优势.前几天,Redis3.0正式版本发布,为我们带来了Redis集群功能.这一功能很早就投入了开发,直到现在才真正走进我们的视野.可 ...

随机推荐

  1. APISpace 空号检测API接口 免费好用

    空号检测也称空号在线过滤,在线筛号,号码在线清洗.空号检测平台借助第五代大数据空号检测系统,为用户提供高精准的空号检测.号码过滤.号码筛选.号码清洗等众多号码检测功能,让用户快速准确的检测出活跃号.空 ...

  2. [原创]树莓派CM4配置GPIO复用为i2c

    1.简介 项目中需要控制各种外设的电源,正常应该是通过GPIO进行控制,但是树莓派CM4的GPIO管脚有限,因此需要使用i2c扩展IO 查阅CM4-datesheet发现GPIO22和GPIO23可以 ...

  3. 基于ABP实现DDD--DDD相关概念

      什么是DDD呢?领域驱动设计[DDD]是一种针对复杂需求的软件开发方法.将软件实现与不断发展的模型联系起来,专注于核心领域逻辑,而不是基础设施细节.DDD适用于复杂领域和大规模应用,而不是简单的C ...

  4. Webpack干货系列 | Webpack5 怎么处理字体图标、图片资源

    程序员优雅哥(youyacoder)简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要讲解在不需要引入额外的loader的条件下运用Webp ...

  5. 7 什么是dubbo

    什么是dubbo 快速入门dubbo 了解什么是dubbo之前,我们得先了解什么是分布式系统? <分布式系统原理与范型>定义: 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像 ...

  6. 苹果手机和Windows之间互传文件

    参考链接:https://jingyan.baidu.com/article/a378c960c46804f229283064.html 实现原理:就是使用Samba服务,windows共享一个文件夹 ...

  7. 一篇文章带你走进meta viewport的世界

    一.什么是 meta 标签? 可提供有关页面的元信息 二.为什么需要移动端适配? 因为我们在 pc 端上看到的页面都是比较大的,在 pc 端上都是正常显示的,自动不会被进行缩放,除非手动进行放大或缩小 ...

  8. qbxt五一数学Day2

    目录 1. 判断素数(素性测试) 1. \(O(\sqrt n)\) 试除 2. Miller-Rabin 素性测试 * 欧拉函数 2. 逆元 3. exgcd(扩展欧几里得) 4. 离散对数(BSG ...

  9. Odoo14 rpc

    odoo14中rpc调用分为两种. 一种是外部调用rpc来访问odoo数据,这个时候你需要登录授权. 另一种是我们自己编写的widget小部件或者自定义视图时候通过js通过rpc去获取数据. 这里说的 ...

  10. Radmin自动登录器 v3.0

    Radmin自动登录器 v3.0 - By: ybmj@vip.163.com 20150615 用户手册 下载地址:https://download.csdn.net/download/shuren ...