Redis
文章平均质量分 92
喵先森爱吃鱼
这个作者很懒,什么都没留下…
展开
-
Redis 事务
先放一个大佬的文章:聊一聊Redis事务 一、什么是Redis 事务可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序串行化执行,而不会被其他命令插入。二、事务可以用来做什么一个队列中,可以一次性、顺序性、排他性的执行一系列命令。三、如何使用可以通过 MULTI 命令来开启一个 Redis 事务,该命令在执行后总会返回 OK。在执行该命令之后,用户便可以发布多条 Redis 命令。Redis 并不会立即执行这些命令,而是将它们放入到一个队列中。所有的命令将会在调用原创 2022-05-18 23:39:49 · 350 阅读 · 0 评论 -
分布式缓存-Redis分片集群
一、分片集群结构主从和哨兵可以解决高可用、高并发读的问题,但是依然有两个问题没有解决:海量数据存储问题高并发写的问题使用分片集群可以解决上述问题,分片集群特征:集群中有多个 master,每个 master 保存不同数据(可解决高并发写的问题)每个 master 都可以有多个 slave 节点(解决高并发读的问题)master 之间通过 ping 监测彼此健康状态(类似于哨兵机制)客户端请求可以访问集群任意节点,最终都会被转发到正确节点二、搭建分片集群2.1 集群结构分片集群原创 2022-05-17 21:42:36 · 1081 阅读 · 0 评论 -
分布式缓存-Redis 哨兵
一、哨兵的作用和工作原理1.1 哨兵的结构和作用Redis 提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:监控: Sentinel 会不断检查您的 master 和 slave 是否按预期工作自动故障恢复: 如果 master 故障,Sentinel 会将一个 slave 提升为 master。当故障实例恢复后也以新的 master 为主。通知: Sentinel 充当 Redis 客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给 Redi原创 2022-05-17 09:04:50 · 373 阅读 · 0 评论 -
分布式缓存-Redis 主从
一、搭建主从架构单节点 Redis 的并发能力是有上限的,要进一步提高 Redis 的并发能力,就需要搭建主从集群,实现读写分离。在 Redis 应用当中,大多数情况下,都是读多写少,因此,更多情况下,需要应对的是读的压力,那么在主从的基础上可进一步实现读写分离:在执行写操作时,访问 master 节点,如果是读操作,那么就分发到 slave 节点。这种一主多从的集群设计,可让多个从节点共同承担读的请求,从而使得读的并发能力就会有极大地提升。...原创 2022-05-15 23:11:46 · 482 阅读 · 0 评论 -
分布式缓存-Redis 持久化
一、单点 Redis 的问题数据丢失问题。Redis 是内存存储,一旦服务宕机重启,数据就有可能会丢失。并发能力问题。单节点的 Redis 并发能力虽然不错,但也无法满足如 618、双 11 这样的高并发场景。故障恢复问题。如果 Redis 宕机,则服务不可用,需要一种自动的故障恢复手段。存储能力问题。Redis 是基于内存存储,但是内存存储是有上限的,而需要被缓存的数据会越来越多,那么单节点的 Redis 则难以满足海量数据的需求。解决方案:二、RDB 持久化RDB 全称 Redis D原创 2022-05-15 18:43:21 · 514 阅读 · 0 评论 -
黑马点评项目-UV 统计
一、HyperLogLog 用法UV:全称 Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人、1 天内同一个用户多次访问该网站,只记录 1 次。PV:全称 Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录一次 PV,用户多次打开页面,则记录多次 PV。往往用来衡量网站的流量。UV 统计在服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。但是如果每个访问的用户都保存到Redis 中,数据量会非常恐怖。原创 2022-05-12 21:55:48 · 1381 阅读 · 0 评论 -
黑马点评项目-用户签到
一、BitMap 的用法假如我们用一张表来存储用户签到信息,其结构应该改如下:假如有 1000 万个用户,平均每人每年签到次数为 10 次,则这张表一年的数据量为 1 亿条。每签到一次需要使用(8 + 8 + 1 + 1 + 3 + 1)共 22 字节的内存,一个月则最多需要 600 多字节。显然,这种方式不合适。改进方案:我们按月来统计用户签到信息,签到记录为 1,未签到则记录 0将每一个 bit 位对应当月的每一天,形成了映射关系。用 0 和 1 表示业务状态,这种思路就成为位图(BItM原创 2022-05-11 23:26:42 · 747 阅读 · 2 评论 -
黑马点评项目-附近商铺
一、GEO 数据结构的基本用法1.1 GEO 数据结构GEO 就是 Geolocation 的简写形式,代表地理坐标。Redis 在 3.2 版本中加入了对 GEO 的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有:GEOADD:添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member)GEODIST:计算指定的两个点之间的距离并返回GEOHASH:将指定 member 的坐标转为 hash 字符串形式并返回GEOPOS:返回指定原创 2022-05-11 09:27:52 · 743 阅读 · 0 评论 -
黑马点评项目-好友关注
一、关注和取关在探店图文的详情页中,可以关注发布笔记的作者:需求:基于该表数据结构,实现两个接口:① 关注和取关接口② 判断是否关注的接口关注是 User 之间的关系,是博主与粉丝的关系,数据库中有一张 tb_follow 表来标识:注意:这里需要把主键修改为自增长FollowController@RestController@RequestMapping("/follow")public class FollowController { @Autowired p原创 2022-05-09 20:57:37 · 1129 阅读 · 0 评论 -
黑马点评项目-达人探店
一、发布探店笔记探店笔记类似点评网站的评价,往往是图文结合。对应的表有两个:tb_blog:探店笔记表,包含笔记中标题、文字、图片等tb_blog_comments:其他用户对探店笔记的评价修改文件上传路径:...原创 2022-05-05 20:42:43 · 5835 阅读 · 13 评论 -
黑马点评项目-Redis 消息队列
一、消息队列简介消息队列(Message Queue),字面意思就是存放消息的队列。最简单的消息队列模型包括 3 个角色:消息队列:存储和管理消息,也被称为消息代理(Message Broker)生产者:发送消息到消息队列消费者:从消息队列获取消息并处理消息消息队列和阻塞队列的区别:① 消息队列是在 JVM 以外的独立服务,所以不受 JVM 内存的限制② 消息队列不仅仅做数据存储,还需要确保数据安全,存入到消息队列中的所有消息都需要做持久化,这样不管是服务宕机还是重启,数据都不会丢失。而且原创 2022-05-03 17:07:25 · 2384 阅读 · 2 评论 -
黑马点评项目-秒杀优化
一、异步秒杀思路来看下之前的秒杀业务的整体流程:前端发起请求到达 Nginx,Nginx 通过负载均衡,将请求转发至 Tomcat。在 Tomcat 中,程序的执行流程如上图所示,整个业务流程串行执行,所以,整个业务的耗时时间就是每一步的耗时之和。但是,在整个业务流程中,其中,查询优惠券、查询订单、减库存以及创建订单这四步都需要与数据库建立连接,执行相关的增删改查操作。由于数据库本身的并发能力是比较差的,再加上减库存和创建订单还是对数据库的写操作,另外为了避免线程安全问题,在执行减库存以及创建订单逻辑原创 2022-05-03 10:27:45 · 3177 阅读 · 11 评论 -
黑马点评项目-分布式锁之 Redisson
一、基于 SETNX 实现的分布式锁存在的问题基于 SETNX 实现的分布式锁存在下面的问题:1、不可重入:同一个线程无法多次获取同一把锁2、不可重试:获取锁只尝试一次就返回 false,没有重试机制3、超时释放:锁超时释放虽然可以避免死锁,但如果是业务执行耗时较长,也会导致锁释放,存在安全隐患4、主从一致性:如果 Redis 提供了主从集群,主从同步存在延迟,此时某个线程从主节点中获取到了锁,但是尚未同步给从节点,而恰巧主节点在这个时候发生宕机。就会从从机中选择出一个节点成为新的主节点,那么其他原创 2022-05-01 23:44:18 · 2619 阅读 · 0 评论 -
黑马点评项目-优惠券秒杀
一、全局唯一ID1.1 知识点介绍每个店铺都可以发布优惠券,而每张优惠券都是唯一的。当用户抢购时,就会生成订单并保存到 tb_voucher_order 这张表中,而订单表如果使用数据库自增 ID 就存在一些问题:id 的规律太明显。如果 id 规律太明显,用户就能够根据 id 猜测出一些信息。比方说,某用户第一天下了一单,此时 id 为 10,第二天同一时刻,该用户又下了一单,此时 id 为 100,那么用户就能够推断出昨天一天店家卖出了 90 单,这就将一些信息暴露给用户。受单表数据量的限制。原创 2022-04-26 23:19:19 · 5867 阅读 · 8 评论 -
黑马点评项目-商户查询缓存
一、什么是缓存缓存就是数据交换的缓冲区,是存储数据的临时地方,一般读写性能较高。缓存的作用:降低后端负载。当用户进行请求时,先去查询缓存,查询到之后直接返回给用户,而不必查询数据库,大大降低了后端的压力。提高读写效率,降低响应时间。数据库的读写是磁盘读写,其响应时间一般比较长,而 Redis 是基于内存的,读写时间快。缓存的成本:一致性成本。当数据库中的数据发生了改变,而缓存中的数据还是旧的数据,当用户从缓存中读取数据时,获取到的依旧是旧的数据。代码维护成本。为了解决一致性成本,以及缓存原创 2022-04-17 22:31:46 · 1510 阅读 · 0 评论 -
黑马点评项目-短信登录功能
一、导入黑马点评项目1、代码下载视频资源链接:P25 实战篇-02.短信登录-导入黑马点评项目代码可以直接去黑马微信公众号上搜索,或者从下面的网盘链接中下载:链接:https://pan.baidu.com/s/1aWhWVn2Ai7AeuDm0KftSqw提取码: snuw2、SQL 脚本执行上面的链接中有一个 hmdp.sql 文件,注意在执行该 SQL 脚本的时候不要批量执行,会报错,最好是一条一条执行。3、前端 Nginx 搭建3.1 Mac OS 安装 Nginx我自己用的是原创 2022-04-16 17:47:18 · 7481 阅读 · 25 评论 -
Redis 的 Java 客户端
一、客户端对比客户端特点Jedis以 Redis 命令作为方法名称,学习成本低,简单实用。但是 Jedis 实例是线程不安全的,多线程环境下需要基于连接池来使用lettuceLettuce 是基于 Netty 实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持 Redis 的哨兵模式、集群模式和管道模式。redissonRedission 是一个基于 Redis 实现的分布式、可伸缩的 Java 数据结构集合,包含了诸如 Map、Queue、Lock、S原创 2022-04-10 23:24:54 · 2351 阅读 · 0 评论 -
Redis 的五种基本数据类型
一、String 类型1.1 介绍String 类型,也就是字符串类型,是 Redis 中最简单的存储类型。其 value 是字符串,不过根据字符串的格式不同,又可以分为 3 类:string:普通字符串int:整数类型,可以做自增、自减操作float:浮点类型,可以做自增、自减操作不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过 512M。keyvaluemsghello worldnum10score92原创 2022-04-08 00:17:49 · 12757 阅读 · 0 评论 -
初识 Redis
一、Redis 简介Redis 是一个速度非常快的非关系型数据库(non-relational database),它可以存储键(key)与 5 种不同类型的值(value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展性能。1.1 Redis 与其他数据库和软件对比Redis 不使用表,它的数据库也不会预定义或者强制去要求用户对 Redis 存储的不同数据进行关联。1.2 Redis 数据结构简介Redis 可以原创 2022-04-07 23:20:26 · 924 阅读 · 0 评论