Redis的学习
文章平均质量分 81
林泽宇学习Redis
林林林ZEYU
坚持
展开
-
894-Redis 事务支持 ACID 么?
什么是事务的 ACID?事务(Transaction)是并发控制单位,一个操作序列组合而成,这些操作要么都执行,要么都不执行。「是一个不可分割的工作单位」。事务在执行时,会提供专门的属性保证:原子性(Atomicity):一个事务的多个操作必须完成,或者都不完成(ps:MySQL 的原子性靠什么实现呢?欢迎留言区评论);一致性(Consistency):事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后顺序都是合法数据状态。数据库的完整性约束包括但不限于:实体完整性(如行的主键存在且原创 2021-12-03 23:09:09 · 134 阅读 · 0 评论 -
843-CAP问题在Redis中怎么得到解决的?
CAP理论CAP理论是什么?可以这么说吧cap理论是分布式系统的奠基石吧,这个理论论述分布式系统设计的3个最大问题:一致性 (Consistency)可用性 (Availability)分区容错性 (Partition Tolerance)什么是一致性?假设一个集群有2个节点A-1和A-2,这两个节点为主从关系,例如redis里面的主从模式。主节点负责写入数据,从节点负责从主节点同步数据到本机。A-1和A-2 通过网络进行数据同步,要怎么保证两台机子上的数据一致的呢?这个就是数据一致性问题。原创 2021-11-20 13:01:38 · 2036 阅读 · 0 评论 -
842-Redis 常见问题:缓存雪崩、缓存击穿以及缓存穿透
缓存雪崩缓存雪崩是指大量的请求无法在缓存中处理,从而将请求转移到数据库中,导致数据压力倍增。一个Redis实例可以支持万级别的并发请求,而单个数据库只能支持千级别的并发请求。两者处理请求并发能力相差十倍,数据库会由于压力过大而导致雪崩。这里雪崩一般是由两个原因组成,很多文章只写缓存同时过期的情况。原因一:缓存中大量的数据同时过期一般设置缓存数据会设置缓存时间,在某一时刻,大量的缓存同时过期,此时如果有请求访问这些数据的话,缓存不存在,会将请求转移到数据库,如果这些的请求量比较大的,导致数据库的压力增原创 2021-11-20 12:58:43 · 130 阅读 · 0 评论 -
835-Redis6.0 新功能
ACLRedis ACL 是 Access Control List(访问控制列表)的缩写,该功能允许根据可 以执行的命令和可以访问的键来限制某些连接。在 Redis 5 版本之前,Redis 安全规则只有密码控制 还有通过 rename 来调整 高危命令比如 flushdb , KEYS* , shutdown 等。Redis 6 则提供 ACL 的功能对用户 进行更细粒度的权限控制 :(1)接入权限:用户名和密码 (2)可以执行的命令 (3)可以操作的 KEY参考官网:https://redis原创 2021-11-18 14:14:22 · 371 阅读 · 0 评论 -
834-Redis 分布式锁
Redis 分布式锁随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于 分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发 控制锁策略失效,单纯的 Java API 并不能提供分布式锁的能力。为了解决这个问题就 需要一种跨 JVM 的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题!分布式锁主流的实现方案:基于数据库实现分布式锁基于缓存(Redis 等)基于 Zookeeper每一种分布式锁解决方案都有各自的优缺点:性能:redis 最高原创 2021-11-18 14:08:41 · 747 阅读 · 0 评论 -
833-Redis缓存穿透,缓存击穿,缓存雪崩
缓存穿透key 对应的数据在数据源并不存在,每次针对此 key 的请求从缓存获取不到,请求 都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户 id 获取用户信息, 不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。解决方案一个一定不存在缓存及查询不到的数据,由于缓存是不命中时被动写的,并且出 于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每 次请求都要到存储层去查询,失去了缓解决方案:(1) 对空值缓存:如果一个查询返回的数据为空(不管是数据是原创 2021-11-18 13:58:52 · 110 阅读 · 0 评论 -
832-Redis 集群
Redis 集群容量不够,redis 如何进行扩容? 并发写操作, redis 如何分摊?另外,主从模式,薪火相传模式,主机宕机,导致 ip 地址发生变化,应用程序中配置 需要修改对应的主机地址、端口等信息。之前通过代理主机来解决,但是 redis3.0 中提供了解决方案。就是无中心化集群配置。什么是集群?Redis 集群实现了对 Redis 的水平扩容,即启动 N 个 redis 节点,将整个数据库分布存 储在这 N 个节点中,每个节点存储总数据的 1/N。Redis 集群通过分区(parti原创 2021-11-18 13:53:41 · 97 阅读 · 0 评论 -
831-Redis主从复制
Redis主从复制主机数据更新后根据配置和策略, 自动同步到备机的 master/slaver 机制,Master 以 写为主,Slave 以读为主读写分离,性能扩展容灾快速恢复怎么玩:主从复制?拷贝多个 redis.conf 文件 include(写绝对路径)开启 daemonize yesPid 文件名字 pidfile指定端口 portLog 文件名字dump.rdb 名字dbfilename Appendonly 关掉或者换名字新建 redis6379.conf,填写以下内原创 2021-11-18 13:43:57 · 90 阅读 · 0 评论 -
830-Redis 持久化之 AOF
Redis 持久化之 AOFAOF(Append Only File)以日志的形式来记录每个写操作(增量保存),将 Redis 执行过的所有写指令记录下 来(读操作不记录), 只许追加文件但不可以改写文件,redis 启动之初会读取该文件重 新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一 次以完成数据的恢复工作AOF 持久化流程(1)客户端的请求写命令会被 append 追加到 AOF 缓冲区内;(2)AOF 缓冲区根据 AOF 持久化策略[always,eve原创 2021-11-18 13:28:23 · 261 阅读 · 0 评论 -
829-Redis 持久化之 RDB
Redis 持久化之 RDB总体介绍官网介绍:http://www.redis.ioRedis 提供了 2 个不同形式的持久化方式。 RDB(Redis DataBase) AOF(Append Of File). RDB(Redis DataBase)官网介绍RDB是在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的 Snapshot 快 照,它恢复时是将快照文件直接读到内存里。备份是如何执行的Redis 会单独创建(fork)一个子进程来进行持久化,会先将数据原创 2021-11-18 12:47:11 · 270 阅读 · 0 评论 -
828-Redis事务(模拟秒杀系统)
解决计数器和人员记录的事务操作总共2件事情:商品库存-1,秒杀成功者加到清单中Redis 事务–秒杀并发模拟使用工具 ab 模拟测试CentOS6 默认安装CentOS7 需要手动安装联网:yum install httpd-tools无网络(1) 进入 cd /run/media/root/CentOS 7 x86_64/Packages(路径跟 centos6 不同)(2) 顺序安装apr-1.4.8-3.el7.x86_64.rpmapr-util-1.5.2-6.el7.x8原创 2021-11-18 11:39:19 · 2947 阅读 · 0 评论 -
827-Redis的事务冲突问题(悲观锁,乐观锁)
Redis的事务冲突问题例子:比如说,3个人有你的账户:你有10000元一个人请求想给金额减 8000一个人请求想给金额减 5000一个人请求想给金额减 1000悲观锁悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会 block阻塞 直到它拿到锁。缺点是效率低,比如说,很多人操作,现在只能一个人一个人进行操作。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读原创 2021-11-18 10:43:23 · 225 阅读 · 0 评论 -
826-Redis的事务
Redis 的事务定义Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis 事务的主要作用就是串联多个命令,防止别的命令插队。Multi、Exec、discard从输入 Multi 命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入 Exec 后,Redis 会将之前的命令队列中的命令依次执行。组队的过程中可以通过 discard 来放弃组队。示例2:事务的错误处理组队原创 2021-11-18 10:15:42 · 181 阅读 · 0 评论 -
825-Redis 新数据类型(HyperLogLog,Geospatial)
HyperLogLog简介在工作当中,我们经常会遇到与统计相关的功能需求,比如统计网站 PV (PageView 页面访问量),可以使用 Redis 的 incr、incrby 轻松实现。但像 UV(UniqueVisitor,独立访客)、独立 IP 数、搜索记录数等需要去重 和 计数的问题如何解决?这种求集合中不重复元素个数的问题称为基数问题。解决基数问题有很多种方案:(1)数据存储在 MySQL 表中,使用 distinct count 计算不重复个数(2)使用 Redis 提供的 hash原创 2021-11-17 19:47:26 · 281 阅读 · 0 评论 -
824-Redis 新数据类型(Bitmaps)
Bitmaps简介现代计算机用二进制(位) 作为信息的基础单位, 1 个字节等于 8 位, 例如“abc” 字符串是由 3 个字节组成, 但实际在计算机存储时将其用二进制表示, “abc”分别 对应的 ASCII 码分别是 97、 98、 99, 对应的二进制分别是 01100001、 01100010 和 01100011,如下图合理地使用操作位能够有效地提高内存使用率和开发效率。Redis 提供了 Bitmaps 这个“数据类型”可以实现对位的操作:(1) Bitmaps 本身不是一种数据类原创 2021-11-17 19:22:32 · 100 阅读 · 0 评论 -
823-Redis 的发布和订阅
Redis 的发布和订阅什么是发布和订阅?Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道Redis 的发布和订阅1、客户端可以订阅频道如下图2、当给这个频道发布消息后,消息就会发送给订阅的客户端发布订阅的命令行实现1、打开一个客户端订阅 channel1SUBSCRIBE channel12、打开另一个客户端,给 channel1 发布消息 hellopublish原创 2021-11-17 19:10:36 · 91 阅读 · 0 评论 -
822-Redis 配置文件介绍
Redis 配置文件介绍自定义目录:/myredis/redis.confUnits 单位配置大小单位,开头定义了一些基本的度量单位,只支持 bytes,不支持 bit大小写不敏感INCLUDES 包含类似 jsp 中的 include,多实例的情况可以把公用的配置文件提取出来网络相关配置bind默认情况 bind=127.0.0.1 只能接受本机的访问请求不写的情况下,无限制接受任何 ip 地址的访问生产环境肯定要写你应用服务器的地址;服务器是需要远程访问的,所以需要将其注释掉原创 2021-11-17 18:59:35 · 226 阅读 · 0 评论 -
819-Redis常用数据操作(哈希(Hash),有序Zset(sorted set))
Redis 哈希(Hash)简介Redis hash 是一个键值对集合。Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。类似 Java 里面的 Map<String,Object>用户 ID 为查找的 key,存储的 value 用户对象包含姓名,年龄,生日等信息,如果用 普通的 key/value 结构来存储 主要有以下2 种存储方式:存储方便,取值,该值更加方便。hset <key>&原创 2021-11-17 12:29:54 · 2127 阅读 · 0 评论 -
818-Redis常用数据操作(列表(List),集合(Set))
Redis 列表(List)单键多值Redis 列表是简单的字符串列表,按照插入顺序进行排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节 点性能会较差。常用命令lpush/rpush <key><value1><value2><value3> .... 从左边/右边插入一个或多个值。lpop/rpop <key>从左边/右边吐出一个值。值在键在,值原创 2021-11-17 11:48:53 · 1970 阅读 · 0 评论 -
817-Redis常用数据操作(键(key),字符串(String))
Redis 键(key)keys * 查看当前库所有 key (匹配:keys *1)exists key 判断某个 key 是否存在type key 查看你的 key 是什么类型del key 删除指定的 key 数据unlink key 根据 value 选择非阻塞删除,仅将 keys 从 keyspace 元数据中删除,真正的删除会在后续异步操作。expire key 10 10 秒钟:为给定的 key 设置过期时间ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期原创 2021-11-17 10:36:20 · 404 阅读 · 0 评论 -
815-Redis概述和安装步骤
Redis 概述 Redis 是一个开源的 key-value 存储系统。 和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string(字符串)、 list(链表)、set(集合)、zset(sorted set --有序集合)和 hash(哈希类型)。 这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作, 而且这些操作都是原子性的。 在此基础上,Redis 支持各种不同方式的排序。 与 memcached 一样,为原创 2021-11-16 20:05:09 · 300 阅读 · 0 评论 -
814-初步认识NoSQL数据库
技术发展技术的分类1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN2、解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis 3、解决性能的问题:NoSQL、Java 线程、Hadoop、Nginx、MQ、ElasticSearchWeb1.0 时代Web1.0 的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以 解决大部分问题。Web2.0 时代随着 Web2.0 的时代的到来,原创 2021-11-16 19:43:22 · 850 阅读 · 1 评论 -
672-Redis运行不稳定&还有哪些组件可用
除了Redis,还有哪些组件可用redis:主业是一个缓存数据库(存储key-value),性能非常好,响应快,低延时。还能实现分布式锁,还能实现发布-订阅功能,我们可以订阅上几个通道channel,然后有人在这个channel上发布消息,所有订阅这个channel的订阅者都可以接收到这个消息。redis还提供了数据持久化的功能,因为本质上数据是在缓存上存储的,为了提高可用性,就算出问题了,数据也是可以恢复的,因为数据是可以落盘的。服务器中间件:属于后端整个服务的组件之一,协助后端真真正正的业务服务器原创 2021-10-09 21:45:43 · 550 阅读 · 0 评论 -
271-Redis缓存穿透和雪崩
Redis缓存穿透和雪崩Redis缓存的使用,极大的提高了应用程序的性能和效率,特别是数据查询等。但同时,它也带来了一些问题。其中,最主要的问题就是数据一致性,从严格意义上来讲,这个问题是无解的。如果对数据一致性要求很高,那么就不能使用缓存。另外一个典型的问题就是:内存穿透,内存击穿和内存雪崩问题。目前,业界也都有比较流行的解决方案。缓存穿透 - 查不到概念缓存穿透的就是用户想要查询一个数据,发现Redis中没有,也就是缓存没有命中,于是向持久层数据库发起查询,发现也没有这个数据,于是本次查询失败原创 2021-04-14 21:23:53 · 160 阅读 · 0 评论 -
266-Redis的主从复制
Redis的主从复制概念主从复制:指的是将一个Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower)。 数据的复制是单向的 ,只能从主节点到从节点。Master以写为主,Slave以读为主。默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或者没有从节点),但一个从节点只能有一个主节点。主就是写,从就是读,从上的数据是主结点复制给从结点的。在网络应用中,读是比较多的,从结点多。高可原创 2021-04-08 22:13:48 · 297 阅读 · 0 评论 -
265-Redis的发布订阅
Redis发布订阅Redis发布订阅(pub/sub)是一种 消息通信模式 :发布者(pub)发送消息,订阅者(sub)接受消息。应用: 微信、抖音等的关注系统!Redis客户端可以订阅任意数量的频道。我们先来了解一下消息队列中间件Redis发布/订阅模型发布/订阅消息图:下图展示了频道channel1,以及订阅这个频道的三个客户端 – client2 client5和client1之间的关系:当有新消息通过PUBLISH命令发送给频道channel1时,这个消息就会被发送给订阅原创 2021-04-08 21:51:45 · 118 阅读 · 0 评论 -
264-Redis的持久化
Redis的持久化Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化的功能。RDB (Redis DataBase)在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存中。(类似是把数据做一个副本保存下去)Redis会单独创建(fork)一个子进程来进程持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上一次持久化好的文原创 2021-04-08 21:18:58 · 123 阅读 · 0 评论 -
255-redis.conf的解析
redis.conf详解启动的时候,就通过配置文件来启动!单位配置文件unit单位是对大小写不敏感包含可以去包含其他的config,组成一个。网络通用GENERAL快照持久化,在规定时间内,执行了多少次操作,则会持久化到文件 .rdb .aofrdb保存的是数据reids是内存数据库,如果没有持久化,数据断电即失REPLICATION 复制, 主从复制SECURITY 安全可以在这里设置redis的密码,默认是没有密码的CLENTS 限制APPEND ONLY原创 2021-03-31 22:21:41 · 117 阅读 · 0 评论 -
254-Redis(关于hiredis)
hiredishiredis是Redis官方推荐的基于C接口的客户端组件,它提供接口,供c语言调用以操作数据库。安装hiredis进入Redis的源码包的deps/hiredismakemake installldconfig #使动态库在系统中更新生效接口介绍C程序操作Redis代码执行结果如下:Redis中的数据如下:我的示例编译运行先不运行,先去查看一下Redis此时Redis是空的,我们再运行程序我们再打开Redis...原创 2021-03-31 22:12:24 · 251 阅读 · 0 评论 -
253-Redis(事务机制和乐观锁)
事务(事物机制和乐观锁)事务的本质: 一组命令的集合! 一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行!一次性,顺序性,排他性,执行一系列的命令!MySQL中的事务,要么同时成功,要么同时失败,必须保证原子性!Redis单条命令是保证原子性的,但是Redis的事务不保证原子性!(事物里的命令单条命令是原子性,但是整个事物有很多命令,不能保证整个事物的原子性)Redis事务是没有隔离级别的概念Redis的事务机制Redis的事务使用过程:开启事务 – multi命令入队原创 2021-03-31 21:49:37 · 133 阅读 · 0 评论 -
244-Redis的三种特殊类型
geospatial 地理空间可以用来实现朋友的定位,附近的人,打车距离计算等城市的经度纬度查询: http://www.jsons.cn/lngcode/只有六个命令geoadd添加地理位置,格式:geoadd key 纬度 经度 名称geopos返回给定名称的纬度和经度geodist返回两个给定位置之间的距离单位:m 米km 千米mi 英里ft 英尺geohash返回一个11个字符的geohash字符串georadius以给定的纬度经度为中心,找到某一半径内原创 2021-03-24 23:07:03 · 129 阅读 · 0 评论 -
243-Redis(list,set,hash,zset)
列表(list)底层 是双向循环链表在Redis中,我们可以把list完成栈、队列、阻塞队列所有的list命令都是用 l 开头的lpush rpush lrange从list的左边或者右边插入值,格式: lpush(从左边) key value rpush(从右边) key valuelrange获取指定范围的值,格式: lrange key start stoplpop rpop从列表的左边或者右边移除值,格式: lpop key rpop keylindex获取指定原创 2021-03-24 22:50:21 · 163 阅读 · 0 评论 -
231-Redis(区别和string操作)
四种分类的比较Redis概念区别Redis的基本操作首先先运行服务器端和客户端Redis默认有16个数据库,默认使用的是第0个数据库,可以通过select切换数据库。Redis的命令对大小写不敏感select切换数据库,格式: select indexdasize查看数据的大小, 格式: dbsizekeys查看所有的key,格式: keysflushdb flushall清空当前数据库和清空所有的数据库Redis是单线程的从系统上看是多线程,本身是原创 2021-03-17 23:04:20 · 201 阅读 · 0 评论 -
228-初步认识Redis
什么是Redis?计算机存储数据的介质有:寄存器,高速缓存,内存,磁盘外存这里的磁盘持久化:Redis是基于内存的数据库,又提供了磁盘持久化,这是和memcached最大的区别,memcached是纯内存的,我们的电脑关机,断电或者关掉memcached,再重启打开,这些数据不在了,因为是在内存存储着,内存的数据只有在计算机运行的过程中才有,关机了,数据就没了。但是Redis支持持久化!而且是自动去完成磁盘持久化的。关机断电,重启,之前的数据还可以找回来,丢失的数据量很小。哨兵模式,自动分区:组存复原创 2021-03-15 22:29:12 · 275 阅读 · 4 评论