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)

大家都在看

  • 《Redis设计与实现》

    由浅到深,逐步讲解Redis 本书主要分为四大部分。 第一部分”数据结构与对象”: 介绍了Redis中的各种对象及其数据结构,并说明这些数据结构如何影响对象…

    数据库 2023年6月6日
    081
  • Pisa-Proxy 之 SQL 解析实践

    SQL 语句解析是一个重要且复杂的技术,数据库流量相关的 SQL 审计、读写分离、分片等功能都依赖于 SQL 解析,而 Pisa-Proxy 作为 Database Mesh 理念…

    数据库 2023年6月16日
    0110
  • 深入浅出的分析 Properties

    作者:炸鸡可乐原文出处:www.pzblog.cn 一、摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap、LinkedHashMap、TreeMap、Ide…

    数据库 2023年6月14日
    072
  • JUC学习笔记(四)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.htmlJUC学习笔记(二)https://www.cnblogs.com/lm…

    数据库 2023年6月6日
    093
  • Css3入门详解

    一、Css基本语法 1.Html和Css没分开 点击查看代码 <!DOCTYPE html> <html lang="en"> <…

    数据库 2023年6月16日
    077
  • Java并发

    Java并发 JAVA技术交流群:737698533 CAS compare and swap 比较并交换,cas又叫做无锁,自旋锁,乐观锁,轻量级锁 例如下面的代码,如果想在多线…

    数据库 2023年6月16日
    070
  • 计算机组成原理——概述篇

    计算机发展历史 电子管计算机(1946 年——1958 年) 第一台计算机为ENIAC 诞生于美国宾夕法尼亚大学 特点: 集成度小,空间占用大 功耗高,运行速度慢 操作复杂,更换程…

    数据库 2023年6月16日
    051
  • 如何使用原生的Hystrix

    什么是Hystrix 前面已经讲完了 Feign 和 Ribbon,今天我们来研究 Netflix 团队开发的另一个类库–Hystrix。 从抽象层面看, Hystri…

    数据库 2023年6月6日
    091
  • 事务的ACID特性

    技术是为了解决问题而生的,通过事务我们可以解决以下问题: 多个操作不是一个整体操作,出现了部分执行成功的情况,导致数据的状态不一致问题(原子性) 一组操作只有部分完成,没有全部完成…

    数据库 2023年6月11日
    081
  • 2 Java中 == 和 equals 和 hashCode 的区别

    ==是一个比较运算符; 若比较的是基本数据类型,则比较的是值; 若比较的是引用数据类型,则比较的是它们在内存中的内存地址。 说明:对象是存放在堆中,栈中存放的是对象的引用,因此==…

    数据库 2023年6月6日
    089
  • 20个数据库常见面试题讲解

    事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别? MySQL常见的三种存储引擎(InnoDB、…

    数据库 2023年6月16日
    083
  • Go 接口:深入内部原理

    接口的基本概念不在这里赘述,详情请看第十六章:接口 nil 非空? package main func main() { var obj interface{} obj = 1 p…

    数据库 2023年6月6日
    097
  • 你是否听说过 HashMap 在多线程环境下操作可能会导致程序死循环?

    作者:炸鸡可乐原文出处:www.pzblog.cn 一、问题描述 经常有些面试官会问, 是否了解过 HashMap 在多线程环境下使用时可能会发生死循环,导致服务器 cpu 100…

    数据库 2023年6月14日
    073
  • mysql查询优化

    1.count优化 a语句当行数超过11行的时候需要扫描的行数比b语句要多, b语句扫描了6行,此种情况下,b语句比a语句更有效率。 当没有where语句的时候直接select c…

    数据库 2023年5月24日
    075
  • 弱隔离级别 & 事务并发问题

    为什么要有弱隔离级别 如果两个事务操作的是不同的数据, 即不存在数据依赖关系, 则它们可以安全地并行执行。但是当出现某个事务修改数据而另一个事务同时要读取该数据, 或者两个事务同时…

    数据库 2023年6月11日
    069
  • Mysql之Binlog

    1、简述 binlog 二进制日志文件,这个文件记录了MySQL所有的DML操作。通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等。 2、Docker中无法…

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