redis介绍及特点

 Redis是由意大利人Salvatore Sanfilippo开发的一款内存内存高速缓存数据库。

 Reids全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,典型的NoSQL数据库服务器。是一个nosql(非关系式数据库),key-value,可持久化,内存,分布式的,缓存的数据库;
   结构化数据:有规律的一类数据;例如:人的信息,动物信息,考试信息
   非结构化数据:海量的不具备任何共同特性的数据集合;例如:网页,日志;图片
   关系型数据库:体现不同类结构化数据之间的关系的数据,例如ORACLE mysql
   非关系型数据库:存储的是非结构化的海量数据;无法体现数据的关系;例如 mongoDB redis
 key-value: 目前阶段,非关系型数据库使用的存储数据的格式

可持久化内存

  服务器存储的介质,只有2个,一个是磁盘(可靠性高,速度慢),一个是内存(速度快,可靠性低);由于内存数据在断电,宕机后数据消失,访问缓存时造成数据未命中,出现一定范围的数据未命中,将会导致缓存的雪崩/缓存击穿
    redis具有持久化数据到磁盘的能力,将内存数据在写入之后按照一定规格存储在磁盘文件中,宕机,断电后可以启动redis是读取磁盘的文件恢复缓存数据;

 Redis本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理十万次读写操作,是已知性能最快的Key-Value DB。

存储的数据结构

 Reids的出色之处不仅仅是性能,Redis最大魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,另外Redis也可以对存入的Key-Value设置expire时间。

 Redis的主要特点是数据库容量收到物理内存的限制,不能用作海量数据的高性能读写,因此Reids适合的场景主要局限在较小数据量的高性能操作和运算上。

分布式

  分布式集群;
    分布式:当个任务被多个节点切分处理,叫做分布式处理一个任务;
    集群:一批节点在同时处理一个或多个任务;
    redis的分布式:单个服务器内存,磁盘空间有限,无法处理海量的缓存数据,必须支持分布式的结构,这样就解决了Reids不能用作海量数据的高性能读写;

缓存

 缓存的逻辑在SSM框架中的使用;
    数据库缓存:
    sql语句是key值,查询结果resultSet是value,当同一个查询语句访问时(select * from t_product),只要曾经查过,调用缓存直接返回resultSet,节省了数据库技术读取磁盘数据的时间;
    持久层缓存:
    减少了连接数据库的时间;减少了resultSet封装成对象的过程;
    业务层和控制的缓存:
    减少调用层次;
    
    描述缓存在业务层的逻辑;
        查询商品信息;
        判断当前查询在缓存是否有数据
            § 如果有数据,直接返回,当前请求结束
            § 如果没有数据,查询持久层数据库数据,获取数据存储在缓存一份,供后续访问使用;

缓存雪崩/缓存击穿

  海量请求访问服务器,服务器的性能由缓存支撑,一旦一定范围的缓存数据未命中,请求的数据访问涌入数据库;承受不了压力造成宕机--重启--海量请求并未消失--宕机--重启,系统长时间不可用;这种情况就是缓存的雪崩.

面试题

1.为什么redis需要把所有的数据放到内存中??

  Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎,如果设置最大使用的内存,则已有数据记录达到内存限制后不能继续插入新值。

2.redis存储的数据类型有哪些?

  redis具备五种数据类型String,Hash,List,Set,Zset。

3.Redis常见的性能问题都有哪些?如何解决?

  1. Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性的暂停服务,所以Master最好不要写内存快照。
  2. Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启恢复速度。Master最好不要做任何持久化工作,包括内存快照和Aof日志文件,特别是不要启动内存快照做持久化操作如果数据比较关键某个Slave开启AOF备份数据,策略为每秒同步一次。
  3. Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占用大量的CPU和内存资源,导致服务load过高,出现短暂暂停服务现象。
  4. Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Salve和Master最好在一个局域网内

4.Reids最合适的场景有哪些?

  会话缓存、全页缓存、队列、排行榜/计数器、发布/订阅

5、Reids的优缺点

  优点:

  • 性能极高-redis能支持超多100k+的每秒读写频率。
  • 丰富的数据类型-Reids支持二进制案例的String,Lists、等数据类型操作
  • 原子-Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行
  • 丰富的特性-Reids还支持publish/subscribe,通知,key过期等特性

  缺点:

  • 由于是内存数据库,所以,单台机器,存储的数据量,根机器本身的内存大小。虽然Redis本身有内存过期策略,但是还是要提前预估和节约内存。如果内存增长过快,需要定期删除数据
  • 如果进行完整重同步,由于需要生成rdb文件,并进行传输,会占用主机的CPU,并会消耗线网的带宽。
  • 修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。在这个过程中,redis不能提供服务。

6、redis的持久化方式

  RDB持久化和AOF持久化

  RDB持久化是指在再指定的时间间隔内将内存中的数据集快照写入硬盘,实际的操作过程是fork一个字进程,先将数据集写入临时文件,写入成功后,在替换之前的文件,用二进制压缩存储。

  

  AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

  二进制的日志,实时记录 redis客户端操作的所有写命令;没有来得及save的数据不保存在dump里,但是命令内容,保存在了aof文件;恢复时,只需要将每save的所有内容的命令调出来。

  

