rdb

【Redis】Redis入门详解

若如初见. 提交于 2020-04-18 04:56:44
(部分图片来自于网络,侵删) 一、Redis概述 ①.Redis简介 Redis是一个开源的key-value存储系统 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步 Redis是单线程+多路IO复用技术 多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池) ②.Redis特点 高效性:Redis读取的速度是110000次/s,写的速度是81000次/s 原子性:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。 支持多种数据结构

Redis 基本认识(笔试、面试题)

99封情书 提交于 2020-04-17 11:27:12
【推荐阅读】微服务还能火多久?>>> 一、Redis 1、简介 【官方简介地址:】 https: // redis.io/topics/introduction   看不懂不要紧,先混个眼熟,慢慢来...。 【初步认识 Redis:】 Redis is an open source (BSD licensed), in -memory data structure store, used as a database, cache and message broker. 【翻译:】 Redis 是一个开源的、基于内存的数据存储结构,可以作为数据库、缓存、消息中间件。 【重点:】 基于内存、支持多种数据结构、常用于缓存。 2、为什么使用 Redis 作为缓存? (1)为什么要使用缓存?   对于一个系统来说,若直接操作数据库,每次读写都经过磁盘操作,当并发量过高时,磁盘读写速度极大地影响系统的性能。使用缓存,即在访问磁盘前设置一个缓冲区,若缓冲区没有数据,再去数据库进行操作,这样可以极大地减少磁盘操作,从而提高系统性能。 (2)Redis 是基于内存的、一个高性能的 key - value 数据库(非关系型数据库)。   内存的处理速度比操作磁盘快,可以提高性能。   缓存分担了部分请求,减少了数据库访问压力,提高了并发量。   说起 key - value 库,容易想到 Java

Redis相关操作指令

别说谁变了你拦得住时间么 提交于 2020-04-15 08:40:53
【推荐阅读】微服务还能火多久?>>> 1、redis info详解 127.0.0.1:6379> info all # Server(服务器信息) redis_version:3.0.0 #redis服务器版本 redis_git_sha1:00000000 #Git SHA1 redis_git_dirty:0 #Git dirty flag redis_build_id:6c2c390b97607ff0 #redis build id redis_mode:cluster #运行模式,单机或者集群 os:Linux 2.6.32-358.2.1.el6.x86_64 x86_64 #redis服务器的宿主操作系统 arch_bits:64 #架构(32或64位) multiplexing_api:epoll #redis所使用的事件处理机制 gcc_version:4.4.7 #编译redis时所使用的gcc版本 process_id:12099 #redis服务器进程的pid run_id:63bcd0e57adb695ff0bf873cf42d403ddbac1565 #redis服务器的随机标识符(用于sentinel和集群) tcp_port:9021 #redis服务器监听端口 uptime_in_seconds:26157730 #redis服务器启动总时间

redis持久化方法对比分析

只愿长相守 提交于 2020-04-13 21:57:00
【今日推荐】:为什么一到面试就懵逼!>>> 1、前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF持久化(原理是将Reids的操作日志以追加的方式写入文件)。那么这两种持久化方式有什么区别呢,改如何选择呢?网上看了大多数都是介绍这两种方式怎么配置,怎么使用,就是没有介绍二者的区别,在什么应用场景下使用。 2、二者的区别 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。 AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。 3、二者优缺点 RDB存在哪些优势呢? 1). 一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据

为什么redis cluster至少需要三个主节点?

自闭症网瘾萝莉.ら 提交于 2020-04-13 14:52:20
【今日推荐】:为什么一到面试就懵逼!>>> 转自: https://www.zhihu.com/question/354518943 作者:敖丙 链接:https://www.zhihu.com/question/354518943/answer/888891865 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 前言 Redis 在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在 Redis 的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸( 请允许我使用一下夸张的修辞手法 ),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写 《吊打面试官》 系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂 Offer ! 絮叨 写这期其实比较纠结,我之前的写的比较通俗易懂,一是我都知道这些点,二是之前我在所在的电商公司对雪崩,击穿啥的还算有场景去接触。但是线上的Redis集群我实际操作经验很少,总不能在公司线上环境实践那些操作吧,所以最后看了下官网,还有一些资料(文章后面我都会贴出来),强行怼了这么篇出来。 最近双十一小忙,周末双十一值班目测没时间写

Redis持久化机制

淺唱寂寞╮ 提交于 2020-04-13 13:46:58
【今日推荐】:为什么一到面试就懵逼!>>> 博客地址: https://tech101.cn/2020/03/05/Redis%E6%8C%81%E4%B9%85%E5%8C%96%E6%9C%BA%E5%88%B6 前言 Redis是一款纯C语言编写的符合ANSI C标准实现的内存数据库。Redis以支持丰富的内存数据结构和高性能著称,在互联网行业中被广泛用于缓存数据和内存计算。 虽然Redis是一款内存数据库,但是它也提供了数据持久化的能力。本文,我们就来聊聊Redis的数据持久化机制。 持久化面临的问题 在正式开始介绍Redis持久化功能之前,我们先来看下实现持久化能力需要面临的一些技术问题。 当客户端请求Redis服务端将数据写入Redis数据库的时候,数据将被存放在内存中。如果Redis数据库启用了持久化功能,那么数据将被持久化到持久化设备(磁盘)上。从客户端请求服务端写入数据到数据被持久化到磁盘上,整个过程需要经历如下几个阶段 1 : 客户端向服务端发起写命令。 服务端接收到客户端请求,执行写命令将数据写入内存。 服务端调用 write() 系统调用(Unix环境)将内存中的数据写入内核缓冲区。 调用 fsync() 将内核缓冲区的数据写入磁盘控制器的缓存中。 磁盘控制器将缓存中的数据写入到磁盘的物理介质上。 在上面列出的5个步骤中,第1步到第3步数据都在内存中存放

