`

redis 在业务代码应用

 
阅读更多
1.查库存
public class IndexDatasourceRedis {

    public static void mainSelect(String[] args) {

        // 从主缓存获取
        // 判断是否主缓存存在
        if(true) {
            // lock锁

            // 从数据库获取

            // 更新主缓存
            // 更新备份缓存
        } else {
            // 备份缓存获取
        }
    }

    public static void mainEdit(String[] args) {
        // 清空主缓存
    }
}


2.秒杀减库存处理:
解决方案:令牌机制
秒杀100件商品,可设置令牌池120个。
redis放120令牌,用户获取令牌,获取到的取处理数据库库存(100个正常如理,20个处理失败,其他并发直接返回false),如果异常恢复令牌。

// 库存放到缓存
for(i=0;i<120;i++){
redisTemplate.opsForList.rightPush("token_lists",i+"_");
}

// 库件库存(获取令牌)
String token = redisTemplect.opsForList.leftPop("token_lists");
if(token == null || "".equals(token)) {
System.out.println("没有抢到令牌token,不能秒杀");
}

缺点:可以解决数据量少的秒杀,但是1万件商品如何处理?
疑问为什么时候用list,不使用incr/decr:
如果单纯计数效果一样,列表可以存储详细的信息,对业务灵活性高。
https://blog.csdn.net/zhiguozhu/article/details/50517527

3 spring boot redis

类加注解
@EnableCaching

方法加注解:
//增
    @CachePut(key="#id", value="value")
//查
    @Cacheable(key="#id", value="value")
//删除
    @CacheEvict(key="#id", value="value")

spring配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
spring cache原理:注解
AOP注解的原理,看cachePut后通知,看Cacheable前通知

其实最后底层是JCache.jcp(java com)

思考:为什么后通知,先更新DB,后更新缓存
1.先更新DB,后删缓存:
正常思考:并发查询时,查出的是redis的旧值,产生了1次脏读,但减少对DB的冲击。
深度思考:此脏读是一时的旧数据,因随后会删redis,代价小,1次脏读。
2.先删缓存,后更新DB:
正常思考:并发查询时,因没有缓存,去数据库查询,对其冲击大。好处是可以查到最新的数据,但!
深度思考:但查到实际不是最新的数据,因为还没有更新DB,会把不是最新的数据会放到redis里,导致长时间脏读,概率大,代价大。


4.spring redis
RedisTemplate
分享到:
评论

相关推荐

    spring 和redis整合,java代码操作redis,java代码中选择redis制定数据库

    在你的业务代码中,你可以通过@Autowired注解注入`RedisTemplate`,然后调用其提供的方法进行数据的存取操作。例如,使用`opsForValue()`操作符存取字符串类型的数据: ```java @Autowired private RedisTemplate, ...

    redis缓存的示例代码

    特别是在Java开发的Spring Boot框架中,集成Redis作为缓存系统,能够显著提升应用的响应速度和减少数据库负载。下面我们将详细讨论如何在Spring Boot项目中配置和使用Redis作为缓存,并参考提供的`cache_redis-demo`...

    Redis简单代码(包含Spring示例)

    学习这部分内容时,你需要理解Redis的数据结构及其适用场景,掌握Spring Data Redis的基本使用,包括配置、模板方法以及如何在实际项目中应用。同时,熟悉Redis的操作命令也是必要的,因为它们可以帮助你更好地理解...

    java操作redis代码示例

    本篇文章将深入探讨如何在Java中使用Redis进行分页操作,并提供相关代码示例。 首先,你需要在项目中引入Jedis或Lettuce这两个常用的Java Redis客户端库。Jedis是较早的库,适合小型项目,而Lettuce则更现代,支持...

    redis命令缓存AOP代码

    AOP允许我们在不修改原有业务代码的情况下,添加额外的功能,如在方法调用前后执行缓存操作。要实现Redis命令缓存,可以创建一个切面(Aspect),并在切面中定义切入点(Pointcut)和通知(Advice)。切入点是方法...

    .NET中添加Redis

    .NET框架中的Redis集成是...通过掌握以上知识点,开发者能够在.NET项目中有效地利用Redis进行数据缓存,提升应用性能,并构建可扩展的架构。在实际开发中,应结合业务需求灵活运用这些技术,确保系统的稳定性和效率。

    Redis集成Spring的Java代码

    在IT行业中,Redis是一款广泛应用的高性能键值存储系统,常被用作缓存和数据库解决方案。...在实际项目中,根据业务需求进行优化,如设置合适的过期时间、利用Redis的事务功能等,都是提升系统效率的重要手段。

    Redis实战篇代码,包含前端资源

    总的来说,这个实战篇的代码将涵盖Redis在实际项目中的应用,包括但不限于数据存储、缓存策略、消息传递以及前端与后端的交互。通过学习和实践这些代码,你可以深入了解如何在实际环境中利用Redis提升应用性能和用户...

    springboot整合Redis缓存源代码

    在业务代码中,Spring Data Redis提供了一套丰富的API,通过`@EnableCaching`注解启用缓存功能: ```java @Configuration @EnableCaching public class CacheConfig { } ``` 然后可以使用`@Cacheable`、`@CacheEvict...

    SpringBoot SSM Redis Vue Java代码源码项目程序 高性能后台框架

    它提供了一种模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、用户界面和控制逻辑分离,提高代码可读性和可维护性。 4. **MyBatis**: MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级...

    Redis分布式锁代码示例

    在实际业务中,你可以在需要加锁的代码段前后调用`acquireLock`和`releaseLock`方法。例如,如果要确保对某个资源的独占访问,可以这样做: ```java @Service public class MyBusinessService { @Autowired ...

    storm集成Redis操作示例代码.zip

    在分布式计算领域,Apache ...这个示例代码应该包含了以上所有知识点的实现,你可以通过阅读代码学习如何在实际项目中集成Storm和Redis,实现数据的实时处理和高效存储。记得在使用时根据实际业务需求进行调整和优化。

    redis集成spring实现aop.zip

    在IT领域,Redis和Spring是两个非常重要的技术组件。Redis是一个高性能的键值数据库,而Spring则是一个广泛使用的Java企业级应用开发框架。当我们谈论"redis集成spring实现aop"时,我们指的是如何将Redis缓存系统与...

    redis6.0笔记代码资料.zip

    此压缩包文件包含了关于 Redis 6.0 的笔记、代码示例和相关资料,旨在帮助用户深入理解和应用这个版本的 Redis。 笔记部分可能涵盖了以下几个关键知识点: 1. **Redis 6.0 新特性**:Redis 6.0 引入了多线程I/O,...

    spring-data + jedis + redis代码

    通过分析这些代码,开发者可以学习如何在Spring应用中集成Redis,提升应用程序的性能和可扩展性。例如,利用Redis作为缓存,可以快速响应常见请求,减少数据库的负载。同时,Spring Data的抽象层使得代码更加简洁,...

    springBoot集成redis

    在业务逻辑中,我们可以使用Spring Data Redis提供的`StringRedisTemplate`或自定义的`RedisTemplate`进行操作,例如缓存数据: ```java @Autowired private StringRedisTemplate stringRedisTemplate; public ...

    Redis单机部署6.2.6版本

    7. **后台运行与守护进程化**: 为了使Redis在后台持续运行,可以在启动时添加`--daemonize yes`选项。同时,建议设置为开机自启动,这通常涉及将Redis服务添加到系统的初始化脚本或Systemd服务文件中。 8. **数据...

    监听redis过期key,做对应业务处理

    本文将详细介绍如何在Spring Boot应用中集成Redis,并设置监听Redis中的过期Key,以便在Key过期时执行相应的业务处理。 首先,我们需要在项目中添加Redis和Spring Data Redis的相关依赖。在`pom.xml`文件中,添加...

    springmvc+mybatis+redis

    在IT行业中,SpringMVC、MyBatis和Redis是三个非常重要的技术组件,它们分别扮演着Web应用架构、数据持久层框架和高速缓存的角色。接下来,我们将详细探讨这三个技术如何整合并发挥协同作用。 首先,SpringMVC是...

    redis实现登录退出代码

    Redis是一种高性能的键值数据库,常用于数据缓存、消息队列等场景,但在Web应用中,它也可以用来实现用户的登录和退出功能。本篇文章将详细介绍如何利用Redis来处理用户的登录状态,以及如何设计和实现登录退出的...

Global site tag (gtag.js) - Google Analytics