RDB的优缺点:

 优点:RDB是一个非常紧凑(compact)的文件,它保存了Redis在某个时间点上的数据集。这种文件非常适合用于进行备份:比如说,你可以在最近的24小时内,每小时备份一次RDB文件,并且在每个月的每一天也备份一个RDB文件。这样的话即使遇到了问题,也可以随时将数据集还原到不同的版本。RDB非常适用于灾难恢复(disaster recovery):它只有一个文件,并且内容都非常紧凑,可以(在加密后)将它传送到别的数据中心,RDB可以最大化Redis的性能:父进程在保存RDB文件时唯一要做的就是FORK出一个子进程,然后这个子进程会处理接下来的所有保存工作,父进程无须执行任何磁盘I/O操作,RDB在恢复大数据集时的速度比AOF的恢复速度要快
    缺点:如果你需要在服务器故障时尽量避免丢失数据,那么RDB不适合你,虽然Redis允许你设置不同的保存点(save point)来控制保存RDB文件的频率,但是,因为RDB文件需要保存整个数据集的状态,所以它并不是一个轻松的操作。因此你可能会至少5到十分钟才保存一次RDB文件。在这种情况下,一旦发生故障停机,就可能会丢失好几分钟的数据。每次保存RDB时,Redis都要fork()出一个子进程,并由子进程来进行实际的持久化工作。在数据集比较庞大时,fork()可能会非常的耗时,造成服务器在某某毫秒内停止处理客户端;如果数据集非常巨大,并且cpu时间非常紧张的话,那么这种停止时间甚至可能会长达一秒。

AOF的优缺点:

优点:1、使用AOF持久化会让Redis变得非常耐久:你可以设置不同的fsync策略,AOF的默认策略为每秒钟fsync一次,在这种配置下,Reids依然可以保持良好的性能,在这种配置下,Redis仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据。AOF文件是一个只进行追加操作的日志文件,因此对AOF文件的写入不需要进行seek,即使日志文件因为因为某些原因而包含了未写的命令,reids-check-aof工具也会轻易地修复这种问题。
    2、Redis可以在AOF文件体积变得过大时,自动地在后台对AOF进行重写:重写后的新AOF文件包含了恢复当前数据集所需要的最小命令集合。整个重写操作是绝对安全的,因为Reids在创建AOF文件的过程中,会继续将将命令追加到现有的AOF文件中,即使重写的过程发生停机,现有的AOF文件也不会丢失。而一旦新的AOF文件创建完毕,Reids就会从旧的AOF文件切换到新的AOF文件,并开始对新的AOF文件进行追加操作。
 缺点:对于相同的数据集来说,AOF的文件体积通常要大于RDB文件的体积。

Redis简介和常见的面试题的更多相关文章

  1. Redis简介与简单安装

    Redis简介与简单安装   一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类 ...

  2. 【面试必备】常见Java面试题大综合

    一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort ...

  3. PHPer常见的面试题总结

    1.平时喜欢哪些php书籍及博客?CSDN.虎嗅.猎云 2.js闭包是什么? 3.for与foreach哪个更快? 4.php鸟哥是谁?能不能讲一下php执行原理? 5.php加速器有哪些?apc.z ...

  4. Redis简介及基础知识

    一.Redis简介 Redis是什么?两句话可以做下概括: 1. 是一个完全开源免费的key-value内存数据库 2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 string( ...

  5. 分享一些JVM常见的面试题(转)

    出处:  分享一些JVM常见的面试题 前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 ...

  6. 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  7. NoSQL和Redis简介及Redis在Windows下的安装和使用教程

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/103.html?1455869099 NoSQL简介 介绍redis前,我 ...

  8. Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)

    1.NOSQL简介 nosql的产生并不是要彻底的代替关系型数据库,而是作为传统关系型数据库的一个补充. Facebook和360使用Cassandra来存储海量社交数据 Twitter在其url抓取 ...

  9. 1. redis简介

    一. redis简介 Redis是一种面向"键/值"对数据类型的内存数据库,可以满足我们对海量数据的读写需求. redis的键只能是字符串,redis的值支持多种数据类型: (1) ...

随机推荐

  1. 使用jvisualvm的jstatd方式远程监控Java程序

    使用Java自带的jvisualvm调试Java程序,可以查看CPU.内存.类及线程等信息,还可以进行Dump,无疑是一个利器 由于客户端是Windows.服务端是Linux,并且是最小安装的Linu ...

  2. linux 链接命令

    ln link /bin/ln -s 创建软链接ln -s [原文件] [链接文件] 软链接 ln -s /etc/issue /tmp/issue.soft硬链接ln /etc/issue /tmp ...

  3. Eclipse Ctrl + H 搜索文件不覆盖已打开文件解决办法

    1.windows------->preferences

  4. 对JDBC的轻量级封装,Hibernate框架

    IDEA是真的好用... 用脑子下jar包..http://mvnrepository.com/

  5. SQLSERVER中KeyHashValue的作用(上)

    SQLSERVER中KeyHashValue的作用(上) SQLSERVER中KeyHashValue的作用(下) 原文的标题是:SQLSERVER在索引下如何找到哈希值的随想 现在知道KeyHash ...

  6. HTML--<frameset>標簽

    <html><frameset rows="20,80"> <frame src="/example/html/frame_a.html&q ...

  7. [翻译] Icon and Image Sizes

    Icon and Image Sizes iOS Human Interface Guidelines Every app needs an app icon and a launch file or ...

  8. 铁乐学python-面向对象的更多说明

    以下内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 面向对象的更多说明 面向对象的软件开发 很多人在学完了python的class机制之后,遇到一个生产中的问题,还是 ...

  9. tomcat7换端口号调试

    1.C:\tomcat\conf\server.xml中修改端口号 2.C:\tomcat\bin\startup.bat批处理文件启动tomcat 3.用ctrl+c结束批处理文件 4.调试结束

  10. Inter-System Differencing between GPS and BDS for Medium-Baseline RTK Positioning-12-18

    顾及系统间偏差的双系统中长基线RTK定位 主要适用于:严峻地区,比如城市峡谷和被高大树木遮挡. 伪距码系统间偏差可以通过先验标定进行改正或者参数化.已知先验载波系统间偏差,那么两个系统重叠频率的模糊度 ...