Redis学习(1)—Redis概述

什么是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)

  • 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 。

影响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解决传统数据库无法快速计算集合中交、并、差集功能)
  • 数据过期处理(可以精确到毫秒)
  • 内存数据库(例如:登录信息、购物车信息、用户浏览记录等)
  • 支持发布订阅的消息模式

Original: https://www.cnblogs.com/vgshots/p/16521210.html
Author: vgshots
Title: Redis学习(1)—Redis概述

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612220/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • django中的视图层

    1.什么是视图层 简单来说,就是用来接收路由层传来的请求,从而做出相应的响应返回给浏览器 2.视图层的格式与参数说明 2.1基本格式 from django.http import…

    数据库 2023年6月14日
    072
  • vmstate 命令详解2022

    vmstat 是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过 vmstat 来发现系统中的瓶颈呢? 1。 使用vmstat 使用前我们先看下命令介绍…

    数据库 2023年6月14日
    088
  • 普通 Docker 与 Kubernetes 对比

    Docker提供基本容器管理 API 和容器镜像文件格式Kubernetes 管理运行容器的(物理或虚拟)主机群集,如果 Docker 是 OCP 的”内核&#8221…

    数据库 2023年6月14日
    076
  • 平均工资:部门与公司比较

    力扣(LeetCode)615. 平均工资:部门与公司比较 困难难度数据库题目 一. 题目 给如下两个表,写一个查询语句,求出在每一个工资发放日,每个部门的平均工资与公司的平均工资…

    数据库 2023年6月11日
    075
  • fiddler的mock数据与二次开发示例

    fiddler的使用记录 fiddler了解 上官网下载工具,然后安装使用,https://www.telerik.com/fiddler,如果对该工具不熟悉,还有直白的教程,看过…

    数据库 2023年6月6日
    0117
  • MYSQL性能优化以及建议

    1、业务代码组合逻辑后进行数据库操作,如根据波次进行库存分配,可以将波次里面的订单所有明细进行分组,然后匹配库存。2、将大字段、不常用字段放置到扩展表中,将经常使用(状态、数量、编…

    数据库 2023年5月24日
    069
  • 890.查找和替换模式

    你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。 如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之…

    数据库 2023年6月16日
    076
  • Java学习-第一部分-第二阶段-第一节:面向对象编程(高级)

    面向对象编程(高级) 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 类变量和类方法(static) 类变量 类…

    数据库 2023年6月11日
    0103
  • 如何构建你自己的计算机网络知识体系?

    大家好,我是小牛肉,不知道各位曾经有没有和我一样的困惑,就是有些知识好像已经看了好多遍了,但是知识点在脑子中是分散的,没办法串联起来,别人问一个问题我能答出来一点,但是你让我自己从…

    数据库 2023年6月6日
    084
  • Harbor部署

    harbor 无论是使用Docker-distribution去自建仓库,还是通过官方镜像跑容器的方式去自建仓库,通过前面的演示我们可以发现其是非常的简陋的,还不如直接使用官方的D…

    数据库 2023年6月14日
    092
  • MySQL数据库CRUD

    INSERT语句 INSERT INTO 表名 (column1,column2,column3,…)VALUES (value1,value2,value3,&#82…

    数据库 2023年5月24日
    072
  • Office直通车

    数据库篇 数据库架构 为什么要使用索引? 对于数据量较大的表,建立索引避免全表扫描,能够提高查询速度,提高效率 什么样的信息能成为索引? 主键、唯一键、普通键 索引数据结构? 主流…

    数据库 2023年6月6日
    0284
  • 记一次部署系列:prometheus通过pushgateway配置自定义监控项

    1、部署pushgateway并配置prometheus能够拿到pushgateway的数据,类似下图。部署过程参考:https://www.cnblogs.com/sunnyto…

    数据库 2023年6月9日
    0229
  • 实时展示用户上传的头像

    实时展示用户上传的头像 总体思路 """ 1.首先需要&amp…

    数据库 2023年6月14日
    074
  • MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的”精通MYSQL等数据库及优化” 那么我们今天就先来了解一…

    数据库 2023年5月24日
    094
  • Js前端-路由管理器函数

    buildUrl:function( path ,params ){ let url = "" + path; let _paramUrl = "&q…

    数据库 2023年6月9日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球