Redis持久化机制

徘徊边缘 提交于 2020-04-13 13:42:24
【今日推荐】:为什么一到面试就懵逼!>>> 博客地址: https://tech101.cn/2020/03/05/Redis%E6%8C%81%E4%B9%85%E5%8C%96%E6%9C%BA%E5%88%B6 前言 Redis是一款纯C语言编写的符合ANSI C标准实现的内存数据库。Redis以支持丰富的内存数据结构和高性能著称,在互联网行业中被广泛用于缓存数据和内存计算。 虽然Redis是一款内存数据库,但是它也提供了数据持久化的能力。本文,我们就来聊聊Redis的数据持久化机制。 持久化面临的问题 在正式开始介绍Redis持久化功能之前,我们先来看下实现持久化能力需要面临的一些技术问题。 当客户端请求Redis服务端将数据写入Redis数据库的时候,数据将被存放在内存中。如果Redis数据库启用了持久化功能,那么数据将被持久化到持久化设备(磁盘)上。从客户端请求服务端写入数据到数据被持久化到磁盘上,整个过程需要经历如下几个阶段 1 : 客户端向服务端发起写命令。 服务端接收到客户端请求,执行写命令将数据写入内存。 服务端调用 write() 系统调用(Unix环境)将内存中的数据写入内核缓冲区。 调用 fsync() 将内核缓冲区的数据写入磁盘控制器的缓存中。 磁盘控制器将缓存中的数据写入到磁盘的物理介质上。 在上面列出的5个步骤中,第1步到第3步数据都在内存中存放

曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充

风格不统一 提交于 2020-04-12 09:11:15
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读。由于我用c也是好几年以前了,些许错误在所难免,希望读者能不吝指出。 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果 一些补充知识 项目结构及入口 除了大学那些玩具,一个真正的项目,都是由大量源代码文件组成一个工程。在Java里,一个 java 文件要使用其他 java 文件中的函数、类型、变量等,都需要使用import语句来引入。在c语言里,也是一样的,在c语言中,要引入其他文件的功能,需要使用include语句。 比如,在redis的主入口,redis.c文件中,就包含了如下一堆语句: #include "redis.h" #include "cluster.h" #include "slowlog.h" #include "bio.h" #include <time.h> #include <signal.h> 其中,以<开头的,比如<time.h>是标准库的头文件,会在系统指定的路径下查找,可类比为 jdk 官方的class;"bio.h"这种,以""包裹的,则是工程里自定义的。 比如,time.h

redis随笔

与世无争的帅哥 提交于 2020-04-11 14:47:23
redis redis的安装一 安装的准备 首先得买一个服务器(我买的阿里云ecs轻量级); 再下载远程客户端(我用的Xshell,Xftp); 打开Xftp将下载好得redis压缩包传输Xftp中,在进入Xshell中Linux命令安装; rides安装 下载地址:https://redis.io/ 安装: 1,Linux进入redis所在目录; 2,执行命令:tar -zxvf redis-3.2.10.tar.gz //个人建议将软件安装在/usr/local目录下,执行命令:tar -zxvf redis-3.2.10.tar.gz -C /usr/local/redis,当然解压完了move也可以; 3,进入解压后的目录进行编译,cd redis-3.2.10. 执行命令:make ,make命令后可能报错,如果报错,解决如下: 报错一:那可能是没有gcc (linux下的一个编译器,是c,c++程序的编译器) 使用命令yum进行安装,yum -y install gcc 报错二:error:jemalloc/jemalloc.h:No such file or disectoty //可能找不到c语言中的头文件 执行 make MALLOC = libc 4,安装完gcc之后,make distclean 清理下上次make后产生的文件,再make redis启动:

Redis之集群篇

早过忘川 提交于 2020-04-10 13:39:30
Redis集群 Redis作为缓存使用,单进程单实例存在的问题: 单点故障 容量有限 压力过大 Redis主从复制解决单点故障: AKF拆分原则: x轴:全量、镜像。复制多个镜像,解决单点故障 y轴:按业务功能拆分为多个实例,同时在x轴方向同时创建多份镜像。 z轴:优先级、逻辑再拆分。比如说某个模块数据过多,可以拆分为多个Redis客户端,全量数据分为多份,每个Redis中存一部分数据。 此时虽然解决了单实例存在的三个问题,那么又会带来数据一致性问题。 解决数据一致性问题: 同步阻塞方式: 假如说一个客户端做了一个写操作,到达主Redis,那么 client 将阻塞,直到主Redis通知两个备Redis都成功写入才返回结果。这时候为强一致性,带来的问题是,假如说备用Redis这时候挂掉,没有写入成功,那么主Redis等待超时之后,就返回给客户端失败,相当于服务不可用,破坏了可用性。 异步方式: 弱一致性: 容忍数据丢失一部分,当 client 发送一个写请求,Redis立刻返回OK,这时候通知备Redis去写,如果两个都写失败了,那么就会丢失数据。 最终一致性: 这种方式虽然数据最终会一致,但是在这期间如果有客户端去读数据,可能会造成脏读。 小知识:主备与主从的区别 主备:备机一般不参与业务,当主挂了之后,备机可以代替主去提供服务。 主从:客户端可以访问主,也可以访问从。