- 博客(99)
- 收藏
- 关注
原创 基于redis实现点赞相关功能
1.实现基础的点赞功能(当用户进行点赞判断是否已经点赞,若点赞则取消若未点赞则点赞)实现方式:在redis中存入一个set集合每当一个用户进行点赞则将改用户id存入key为他所点赞的帖子的id+标志字符,每次点赞前进行判断该set集合中是否存在,若存在则取消赞,并删除set中的用户id,不存在则添加赞并添加用户id到set集合中代码添加点赞排行功能(显示点赞的前几名)set集合不支持排序,所以需要将set集合更改为sortedSet
2023-06-07 13:02:21
975
原创 基于redis实现消息队列(更推荐使用专业的mq)
——lpush存放队列(lpush 队列名 队列内容(可一次存放多个内容,用空格隔开)) brpop取队列(brpop 队列名 等待时间单位秒(一次取一个))个人感觉:mq>stream>list>pubsub。基于pubsub实现消息队列(发布订阅模型)利用redis实现消息队列(基于stream的消息队列。修改java代码实现发送消息。基于list,点对点模型。案例,更改之前的案例。
2023-06-05 14:46:07
827
原创 redis优惠卷秒杀-------优化
优化流程(1:库存不足,2:用户已经下单,无法重复下单确保一人一单,0:有下单资格)1.修改添加优惠卷业务,在添加优惠卷到数据库的同时添加到redis中。因为时串行执行且多次调用数据库,所以效率较慢,所以引入队列概念。2.编写lua脚本,实现秒杀库存,一人一单,决定抢购是否成功。
2023-06-05 12:05:51
109
原创 基于秒杀-----分布式锁----lua脚本
现阶段存在问题:当线程阻塞时间超过setnx的自动过期时间时可能导致一人多单和setnx的key误删情况。3.修改业务类(仅进行注入了RedissonClient 和创建锁对象和trylock的参数)解决方法:使用redis的框架redisson实现分布式锁。需要优化的问题:不可重入,不可重试,超时释放,主从一致。:多进程可见,互斥,高可用,高性能,安全性。解决方法:让判断锁标识与释放锁保持原子性。测试结果:实现了多个服务器下的一人一单。1.创建获取锁删除锁的工具类。redis分布式锁的优化。
2023-05-29 21:33:58
1275
原创 商品显示秒杀-一人一单业务
如果报错可将代理注解关闭将serviceImpl中的内容更改为(作者的事务依旧可以实现,原理暂时未知,如有知道的大神希望可以告诉一声)出现问题:依旧为超卖问题,因为为新增操作,所以无法进行添加乐观锁,进行添加悲观锁。到目前依旧有问题——在集群模式下依旧存在并发问题,依旧存在一人多单问题。3.修改后代码(需要在service中添加方法-自行添加即可)解决方法------分布式锁。2.在启动类上添加注解。
2023-05-26 22:22:07
130
原创 redis优惠卷秒杀
改进方法不在进行判断数量是否与开始查询到的数量一致,改进行判断数量是否大于0。改进后发现成功率大幅下降预期成功率在0.5实际成功率0.2(乐观锁的弊端)引入概念乐观锁悲观锁,悲观锁为强制所有线程串行执行,会导致效率低下。出现的问题,多线程并发冲突,会导致多卖。测试(与预期结果一致)
2023-05-26 20:41:19
211
原创 基于redis实现session的登录功能
创建一个新的拦截器,拦截一切路径,并此拦截器只进行刷新redis时间后直接放行,需要验证是否登陆的功能放在原拦截器中实现。因为拦截器为交给spring管理,所以需要在mvc的拦截器中进行注入StringRedisTemplate。拦截器只拦截了需要访问的功能,当用户访问不需要登录的功能时redis依旧会过期。拦截所有请求的拦截器(刷新token的拦截器)在拦截器中实现redis的时间刷新。拦截需要登录的拦截器。
2023-05-22 21:17:12
357
原创 Redis-spring data
Bean//创建redistemplate对象//设置连接工厂//常见json序列化工具//设置key的序列化//设置value的序列化//返回记得引入json依赖注入参数时需要指定数据类型。
2023-05-21 20:49:36
142
原创 初始Redis
链接:https://pan.baidu.com/s/1aLkOBakXa3LfzT2517G4Hw。(1)将配置文件进行备份(配置文件在/usr/local/src/redis-6.2.6。(2.)安装依赖(redis是基于c语言开发的,所以需要先安装依赖)(3.)上传安装包到usr/local/src下并进行解压。1.默认启动(前台启动):redis-server。(4.)进入redis解压后的目录并进行编译。(只有源码需要自行编译,或者订阅作者的付费)默认的安装路径是usr/local/bin。
2023-05-21 13:34:20
582
原创 git常用命令
上传到远程仓库:git push 远程仓库别名(可用git remote查看) 分支(一般远程仓库只有master一个分支,其他分支需要自行创建)拉取远程仓库中的内容:git pull --rebase 远程仓库别名 分支。提交到本地仓库:git commit -m ”注释信息“ 文件名支持通配符。2.从远程仓库克隆(我使用的gitee,可直接在仓库中复制地址)提交到暂存区:git add 文件名(支持通配符)注:在执行命令后需要输入远程仓库的账号密码。获得git仓库的两种方式。1.在本地初始化仓库。
2023-05-18 23:19:57
82
原创 mybatisplus公共字段自动注入
2.编写方法并继承MetaObjectHandler。4.在过滤器中使用封装的工具类将id传入线程中。3.基于ThreadLocal编写封装工具类。1.在字段上添加注释。
2023-05-11 18:24:33
286
原创 MQ集群(rabbitMQ)
同步策略,默认是manual,即新加入的镜像节点不会同步旧的消息。如果设置为automatic,则新加入的镜像节点会把主节点中所有消息都同步,会带来额外的网络开销。:匹配队列的正则表达式,符合命名规则的队列才生效,这里是任何以。:匹配队列的正则表达式,符合命名规则的队列才生效,这里是任何以。:策略模式,此处是all模式,即所有节点都会称为镜像节点。接下来,停止并删除当前的mq容器,我们重新搭建集群。:策略模式,此处是exactly模式,指定副本数量。:策略参数,这里是2,就是副本数量为2,1主1镜像。
2023-04-25 17:18:59
543
原创 rabbitmq的高级特性
3.编写ComfirmCallback。使用命令查看rabbitmq的挂载地址。2.编写returnCallback。使用java代码实现创建延迟队列。延迟时间由发送信息的时候设定。将下载的插件放在插件所在位置。防止延迟队列被当成错误解决。将一个普通对列变为惰性队列。1.在项目中添加配置。
2023-04-25 16:07:23
536
原创 分布式多级缓存
指定对哪个database记录binary log events,这里记录heima这个库。:设置binary log文件的存放地址和文件名,叫做mysql-bin。:数据库地址和端口,如果不知道mysql容器地址,可以通过。(2)在MySQL中创建一个新用户以用来数据同步。2.创建docker网络并让mysql加入。(3)重启docker的mysql容器。3.在docker导入canal镜像。(1)修改mysql的配置文件。:这是canal的默认监听端口。1.开启mysql的主从同步。
2023-04-22 16:45:50
462
原创 【无标题】
Redis5.0之前集群命令都是用redis安装包下的src/redis-trib.rb来实现的。因为redis-trib.rb是有ruby语言编写的所以需要安装ruby环境。注意集群模式中进入redis一定要加上-c参数,例:redis-cli -c -p 7001。1.删除原本的7001 7002 7003目录,以防产生干扰,并创建新的目录。启动命令:redis-server redis.conf。2.在tmp目录中创建配置文件redis.conf。2.将之前的redis的aof关闭rdb开启。
2023-04-20 22:46:23
340
原创 分布式事务
c:consistency(一致性)A:availability(可用性)P:oartition tolerance(分区容错性)4.在业务的实现类的方法上添加注解@GlobalTransactional。cap定理:分布式系统无法同时满足cap(一般为cp或者ap)在nacos中若能找到此列表则代表启动成功。1.在seata的数据库中添加全局锁表。3.将配置中的方式更改为at(默认)1.创建数据库(冻结表)2.在项目库中添加快照表。2.编写接口和实现类。
2023-04-19 23:13:52
453
原创 sentiel安装与整合
常见异常重写方法@Component@OverrideString msg = "未知异常";msg = "请求被限流了";msg = "请求被热点参数限流";msg = "请求被降级了";msg = "没有权限访问";查看结果。
2023-04-18 21:42:03
349
原创 搭建es集群
单点es的缺点:1.存储数据有限;2.单点故障问题(es出现故障则整个服务会直接宕机)解决存储数据有限:搭建多台es服务器实现集群解决单点故障:在不同的es服务器中进行备份数据(例:在第二台服务器中备份第一台的数据)
2023-04-17 21:23:53
533
原创 es与mysql的数据同步问题
3.当一个业务出现问题则直接卡死。5.在发送消息的一方引入依赖和yaml中的配置。方案二:异步通知(解除了两个服务之间的耦合)方案三:监听MySQL的binlog日志。4.编写配置类创建队列与交换机并绑定。7.在接收一方编写监听器。重启服务即可实现数据同步。缺点:比较依赖与mq。6.修改发送一方的业务。
2023-04-17 20:01:27
213
原创 实现es搜索栏自动补全功能
1.下载拼音分词器将文件下载后解压,放到es的目录下(与ik分词器放在同一目录下)重启es即可2.测试:会将文本的每一个拼音进行分词及所有的拼音首字母进行分词2.自定义分词器(必须在创建索引库时创建)3.实现自动补全功能(1)实现自动补全的字段必须是completion类型的。
2023-04-17 13:41:16
350
原创 java利用RestClient进行dsl的查询
3.精确查询(term词条精准查询,range范围精准查询)与matchall查询有区别的地方为第二步的准备dsl。与上方一致只有2.准备dsl发生变化。2.match条件查询。
2023-04-16 14:31:54
287
原创 dsl语法
注:es支持的最大查询条数为10000条,如:初始条数为9991,每页10条将会报错,所以es不支持深度分页。2.match查询(条件查询)-----包含四川和外滩的信息,信息匹配度越高越靠前,两者存在一个也可以。6.经纬度查询(地理位置查询)distance查询。5.range查询(精准查询范围值一般用于价格)7.人工干预查询到的文档的权重(干预文档排序)注:一旦进行排序则不会进行打分机制,以提高速度。3.multi_match查询,多条件查询。1.查询所有(默认有分页查询)4.term查询(精准查询)
2023-04-13 22:08:09
858
原创 shingcloud整合es(黑马案例)
链接:https://pan.baidu.com/s/1RVgsD15Sdmbvmw5bEt9zQw。注:dsl语句:GET /hotel/_search 批量查询。8.查询索引库(如果索引库不存在会报错)1.将数据库文件上传到而es上。9.判断索引库是否存在。全局更新与新增文档一致。4.在项目中引入依赖。
2023-04-07 22:40:04
1907
原创 ik分词器的拓展
例:(每一行为一个词,如果在拓展字典中则是新增词汇,如果在删除字典中,则代表此词不参与分词)注意在IkAnalyzer.xml的同级目录下创建自己的文件并进行编辑。
2023-04-05 19:47:08
81
原创 centos7在docker上安装es(elasticsearch)
链接:https://pan.baidu.com/s/1eTdUKBY6U9-evh7mrSqmJA。链接:https://pan.baidu.com/s/1eTdUKBY6U9-evh7mrSqmJA。1.将kibana的tar文件拉取到虚拟机中(因为es文件较大,不建议直接使用docker进行拉取)2.将es的tar文件拉取到虚拟机中(因为es文件较大,不建议直接使用docker进行拉取)(2)将ik分词器进行解压并放到所查看的目录中。1.在线安装(不推荐,较慢)(1)查看数据卷目录。
2023-04-04 22:59:16
721
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人