自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 Redis高级篇之最佳实践

当字节数大于44字节时,会转为raw模式存储,在raw模式下,内存空间不是连续的,而是采用一个指针指向了另外一段内存空间,在这段空间里存储SDS内容,这样空间不连续,访问的时候性能也就会收到影响,还有可能产生内存碎片。scan 命令调用完后每次会返回2个元素,第一个是下一次迭代的光标,第一次光标会设置为0,当最后一次scan 返回的光标等于0时,表示整个scan遍历结束了,第二个返回的是List,一个匹配的key的数组。Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。

2023-12-05 17:15:46 77

原创 Redis多级缓存--缓存同步

大多数情况下,浏览器查询到的都是缓存数据,如果缓存数据与数据库数据存在较大差异,可能会产生比较严重的后果。所以我们必须保证数据库数据、缓存数据的一致性,这就是缓存与数据库的同步。

2023-12-05 16:25:18 99

原创 实现多级缓存

目录安装OpenRestyOpenResty快速入门反向代理流程 http请求到前端 前端页面发送ajax到后端OpenResty监听请求编写item.lua请求参数处理获取参数的API获取参数并返回查询Tomcat发送http请求的API封装http工具实现Tomcat查询基于ID负载均衡1)原理2)实现Redis缓存预热查询Redis缓存封装Redis工具实现Redis查询Nginx本地缓存本地缓存API实现本地缓存查询多级缓存的实现离不开Nginx编程,而Nginx编程又离不开OpenResty。Op

2023-12-03 21:52:26 65

原创 Lua语法入门

Nginx编程需要用到Lua语言,因此我们必须先入门Lua的基本语法。

2023-11-30 20:13:43 43

原创 Redis多级缓存

传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:存在下面的问题:•请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈(tomcat的性能并不是能负载大量的请求)•Redis缓存失效时,会对数据库产生冲击(当Redis集群恰恰都G了所有的数据都直接的对mysql发起请求)多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提升服务性能:浏览器访问静态资源时,优先读取浏览器本地缓存。

2023-11-30 11:19:27 30

原创 Caffeine jvm内存缓存

使用这个@Autowired@Autowired在编写查询业务的时候就可以实现先从缓存中查询 如果缓存没有 就去数据库中查询 然后把查询的结果保存到缓存中 当再次的请求这条数据直接走jvm缓存 而不是走数据库 大大提升了效率.one()

2023-11-30 11:15:02 72

原创 Redis分片集群

例如:key是num,那么就根据num计算,如果是{itcast}num,则根据itcast计算。利用cluster failover命令可以手动让集群中的某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移。将部分插槽分配到新插槽 (将num对应的插槽i的值转移到7004节点上 这样操作num 就到7004节点上了)数据key不是与节点绑定,而是与插槽绑定。但是,可以看到7004节点的插槽数量为0,因此没有任何数据可以存储到7004上。

2023-11-28 21:25:13 25

原创 Redis哨兵

sentinel给所有其它slave发送slaveof 192.168.150.101 7002 命令,让这些slave成为新master的从节点,开始从新的master上同步数据。最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点。如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高。sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master。

2023-11-28 16:28:45 22

原创 Redis主从

2.1.1:在执行RDB获取到RDB文件的时候会fork一个子线程 fork把物理内存设置为只读 这时候fork的过程中只要有读写操作都会操作物理内存的副本 直到fork结束 把物理内存的只读去掉然后把副本和物理内存整合 fork得到的子线程读取物理内存 得到一个RDB文件 所以这时候记录的是fork过程中的命令。因为slave原本也是一个master,有自己的replid和offset,当第一次变成slave,与master建立连接时,发送的replid和offset是自己的replid和offset。

2023-11-28 14:13:31 21

原创 Redis 高级篇 分布式缓存

