Redis(开发与运维)
文章平均质量分 85
本专栏内容摘录于《Redis开发与运维》,是作者的个人读书笔记,在此感谢付磊、张益军两位先生的知识传授
董哥的黑板报
90后程序员!
展开
-
Redis(开发与运维):01---Redis简介、特性、使用场景、使用建议、历史版本
一、Redis简介Redis官网:https://redis.io/ Redis是一种基于键值对(key-value)的NoSQL数据库 与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、 list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、 HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此 Redis可以满足很多的应用场景, 而且因为Redis会将所有数据都存放在内存中,所以它的读写性能非常惊人。原创 2020-05-09 13:13:23 · 1409 阅读 · 0 评论 -
Linux下安装Redis数据库
前言在安装Redis前需要了解Redis的版本规则以选择最适合自己的版本:Redis约定次版本号(即第一个小数点后的数字)为偶数的版本是稳定版(如2.8版、3.0版),奇数版本是非稳定版(如2.7版、2.9版),生产环境下一般需要使用稳定版本 Windows下安装Redis参阅:https://blog.csdn.net/qq_41453285/article/details/106017252一、安装方式1(下载源码编译安装)①下载、解压第一步:从下面的网址中下载Redis最新稳定版本的原创 2020-05-09 13:53:39 · 973 阅读 · 0 评论 -
Redis(开发与运维):03---Windows下安装Redis数据库
Linux下安装Redis参阅:https://blog.csdn.net/qq_41453285/article/details/106017229 一、在Windows系统下运行Redis的弊端Redis在将数据库持久化到硬盘的时候,需要用到fork系统调用,而Windows并不支持这个调用。在缺少fork调用的情况下,Redis在执行持久化操作期间就只能阻塞所有客户端,直到持久化操作执行完毕为止 由Dusan Majkic创建的非官方移植版Redis提供了Redis 2.4.5的预编译二..原创 2020-05-09 13:54:07 · 466 阅读 · 0 评论 -
Redis(开发与运维):04---Redis的启动、连接/外网连接、关闭、可执行文件与配置参数大全
一、Redis的可执行文件当我们安装完Redis之后,src和/usr/local/bin目录下提供了下面这些可执行程序,我们称之为Redis Shell:redis-server Redis服务器 redis-cli Redis命令行客户端 redis-benchmark Redis性能测试工具 redis-check-aof Redis AOF持久化文件检测和AOF文件修复工具 redis-check-dump Redis RDB持久化文件检测和文件检原创 2020-05-09 14:28:58 · 1000 阅读 · 0 评论 -
Redis(开发与运维):05---Redis命令的5种返回值类型
一、状态回复状态回复是最简单的一种回复 比如: 向Redis发送SET密令设置某个键的值时,Redis会回复状态OK表示设置成功 向服务端发送PING命令的回复PONG也是状态回复 二、错误回复当出现的命令不存在或命令格式有误等情况下Redis会返回错误回复,错误回复以(error)开头,并在后面跟上错误信息。 例如:执行一条不存在的命令在2.6版本时,错误信息均以“ERR”开头,而2.8版本之后,部分错误信息会以具体的错误类型开头。 例如:我们创建了一个列表“key”原创 2020-05-09 14:50:25 · 2142 阅读 · 0 评论 -
Redis(开发与运维):06---键的基本命令(KEYS、SCAN、EXISTS、RENAME、DEL、RANDOMKEY、TYPE、DBSIZE)
一、KEYS:全量遍历键KEYS pattern功能:用来获取此数据库中所有的键名 注意事项: KEYS命令需要遍历Redis中的所有键,当键的数量较多时会影响性能,不建议在生产环境下使用 支持glob风格通配符格式,见下表:KEYS命令使用扩展因为Redis采取单线程架构,如果Redis包含了大量的键,那么执行该命令可能会造成Redis阻塞,所以一般建议不要在生产环境下使用该命令 有时候确实有遍历键的需求,那么可以在下面三种情况下使用: 在一个不对外提供服务的Redi.原创 2020-05-09 16:02:29 · 1135 阅读 · 0 评论 -
Redis(开发与运维):07---键的生存与过期时间(EXPIRE、PEXPIRE、EXPIREAT、PEXPIREAT、TTL、PTTL、PERSIST、SETEX)
关于键的生存时间与过期时间更详细的内容还可以参阅其他一些文章: https://blog.csdn.net/qq_41453285/article/details/103246086 https://blog.csdn.net/qq_41453285/article/details/103289994 https://blog.csdn.net/qq_41453285/article/details/103290544 生存时间(Time To Live,TTL):在经过指定的.原创 2020-05-09 16:49:17 · 1092 阅读 · 0 评论 -
Redis(开发与运维):08---键迁移(move、dump、restore、migrate)
键迁移概述: 键迁移就是把数据由一个Redis迁移到另一个Redis(例如从生产环境迁移到测试环境),或者在数据库之间进行迁移 键迁移有三种方式:move、dump+restore、migrate 下面是三种方式的比较,建议使用migrate: 一、movemove key db功能:将参数所指的key从当前源数据库迁移到指定的数据库中 这个命令是在单个Redis内部进行是用户具有迁移这个命令在实际生产环境中不建议使用二、dump+restoredump k..原创 2020-05-09 17:23:53 · 1414 阅读 · 0 评论 -
Redis(开发与运维):09---数据库管理(dbsize、select、flushdb、flushall)
关于数据库管理的更多知识点,还可以参阅另外一篇文章:https://blog.csdn.net/qq_41453285/article/details/103245279一、数据库数量()许多关系型数据库,例如MySQL支持在一个实例下有多个数据库存在 的。但是与关系型数据库用字符来区分不同数据库名不同,Redis只是用数字作为多个数据库的实现,Redis默认配置中是有16个数据库二、dbsizedbsize命令可以返回当前数据库中键的数量dbsize三、切换数据库(select)原创 2020-05-09 20:54:47 · 1030 阅读 · 0 评论 -
Redis(开发与运维):10---Redis的单线程架构
Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务,本文首先通过多个客户端命令调用的例子说明Redis单线程命令处理机制,接着分析Redis单线程模型为什么性能如此之高,最终给出为什么理解单线程模型是使用和运维Redis的关键一、单线程模型演示案例现在开启了三个redis-cli客户端同时执行命令 客户端1设置一个字符串键值对:127.0.0.1:6379> set hello world客户端2对counter做自增操作:127.0.0.1:6379原创 2020-05-10 07:57:59 · 435 阅读 · 0 评论 -
Redis(开发与运维):11---Redis数据结构与内部编码(OBJECT ENCODING)
一、五大数据结构Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为: STRING:字符串 LIST:列表 SET:集合 HASH:散列 ZET:有序集合 TYPE命令用来获得键的数据类型,而不是键值的数据类型 返回值: string:字符串类型 hash:散列类型 list:列表类型 set:集合类型 zet:有序集合类型 二、内部编码实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,.原创 2020-05-10 09:14:33 · 673 阅读 · 0 评论 -
Redis(开发与运维):12---string字符串对象
一、字符串对象概述字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习奠定基础 字符串就是一个由字节组成的序列 Redis的字符串底层实现原理可以见文章: https://blog.csdn.net/qq_41453285/article/details/103225174 https://blog.csdn.net/qq_41453285/article/details/103219345原创 2020-05-10 23:18:30 · 758 阅读 · 0 评论 -
Redis(开发与运维):13---哈希/散列对象
一、哈希简介几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组 在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},...{fieldN,valueN}},Redis键值对和哈希类型二者的关系可以下图表示一些特点: 存储多个键值对之间的映射,并且键值对不允许重复 散列存储的值既可以是字符串也可以是数字值 用户同样可以对散列存储的数字值执行自增操作或自减操作 散列在很多方面是一个微缩版的Redi原创 2020-05-10 23:40:52 · 834 阅读 · 1 评论 -
Redis(开发与运维):14---列表对象
一、列表对象概述列表类型是用来存储多个有序的字符串,一个列表最多可以存储个元素。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景 特点: 一个列表可以存储多个字符串,相同元素可以重复出现 列表中的元素是有序的,根据元素的插入、删除顺序对元素进行排序 优点: 可以包含多个字符串值,使得用户可以将数据集中在同一个地方 列表的底层实现参见文章:https://blog.csdn.net/qq_41453285/article/details/1032原创 2020-05-11 12:51:22 · 679 阅读 · 0 评论 -
Redis(开发与运维):15---集合对象
一、集合对象概述特点: 和列表一样都可以存储多个字符串 与列表的不同: 集合通过散列表来保证自己存储的元素不能重复 列表中的元素是根据插入、删除元素时来对数据进行排序,但是集合中的元素在插入或删除时是无序的,所以集合中的元素是无序排列的 一个集合最多可以存储个元素 Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并 集、差集,合理地使用好集合类型,能在实际开发中解决很多实际问题二、命令常用命令sadd:添加元素。返回结果为添加成功的元素个数原创 2020-05-11 13:18:42 · 429 阅读 · 0 评论 -
Redis(开发与运维):16---有序集合对象
一、有序集合对象概述它保留了集合不能有重复成员的特性, 但不同的是,有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数(score)作为排序的依据 如下图所示,该有序集合包含kris、mike、frank、tim、martin、tom, 它们的分数分别是1、91、200、220、250、251,有序集合提供了获取指定 分数和元素范围查询、计算成员排名等功能,合理的利用有序集合,能帮助我们在实际开发中解决很多问题特点: 和散列一样,都是用于存储键值原创 2020-05-11 13:38:21 · 614 阅读 · 0 评论 -
Redis(开发与运维):17---常用功能之(慢查询日志)
一、慢查询日志介绍许多存储系统(例如MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息记录下来,Redis也提供了类似的功能 Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度 客户端命令执行步骤一般分为4步:发送命令、命令排队、命令执行、返回结果。慢查询只统计命令执行的时间的时间,所以没有慢查询并不代表客 户端没有超时问原创 2020-05-11 13:38:37 · 631 阅读 · 0 评论 -
Redis(开发与运维):18---常用功能之(redis-cli、redis-server、redis-benchmark)
Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它们 虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题一、redis-cli在前面数据库连接的时候(https://blog.csdn.net/qq_41453285/article/details/106018436)已经redis-cli的-h、-p参数,除了这些参数,还有很多有用的参数,要了解redis-cli的全部参数,可以执行redis-cli-help命令来进行查看原创 2020-05-11 18:20:49 · 2217 阅读 · 0 评论 -
Redis(开发与运维):19---常用功能之(Pipeline)
一、Pipeline概述Redis客户端执行一条命令分为如下四个过程: 1.发送命令 2.命令排队 3.命令执行 4.返回结果 其中1+4称为Round Trip Time(RTT,往返时间)Pipeline概述Redis提供了批量操作命令(例如mget、mset等),有效地节约RTT。但大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有 mhgetall命令存在,需要消耗n次RTT。Redis的客户端和服务端可能部署在不 同的机器上。例如客户端在北京,原创 2020-05-11 18:33:43 · 563 阅读 · 0 评论 -
Redis(开发与运维):20---常用功能之(事务)
https://blog.csdn.net/qq_41453285/article/details/103471941 https://blog.csdn.net/qq_41453285/article/details/103472293 https://blog.csdn.net/qq_41453285/article/details/103472630原创 2020-05-11 22:52:00 · 535 阅读 · 0 评论 -
Redis(开发与运维):21---常用功能之(Lua脚本)
关于Redis与Lua的更多详细知识还可以参阅: https://blog.csdn.net/qq_41453285/article/details/103473087 https://blog.csdn.net/qq_41453285/article/details/103473310 https://blog.csdn.net/qq_41453285/article/details/103473400 https://blog.csdn.net/qq_41453285/article/de原创 2020-05-12 09:44:16 · 852 阅读 · 0 评论 -
Redis(开发与运维):22---常用功能之(Bitmaps)
关于Bitmaps的设计与实现,可以参阅:https://blog.csdn.net/qq_41453285/article/details/103501272一、Bitmaps数据结构模型概述二、命令下面演示案例中将每个独立用户是否访问过网站存放在Bitmaps中,将访问的用户记做1,没有访问的用户记做0,用偏移量作为用户的id三、Bitmaps分析...原创 2020-05-12 10:13:40 · 1760 阅读 · 0 评论 -
Redis(开发与运维):23---常用功能之(HyperLogLog)
一、HyperLogLog概述HyperLogLog并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等 HyperLogLog提供了3个命令: pfadd、pfcount、pfmerge 例如,2016-03-06的访问用户是uuid-1、uuid-2、 uuid-3、uuid-4,2016-03-05的访问用户是uuid-4、uuid-5、uuid-6、uuid-7,如下图所示:原创 2020-05-12 14:39:59 · 409 阅读 · 0 评论 -
Redis(开发与运维):24---常用功能之(发布与订阅)
关于“发布与订阅”的设计与实现,还可以参阅: https://blog.csdn.net/qq_41453285/article/details/103464486 https://blog.csdn.net/qq_41453285/article/details/103464656 https://blog.csdn.net/qq_41453285/article/details/103464874 https://blog.csdn.net/qq_41453285/articl原创 2020-05-12 15:00:00 · 657 阅读 · 1 评论 -
Redis(开发与运维):25---常用功能之(GEO(地理信息定位))
一、CEO概述Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信 息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需 要实现这些功能的开发者来说是一大福音 GEO功能是Redis的另一位作者Matt Stancliff借鉴NoSQL数据库Ardb实现的,Ardb的作者来自中国,它提供了优秀的GEO功能二、增加地理位置信息(geoadd)geoadd key longitude latitude member [longitude latitude memb原创 2020-05-12 15:34:33 · 797 阅读 · 0 评论 -
Redis(开发与运维):42---Sentinel之(哨兵介绍、高可用性)
一、基本概念由于对Redis的许多概念都有不同的名词解释,所以在介绍Redis Sentinel之前,先对几个名词进行说明,这样便于在后面的介绍中达成一 致,如下图所示Redis Sentinel是Redis的高可用实现方案,在实际的生产环境中,对提高整个系统的高可用性是非常有帮助的二、主从复制的问题Redis的主从复制模式可以将主节点的数据改变同步给从节点,这样从节点就可以起到两个作用: 第一,作为主节点的一个备份,一旦主节点出了故障不可达的情况,从节点可以作为后备“顶”上来,并且保证原创 2020-05-27 12:22:44 · 664 阅读 · 0 评论 -
Redis(开发与运维):43---Sentinel之(哨兵的安装与部署、哨兵配置参数、部署技巧、哨兵API)
一、哨兵的安装与部署上一篇文章介绍了Redis Sentinel的基本架构,下面将介绍如何安装和部署Redis Sentinel 下面以3个Sentinel节点、1个主节点、2个从节点组成一个Redis Sentinel进行说明,拓扑结构如下图所示①部署主节点主节点的地址为127.0.0.1:6379。配置文件为/opt/redis/conf/redis-6379.conf,下面列出了部分选项值:port 6379daemonize yeslogfile原创 2020-05-27 15:24:35 · 1337 阅读 · 0 评论 -
Redis(开发与运维):44---Sentinel之(哨兵实现原理:三个定时监控任务、主观下线和客观下线、领导者节点选举、故障转移)
一、三个定时监控任务一套合理的监控机制是Sentinel节点判定节点不可达的重要保证,Redis Sentinel通过三个定时监控任务完成对各个节点发现和监控①每隔10秒每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构,如下图所示例如下面就是在一个主节点上执行info replication的结果片段:这个定时任务的作用具体可以表现在三个方面: 通过向主节点执行info命令,获取从节点的信息,这也是为什么 Sentinel节点不需要显式配置原创 2020-05-29 08:52:25 · 1177 阅读 · 1 评论 -
Redis(开发与运维):45---Sentinel之(开发与运维中的问题:故障转移日志、节点运维(节点下线/上线/配置)、高可用读写分离)
一、故障转移日志本次故障转移的分析使用下面的拓扑和配置进行说明:开始故障转移测试,模拟故障的方法有很多,比较典型的方法有以下几种: 方法一,强制杀掉对应节点的进程号,这样可以模拟出宕机的效果 方法二,使用Redis的debug sleep命令,让节点进入睡眠状态,这样可 以模拟阻塞的效果 方法三,使用Redis的shutdown命令,模拟正常的停掉Redis 本次我们使用方法一进行测试,因为从实际经验来看,数百上千台机器偶尔宕机一两台是会不定期出现的,为了方便分析日志行为,这里记原创 2020-05-29 09:58:49 · 886 阅读 · 0 评论