nosql
文章平均质量分 90
非关系型数据库相关
打乒乓球只会抽
这个作者很懒,什么都没留下…
展开
-
【分布式锁】redis设置分布式锁,redission设置分布式锁,常见面试题
重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。不可重试:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。原创 2022-10-28 19:58:57 · 1830 阅读 · 0 评论 -
【Mybatis二级缓存】Redis开启Mybatis二级缓存
yml文件中开启debug模式,狂点几下查询的页面,去后台发现并没有查询数据库,缓存的命中率在逐渐增高,无限接近1,而不会达到1,正如我逝去的青春。默认LRU(least recently use) 最近最少使用策略。yml文件,配置redis的基本参数及开启mybatis的二级缓存。FIfO (first in first out ) 先进先出。等注解的sql语句,不能作用于mapper.xml文件。但是并没有定论,也可能是我使用的方式错误。通过注解的方式,没有测试成功,初步怀疑是。原创 2022-10-23 18:20:57 · 317 阅读 · 0 评论 -
【缓存穿透,缓存雪崩,缓存击穿】解决思路
当我们客户端访问不存在的数据时,先请求redis,但是此时redis中没有数据,此时会访问到数据库,但是数据库中也没有数据,这个数据穿透了缓存,直击数据库,我们都知道数据库能够承载的并发不如redis这么高,如果大量的请求同时过来访问这种不存在的数据,这些请求就都会访问到数据库,简单的解决方案就是哪怕这个数据在数据库中也不存在,我们也把这个数据存入到redis中去,这样,下次用户过来访问这个不存在的数据,那么在redis中也能找到这个数据就不会进入到缓存了。只需给key的TTL设置一个随机值即可。原创 2022-10-23 16:01:48 · 266 阅读 · 0 评论 -
【redis商户缓存】redis商户缓存
如果为先删除缓存再修改数据库的话,删除缓存比较快,几乎是毫秒级的(毕竟redis以速度快而闻名嘛),而修改数据库就相对比较慢了,这时如果有另外一个线程查询这条数据,而redis中的值刚被干掉,就会将查询出的结果又存入redis,所以就出现了缓存与数据库不一致的情况。我们确定了采用删除策略,来解决双写问题,当我们修改了数据之后,然后把缓存中的数据进行删除,查询时发现缓存中没有数据,则会从mysql中加载最新的数据,从而避免数据库和缓存不一致的问题。这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;原创 2022-10-22 13:50:30 · 227 阅读 · 0 评论 -
【Redis的集群】 Redis的集群
大型网站应用,热点数据量往往巨大,使用一台 Redis 实例无满足需求,这时就需要使用 多台 Redis (集群)作为缓存数据库。添加7008作为7007的备用节点,dd40158ecf4d45c51eeb02a0f44b903d49102f88 是主节点7007的id。在一台机器上启动6个独立的redis服务,需要有复制六个不同的配置文件。再次查询集群的状态时,依然不见端口为7002和7005的服务器。当主备复制场景,无法满足主机的单点故障时,需要引入集群配置。为要添加的redis服务的IP和端口。原创 2022-10-21 19:20:56 · 312 阅读 · 0 评论 -
【Redis的主从复制】操作系统的克隆,Redis的主从复制Redis的持久化
也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。d) 主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理。e) 可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后。在保证被克隆的主机关机状态下克隆,选择完整克隆,填好被克隆的主机存放的地址后。默认开启的是RDB(快照方式,间隔一定的时间)原创 2022-10-20 18:34:24 · 260 阅读 · 0 评论 -
【基于Redis实现短信登录】一、session共享问题 二、设计key的结构 1. 设计key的具体细节 三、代码实现
早期的方案是session拷贝,就是说虽然每个tomcat上都有不同的session,但是每当任意一台服务器的session修改时,都会同步给其他的Tomcat服务器的session,这样的话,就可以实现session的共享了。由于存入的数据比较简单,我们可以考虑使用String,或者是使用哈希,如果使用String,注意他的value,用多占用一点空间,如果使用哈希,则他的value中只会存储他数据本身,如果不是特别在意内存,其实使用String就可以啦。十分的恰好,能够很好的解决问题。原创 2022-10-21 12:06:17 · 306 阅读 · 0 评论 -
【基于Session实现登录流程】 一、实现发送短信验证码功能 二、登录 三、配置拦截器 1. 编写拦截器 2. 使拦截器生效
用户将验证码和手机号进行输入,后台从session中拿到当前验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过校验,如果一致,则后台根据手机号查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库,无论是否存在,都会将用户信息保存到session中,方便后续获得当前登录信息。如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存,然后再通过短信的方式将验证码发送给用户。用户收到验证码后,填写验证码,点击登录后将手机号,验证码发送到后端。service层编写发送验证码。原创 2022-10-20 13:22:38 · 317 阅读 · 0 评论 -
【SpringDataRedis客户端】RedisTemplate的序列化,StringRedisTemplate的使用
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了中。原创 2022-10-19 22:01:24 · 457 阅读 · 0 评论 -
【redis】redis常见操作
可视化工具安装包:https://github.com/lework/RedisDesktopManager-Windows/releasesRedis默认有16个仓库,编号从0至15. 通过配置文件可以设置仓库数量,但是不超过16,并且不能自定义仓库名称。如果是基于redis-cli连接Redis服务,可以通过select命令来选择数据库:Redis是典型的key-value数据库,key一般是字符串,而value包含很多不同的数据类型:通用指令是部分数据类型的,都可以使用的指令,常见的有:通过原创 2022-10-19 13:16:24 · 281 阅读 · 0 评论 -
【数据层解决方案】NOSQL:Redis,MongoDB,ES
在操作redis时,需要先确认操作何种数据,根据数据种类得到操作接口。例如使用opsForValue()获取string类型的数据操作接口,使用opsForHash()获取hash类型的数据操作接口,剩下的就是调用对应api操作了。各种类型的数据操作接口如下:原创 2022-10-15 19:33:47 · 538 阅读 · 0 评论