因为是记录命令,AOF文件会比RDB文件大的多。在读的过程中如果写了一个数据就可能会出现脏数据 fork过程中会把内存的数据设置为只读的属性然后把数据复制一份副本 在fork中读和写的操作都操作这个副本 fork完成就把副本同步到物理内存然后去掉只读。这个在执行的过程中任何的请求都不会处理 当数据的量非常的多 执行save 这时候任何操作redis的请求都为false (分布式锁redission,登录,消息队列,GEO,等)Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。

2023-11-27 11:02:41 27

原创 Redis实战 UV统计

UV统计在服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。PV:全称Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录1次PV,用户多次打开页面,则记录多次PV。Hyperloglog(HLL)是从Loglog算法派生的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。通常来说UV会比PV大很多,所以衡量同一个网站的访问量,我们需要综合考虑很多因素,所以我们只是单纯的把这两个值作为一个参考值。作为代价,其测量结果是概率性的,

2023-11-24 20:24:36 26 1

原创 Redis实战 用户签到功能

我们只需要让得到的10进制数字和1做与运算就可以了,因为1只有遇见1 才是1,其他数字都是0 ,我们把签到结果和1进行与操作,每与一次,就把签到结果向右移动一位,依次内推,我们就能完成逐个遍历的效果了。Java逻辑代码:获得当前这个月的最后一次签到数据,定义一个计数器,然后不停的向前统计,直到获得第一个非0的数字即可,每得到一个非0的数字计数器+1,直到遍历完所有的数据,就可以获得当前月的签到总天数了。从最后一次签到开始向前统计,直到遇到第一次未签到为止,计算总的签到次数,就是连续签到天数。

2023-11-24 16:54:58 32 1

原创 简单的上传代码

【代码】简单的上传代码。

2023-11-24 16:02:48 44 1

原创 Redis实战 附近商家

我们要做的事情是:将数据库表中的数据导入到redis中去,redis中的GEO,GEO在redis中就一个menber和一个经纬度,我们把x和y轴传入到redis做的经纬度位置去,但我们不能把所有的数据都放入到menber中去,毕竟作为redis是一个内存级数据库,如果存海量数据,redis还是力不从心,所以我们在这个地方存储他的id即可。SpringDataRedis的2.3.9版本并不支持Redis 6.2提供的GEOSEARCH命令,因此我们需要提示其版本,修改自己的POM。

2023-11-23 17:02:30 65

原创 GEO数据结构的基本用法 可以做附近的店铺,附近的用户等

GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有:GEOADD:添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member)GEODIST:计算指定的两个点之间的距离并返回GEOHASH:将指定member的坐标转为hash字符串形式并返回GEOPOS:返回指定member的坐标。

2023-11-23 16:47:17 97

原创 Redis实战 黑马点评 好友关注的实现

针对用户的操作:可以对用户进行关注和取消关注功能。注意: 这里需要把主键修改为自增长,简化开发。

2023-11-22 12:43:23 88 1

原创 Redis实战(黑马点评) 达人探店

发布探店笔记探店笔记类似点评网站的评价,往往是图文结合。对应的表有两个: tb_blog:探店笔记表,包含笔记中的标题、文字、图片等 tb_blog_comments:其他用户对探店笔记的评价1 上传图片的功能在实际的开发中很多地方都可以用到 因此这里上传图片和发布分开来做上传图片的controller SystemConstants.IMAGE_UPLOAD_DIR 是自己定义的变量用于存储照片的地址 一般是前端服务器存放图片的地址 在实际开发中图片一般会放在nginx上或者是云存储上。

2023-11-19 22:29:55 41

原创 Redis实战(黑马点评) 秒杀优惠券优化

当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤1、查询优惠卷2、判断秒杀库存是否足够3、查询订单4、校验是否是一人一单5、扣减库存6、创建订单之前的方案都是基于单线程去操作所有的操作都是一个线程串联执行这就导致了程序的执行的效率。

2023-09-22 22:21:07 122 1

原创 Redis实战(黑马点评) 分布式锁 redission

重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。不可重试:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。超时释放:我们在加锁时增加了过期时间,这样的我们可以防

2023-09-20 19:30:40 212 1

