redis
文章平均质量分 54
LC超人在良家
记录一下平时的工作
展开
-
订单未支付倒计时 - Redisson分布式延迟队列RDelayedQueue
Redisson的分布式延迟队列原创 2023-04-25 16:16:02 · 1972 阅读 · 0 评论 -
redis的geo地理位置使用
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增;原创 2023-03-03 09:53:21 · 284 阅读 · 0 评论 -
Redis 的 Bitmaps的使用
BitMap可以理解为存储bit的数组,多个bit存储后组成的一个特定结构,每个位置只能存储1和0。Redis提供了Bitmaps的数据类型,让我们可以实现对位的操作。Bitmaps其实属于redis字符串的一种,它的出现只是让我们可以对字符串按位操作。并且redis为它提供了单独的一套操作命令,相当于一个元素是bit的数组,每个位置只能存储0和1,其有从0开始的下标对应每个bit。我们都知道bit,是计算机当中最小的存储单位,8个bit组成一个Byte,而bit只能存储两个值,0和1。原创 2023-02-09 13:48:23 · 606 阅读 · 0 评论 -
redis自定义注解来实现缓存
原理是使用aop1. 创建注解package com.zykj.newsell.common.aop;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * redis缓存注解 * * @author lc * @v原创 2022-04-19 16:40:34 · 794 阅读 · 2 评论 -
Redis 面试
Redis 单线程数据库的工作模式按存储方式可分为:硬盘数据库和内存数据库。Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度极快。(1)硬盘数据库的工作模式:2)内存数据库的工作模式:选择单线程原因因为Redis是基于内存的操作,CPU不是Redis的瓶颈( redis 基于内存, 因此减少了cpu将数据从磁盘复制到内存的时间),Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用原创 2022-01-06 09:04:34 · 525 阅读 · 0 评论 -
RedisUtils
package com.zykj.zhgy.utils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.Stri原创 2022-03-14 16:14:52 · 108 阅读 · 0 评论 -
redisson去解决高并发
使用redisson实现锁续命来解决高并发问题,1.使用redisson去解决高并发秒杀 锁续命:线程A和线程A对同一key进行加锁,假如线程A加锁成功,进行操作然后释放锁,线程B去加锁。在加锁的过程中会开启一个线程每隔10秒检测下锁是否过期,如果过期了那么就延长锁的时间。pom.xml <!-- https://mvnrepository.com/artifact/org.redisson/redisson --> <dependency>原创 2022-01-19 15:53:51 · 1078 阅读 · 0 评论 -
Redis事务原理
redis事务原理redis事务时基于SessionCallback实现的,因为要在一个连接里执行命令,那我们看看具体的实现,如下:redisTemplate.execute((RedisOperations res) ->{})对SessionCallback实现的是lambda表达式 @ApiOperation(value = "multi测试接口", notes = "redis事务测试接口") @RequestMapping(value = "/multi", metho原创 2022-01-07 09:01:45 · 408 阅读 · 0 评论 -
SessionCallback执行多条redis命令,SessionCallback.execute
我们一般是使用如下方法去操作redisredisTemplate.opsForValue().set("key1", "value1");redisTemplate.opsForValue().set("key2", "value2");但是这样的话,会前后开启两个不同的连接对象去执行,比较消耗内存。redisTemplate默认使用的是JDK序列化,但是可以主动设置redisTemplate执行两条命令其实是在两个连接里完成的,因为redisTemplate执行完一个命令就会对其关闭,原创 2022-01-07 09:01:24 · 2069 阅读 · 0 评论 -
解决redis存储的k-v乱码前缀问题
redis在存储数据的时候会有乱码前缀。分析:之所以会有这个乱码前缀是因为,redis序列化的问题。默认使用的是JDK序列化,我们要改成字符串序列化测试代码:package com.lc.redistest.justtest;import com.lc.redistest.RedisTestApplication;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.f原创 2021-12-25 19:48:46 · 1455 阅读 · 1 评论 -
使用 AOP 结合 Redis + Lua 脚本实现限流
限流的作用:1:保护服务的资源泄露 解决服务器的高可压。2:减少服务器并发。限流实现的步骤:1:导入相关依赖。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency> &l原创 2021-12-25 19:48:25 · 166 阅读 · 0 评论 -
springboot项目整合reids
注入依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>配置文件配置redisapplication.yml或者application.propertiessp原创 2021-12-24 09:05:59 · 71 阅读 · 0 评论 -
数据库分库分表-需要分布式全局Id
在项目开发中,随着业务的不断发展数据日增增大。这个时候就会出现数据表的分库分表的操作。一旦进行了分库和分表操作。传统的id就失去了意义。所以需要分布式全局ID。分布式全局ID的特点1:全局唯一性,不能出现重复的ID2:单调递增,保证下一个ID一定大于上一个ID3:范围趋势递增。在一个时间段内,生成的ID是递增趋势的比如:202012120001 202012120002….第二天的时候又要从1开始计数。202012130001 202012130002……4:安全性,在不同的领域中我们有些业务不原创 2021-12-24 09:05:47 · 546 阅读 · 0 评论 -
redis配合LUA脚本
Lua是一个轻量、简洁、可扩展的脚本语音,它的特点有:轻量:编译后提交很小。简洁:由C编写,启动快,运行快可扩展:可内嵌到各种编程语言或者系统中运行。提升静态语言的灵活性。而且完全不需要担心语法问题。为什么要使用lua?1、原子性:将Redis的多个操作合成一个脚本,然后整体执行,在脚本的执行中,不会出现资源竞争的问题。2:减少网络通信:把多个命令何并成一个lua脚本,redis统一执行脚本。3:复用性:client发送的脚本会永久存储在Redis中,这意味其他的客户端可以服用这个脚本原创 2021-12-24 09:05:18 · 1638 阅读 · 0 评论 -
SpringBoot+Redis+Lua防止(黑客)IP重复防刷攻击
黑客或者一些恶意的用户为了攻击你的网站或者APP。通过肉机并发或者死循环请求你的接口。从而导致系统出现宕机。针对新增数据的接口,会出现大量的重复数据,甚至垃圾数据会将你的数据库和CPU或者内存磁盘耗尽,直到数据库撑爆为止。针对查询的接口。黑客一般是重点攻击慢查询,比如一个SQL是2S。只要黑客一致攻击,就必然造成系统被拖垮,数据库查询全都被阻塞,连接一直得不到释放造成数据库无法访问。具体要实现和达到的效果是:需求:在10秒内,同一IP 127.0.0.1 地址只允许访问30次。最终达到的效果:原创 2021-12-24 09:05:06 · 888 阅读 · 0 评论 -
redis存储数据使用string或者hash,如何抉择呢?
Redis存储的java独享们一般用String或者Hash都可以进行存储,到底在什么时候使用String?什么时候使用hash呢?String 的存储场景应用在频繁读操作,他的存储结构是json字符串。即把java对象转换为json。然后存入redis中。Hash 的存储场景应用在频繁写的操作。即。当对象的某个属性频繁修改时,不适合用JSON+String的方式进行存储,因为不灵活,每次修改都要把整个对象转成JSON在进行存储。如果采用hash,就可以针对某个属性进行针对性的单独修改。不用序列化去修改原创 2021-12-24 09:04:56 · 1506 阅读 · 0 评论 -
Redis实现微博用户注册&;发送微博
微博用户注册整个的流程是:1:首先注册用户填写用户信息,先写入到db中2:然后在存储数据到redis的hash结构中 key=”reg:user:id”package com.kuangstudy.controller.reg;import com.kuangstudy.entity.User;import com.kuangstudy.service.UserService;import com.kuangstudy.vo.R;import io.swagger.annotations.A原创 2021-12-24 09:04:39 · 246 阅读 · 0 评论 -
Redis的Hash实现购物车搭建工作
Redis的Hash实现购物车搭建工作后端的数据架构:SpringBoot + Redis + MYSQL前端使用的技术栈:vue + axios需求:商品的添加购物车购物车商品的数量的递增和递减商品的删除商品的总计和 小计第一步:依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web<原创 2021-12-24 09:04:29 · 274 阅读 · 0 评论 -
Redis 主从复制常见的一些 坑
##读写分离的问题数据复制的延迟读写分离时,master会异步的将数据复制到slave,如果这时slave发生阻塞,则会延迟master主机的数据写命令,造成数据的不一致的情况解决:可以对slave的偏移量进行将恐,如果发现某台slave的偏移量有问题,则将数据读取操作切换到master;但是会很消耗资源,所以大部分是直接不考虑这个问题读到过期的数据原因:redis的从库slave是无法主动的删除国企的KEY的,所以如果做了读写分离的话,很有可能会在slave库中读取到国企的脏数据例原创 2021-12-24 09:04:19 · 705 阅读 · 0 评论 -
缓存雪崩、缓存穿透、缓存击穿问题
在大并发读的情景下有很大概率遇到缓存失效问题,缓存失效问题主要有以下三种:缓存雪崩,缓存击穿和缓存穿透。缓存雪崩缓存雪崩是指我们设置缓存的时候采用了相同的过期时间,导致缓存在某一时刻同时失效,恰巧那一时刻并发量很大,导致所有请求转发到数据库,数据库瞬时压力过重崩溃,从而导致系统崩溃。解决:通常我们会给缓存在原来失效时间的基础上增加一个随机值,例如1-5分钟随机,这样会大大降低缓存过期时间的重复概率,从而避免缓存集体失效。缓存击穿某些被设置了过期时间的 key 可能被同一时间被超高并发访问,比如双十原创 2021-12-24 09:04:11 · 149 阅读 · 0 评论 -
解决redis缓存和数据库的数据一致性问题
为了解决缓存和数据库的数据一致性问题 - 分布式读写锁分布式读写锁使用分布式读写锁可以完美解决缓存数据不一致的问题,想要读数据必须等待写数据整个操作完成。使用阿里中间件canal: 数据同步中间件,可以用于实时监听数据库的数据变动操作,原理是伪造成数据库的从节点,订阅binlog日志来实现实时监听。这样当数据变动的时候,我们可以根据监听的具体操作去更新缓存,达到缓存数据一致性,但可能存在一定延迟。canal在大数据系统中可以用来解决数据异构问题,可以根据订阅表的相关操作进行数据整合和分析,生成想原创 2021-12-24 09:03:59 · 1592 阅读 · 0 评论 -
Redis能够存储java对象吗?
Redis能够存储java对象吗?答案:是可以,但是你对象必须要序列化。redis没有办法把一个没有序列化的对象存储到redis中。package com.kuangstudy.entiy;import lombok.Data;public class User implements java.io.Serializable{ private Integer id; private String nickname; private String password;原创 2021-12-23 13:05:49 · 1609 阅读 · 0 评论 -
# SpringBoot+Redis+Hash存储产品数据
hash结构是一个 key key value 第一个key是reids的key 第二个key是hash的key value是值SpringBoot+Redis+Hash存储产品数据##第一步:设置hash的key乱码和value的序列化问题自定义一个redistemplate的配置类package com.kuangstudy.config;import org.springframework.context.annotation.Bean;import org.springframework原创 2021-12-23 13:05:26 · 1483 阅读 · 0 评论 -
redis实现 - 文章阅读PV统计
明白什么是PV、UV、IP等概念:PV(Page View)访问量, 即页面浏览量或点击量。UV(Unique Visitor)独立访客,统计1天内访问某站点的用户数。IP(Internet Protocol)独立IP数,是指1天内多少个独立的IP浏览了页面,即统计不同的IP浏览用户数量。作用范围:对于微信公众号包括学相伴的文章平台发展到一定的用户量和规模的时候,一般都不可能采用数据库来做计数器通常都是使用redis的incr命令来实现。##原理:采用incr命令 ,每次累加1如果k原创 2021-12-23 13:04:24 · 1185 阅读 · 0 评论 -
springboot集成redis配置
@Configurationpublic class RedisConfiguration extends CachingConfigurerSupport { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemp原创 2021-12-13 09:04:49 · 394 阅读 · 0 评论