(目录) 1、背景 有时候,我们需要一次性操作多个 Redis 命令,但是 这样的多个操作不具备原子性,而且 Redis 的事务也不够强大,不支持事务的回滚,还无法实现命令之间的逻辑关系计算。所以,一般在开发中,我们会利用 lua 脚本来实现 Redis 的事务。 2、lua 脚本 Redis 中使用 lua 脚本,我们需要注意的是,从 Redis 2.6.0后才支持 lua 脚本的执行。 使
@TOC(目录)用户签到1、用户签到BitMap功能演示我们针对签到功能完全可以通过mysql来完成,比如说以下这张表!1653823145495(https://s2.51cto.com/images/blog/202209/21113754_632a87128eb9557781.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5
@TOC(目录)附近商户1、附近商户GEO数据结构的基本用法GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有:GEOADD:添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member)GEODIST:计算指定的两个点之间的距离并返回GEOH
@TOC(目录)好友关注1.好友关注关注和取消关注针对用户的操作:可以对用户进行关注和取消关注功能。!1653806140822(https://s2.51cto.com/images/blog/202209/20102244_632923f4b285914694.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color
@TOC(目录)帖子相关功能1.发布笔记发布帖子探店笔记类似点评网站的评价,往往是图文结合。对应的表有两个:tb_blog:探店笔记表,包含笔记中的标题、文字、图片等tb_blog_comments:其他用户对探店笔记的评价具体发布流程!1653578992639(https://s2.51cto.com/images/blog/202209/20093744_63291968bcde591380
@TOC(目录)上一篇博文部分:秒杀优化——基于阻塞队实现异步秒杀优化及基于Lua脚本判断秒杀库存、一人一单(https://blog.51cto.com/panyujie/5687709)Redis消息队列1、Redis消息队列认识消息队列什么是消息队列?字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色:消息队列:存储和管理消息,也被称为消息代理(MessageBroker)生产者:
@TOC(目录)秒杀优化1、秒杀优化异步秒杀思路回顾一下下单流程:当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作分成如下几个步骤:1、查询优惠卷2、判断秒杀库存是否足够3、查询订单4、校验是否是一人一单5、扣减库存6、创建订单在这六步操作中,又有很多操作是要去操作数据库的,而且还是一个线程串行执行,这样就会导致我们的程序执行的很慢,所以
@TOC(目录)分布式锁redission1、redission功能介绍基于setnx实现的分布式锁存在下面的问题:1.不可重入:同一个线程无法多次获得同一把锁,重入问题是指获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死
@TOC(目录)上一篇博文部分:优惠卷秒杀系统设计(https://blog.51cto.com/panyujie/5679549)1.优惠卷秒杀使用Redis的计数器功能,结合Lua完成高性能的redis操作,学会Redis分布式锁的原理,包括Redis的三种消息队列分布式锁1、基本原理和实现方式对比分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想就是:让大家都使用
@TOC(目录)封装Redis工具类(巨干,注意食用)基于StringRedisTemplate封装一个缓存工具类,满足下列需求:方法1:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置TTL过期时间方法2:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置逻辑过期时间,用于处理缓存击穿问题方法3:根据指定的key查询缓存,并反序列
@TOC(目录)1、缓存穿透问题的解决思路缓存穿透:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。常见的解决方案有两种:1.缓存空对象优点:实现简单,维护方便缺点:额外的内存消耗可能造成短期的不一致2.布隆过滤优点:内存占用较少,没有多余key缺点:实现复杂存在误判可能!image20220803153359146(https://s2.51
@TOC(目录)实现这个方案:商户查询缓存理解缓存击穿,缓存穿透,缓存雪崩等问题,对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容商户查询缓存1.什么是缓存(Cache)?前言:什么是缓存?就像自行车,越野车的避震器举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样;同样,实际开发中,系统也需要"避
TOC短信登录功能实现1.短信登录这一块使用redis共享session来实现1、准备工作1.1导入数据库SQL:https://gitee.com/pyj646836760/redisdata/blob/master/hmdp.sql!image20220909121604732(https://s2.51cto.com/images/blog/202209/09132320_631acdc89
@TOC(目录)1.Redis的Java客户端在Redis官网中提供了各种语言的客户端,地址:https://redis.io/docs/clients/!(https://cdn.jsdelivr.net/gh/PanYuJie/cloudimages/data/9f68ivq.png)其中Java客户端也包含很多:!image20220801204231512(https://s2.51cto
@TOC(目录)Redis常见命令Redis是典型的keyvalue数据库:key一般是字符串,而value包含很多不同的数据类型:!(https://s2.51cto.com/images/blog/202209/07230846_6318b3fe9b39575089.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,co
@TOC(目录)1.初识RedisRedis是一种键值型的NoSql数据库,这里有两个关键字:键值型NoSql其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json:!image20220502190959608(https://cdn.jsdelivr.net/gh/PanYuJie/cloudimages/dat
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号