原创 Redis实战 黑马点评(优惠卷秒杀)

基于Redis的分布式锁实现思路:利用set nx ex获取锁,并设置过期时间,保存线程标示释放锁时先判断线程标示是否与自己一致,一致则删除锁特性:利用set nx满足互斥性利用set ex保证故障时锁依然能释放,避免死锁,提高安全性利用Redis集群保证高可用和高并发特性。

2023-09-18 16:34:49 98

原创 使用id.tostring作为锁对象出现同一个id可以多线程的访问

在使用tostring 把id 转换成string 每执行一次就会生成一个新的string类型的字符串因此这个锁其实是没有起到任何的作用的。voucherId.toString().intern() 可以保证同一个id多次调用同string的方法还是可以是同一个锁。简单来说就是在在字符串的常量池中找一个和你的值一样的字符串的地址。

2023-09-15 22:04:49 56 1

原创 Redis实战黑马点评(商户查询缓存)

采用主动更新的策略使用双写的方案在读的事后加入了有效时间在写的操作使用先更新数据库然后在操作缓存。

2023-09-13 15:43:37 78 1

原创 Redis 实战(黑马点评项目)(登录)

用户将验证码进行输入,后台从session中拿到当前验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过校验,如果一致,则后台根据手机号(session获取)查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库。每个用户其实对应都是去找tomcat线程池中的一个线程来完成工作的, 使用完成后再进行回收,既然每个请求都是独立的,所以在每个用户去访问我们的工程时,我们可以使用threadlocal(线程域对象)来为每一个线程存储数据来做到线程隔离,每个线程操作自己的一份数据。

2023-09-07 20:45:07 186 1

原创 将一个bean使用hutool转换为map<string,string>是报错类型转换异常java.lang.ClassCastException: java.lang.Long cannot be

bean中存在int或long类型的数据,使用工具类可以转换但是我用的是Stringredistemplate 无法将int /long -> string。1 使用最最原始的方法将一个bean的属性手动的加到map中将属性值设置为string类型(不建议使用)

2023-09-07 18:07:49 547 1

原创 Redis客户端(超级详细)

RedisTemplate的两种序列化实践方案,两种方案各有各的优缺点,可以根据实际情况选择使用stringredistemplate 可以在操作大量的数据的时候推荐使用reidstemplate操作数据量不是很多使用提高我们的开发速度。

2023-08-26 19:36:08 9595

原创 在redis的Java客户端使用RedisTemplate设置自定义序列化时报错Could not autowire. No beans of ‘RedisConnectionFactory‘ typ

打开file-->settings,然后选择Editor-->inspections,在该界面搜索autowire出现如下页面。这个报错提示是因为springboot升级到2.6.9以后版本就会出现。可以把我们的springboot的版本降到2.6.9以及以下。

2023-08-26 15:06:12 572

原创 Redis常见命令

存的时候value多了一个fleid 一个key可以存储对个field 存储多个小value(这个就类似于存一个对象key为对象的唯一标识,value里field相当于属性名,小value相当于属性值)添加一个key value 前提是这个key不存在 如果这个key存在 不执行 (真正意义上的添加只有添加的效果)类似与(set key value nx)的效果。set当这个key存在是起到一个修改的效果,也就是说set 可以起到添加或者修改的一个效果,但是setnx 只有添加的效果。

2023-08-25 11:12:55 342 1

原创 Redis初识

相比于sql的结构化(对表的初始化定义一个结构在后面步轻易的改变) nosql采用非结构化的模式(对数据的结构没有非常严格的约束) 这里学的redis就用KEY--VALUE的形式存储数据。在平时的crud的操作通常都会涉及到事务,sql数据库底层都帮助我们实现了事务的4大特征ACID。sql的数据库表和表之间可以相互关联(订单表和商品表) 数据库帮助我们实现了数据与数据之间的关联。nosql的数据库表与表之间不存在关联导致数据存在大量的重复(每个用户里都存在订单的数据)4 支持数据的持久化。

2023-08-22 11:44:33 25

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除