JAVA开发(Redis @Cacheable注解的使用)

@Cacheable 注解用于查询的操作,首先从缓存中查找,如果缓存不存在,就去数据库查,然后将查询的结果写入缓存。

启动类上需要 @EnableCaching

@EnableCaching
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application .class,args);
	}
}

@Cacheable 注解在方法上,表示该方法的返回结果是可以缓存的。也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方法。

    @GetMapping("gettoken")
    @Cacheable(value = "member#PT1H", key = "'qywxmodel:token:'+ #corpid", condition = "#language = 1")
    Map<String, Object> gettoken(@RequestParam("corpid")String corpid, @RequestParam("corpsecret")String corpsecret);
   

@Cacheable注解三个属性。
value : 必须要的。就是个自己取的名字,通过它指明了第一次调用这个方法时返回的bookList将被存在内存的哪里。
key : 可选。要使用SpEL表达式,这里与参数username对应,当传入的username值变了的话就不去取缓存里的数据了,而是执行getBooksByUsernameAndLanguage方法。(这是必须的,因为username变了,返回值也就变了,缓存里的数据不符合了,因此这个选项很重要)。spring默认用方法的签名来当做key。
condition:方法返回的结果bookList,要不要缓存起来?condition就添加了一个限定条件。这个例子中,只有传入的语言代码是1,返回的bookList才会被缓存起来,如果给language传了别的值,那么bookList是不会缓存起来的。

那么需要更新缓存怎么操作呢,这是需要@CachePut

@Cacheable 的逻辑是:查找缓存 - 有就返回 -没有就执行方法体 - 将结果缓存起来;
@CachePut 的逻辑是:执行方法体 - 将结果缓存起来;
所以 @Cacheable 适用于查询数据的方法,@CachePut 适用于更新数据的方法。

    /**
     * 内部员工缓存信息
     * @param phone
     * @param status
     * @param b
     * @param messge
     * @return
     */
    @CachePut(value = "member#PT5M", key = "'employee:' + #phone")
    public Map<String, Object> employee(String phone,String status , boolean b ,String messge ) {
        Map<String, Object> resMap = new HashMap<>();
        resMap.put("phone", phone);
        resMap.put("status", status); 
        resMap.put("flag",  b);
		resMap.put("messge",messge);
        return resMap;
    }

Redis是一个基于内存的高性能Key-Value数据库,其原理和使用如下:

  1. 原理:Redis本质上是一个Key-Value类型的内存数据库,整个数据库全部加载在内存中进行操作。数据结构是其核心,Redis支持多种数据结构,如String、List、Set、Sorted Set等,还支持发布/订阅、事务以及Lua脚本等功能。
  2. 性能:Redis具有非常出色的性能,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。这是因为Redis的所有数据都放在内存中,通过异步的方式将数据写入磁盘,从而保证了快速和数据持久化的特征。
  3. 数据存储:Redis的数据都存储在内存中,因此数据库容量受到物理内存的限制。当数据量很大时,可以考虑分布式或其他数据库。
  4. 数据类型:Redis支持多种数据类型,包括String、List、Set、Sorted Set等。这些数据类型可以用来实现很多有用的功能,例如用List来实现FIFO双向链表,用Set来做高性能的tag系统等。
  5. 数据持久化:虽然Redis的数据主要放在内存中,但它也支持数据持久化。当设置了最大使用的内存后,数据已有记录数达到内存限值后不能继续插入新值。
  6. 分布式和回收策略:Redis也支持分布式和回收策略。在分布式系统中,数据可以在多个Redis实例之间进行分片存储。对于回收策略,Redis提供了几种选择,如volatile-lru、volatile-ttl和volatile-random等,用于从已设置过期时间的数据集中选择需要淘汰的数据。
  7. 使用:Redis的使用非常广泛,可以用于缓存、消息队列、排行榜、点赞系统等多种场景。同时,Redis还提供了丰富的API和命令行工具来帮助用户更加方便地使用它。

总之,Redis是一个高效、可靠、灵活的Key-Value数据库,被广泛应用于各种应用中。

Redis详解

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对存储系统,提供了丰富的数据类型和操作,用于构建高性能、高可用的应用。以下是关于Redis的详解。

一、Redis的基本概念

  1. 数据类型:Redis支持多种数据类型,包括字符串、哈希表、列表、集合和有序集合。这些数据类型使得Redis可以用于多种应用场景,如缓存、消息队列、排行榜等。
  2. 键值对:Redis以键值对的形式存储数据,每个键对应一个唯一的数据值。键是字符串类型,值可以是不同数据类型的实例,如字符串、哈希表、列表等。
  3. 持久化:Redis支持将数据持久化到磁盘中,以便在系统重启或故障时恢复数据。持久化可以通过RDB(Redis DataBase)和AOF(Append Only File)两种方式实现。
  4. 事务:Redis支持事务功能,通过MULTI、EXEC和DISCARD命令来执行事务。事务可以确保多个命令的原子性执行,并且可以通过watch命令实现乐观锁机制。
  5. 发布/订阅模式:Redis支持发布/订阅模式,允许开发者实现实时消息系统、实时排行榜等功能。通过使用Pub/Sub命令,可以将消息发布到指定的频道,并由订阅该频道的客户端接收。

二、Redis的安装与配置

  1. 安装:Redis可以通过源码编译安装或者使用包管理器进行安装。常见的安装方式包括在Linux上使用apt-get或yum命令安装,在Windows上使用MSI安装程序安装等。
  2. 配置:Redis的配置文件通常位于redis.conf,其中包含了各种参数的配置选项,如端口号、日志文件路径、密码等。开发者可以根据实际需求进行配置调整。

三、Redis的应用场景

  1. 缓存:Redis作为内存数据库,可以作为缓存系统使用,提高应用的性能和响应速度。通过合理设置缓存过期时间和缓存策略,可以实现高效的缓存更新和替换机制。
  2. 消息队列:Redis的列表数据类型可以作为消息队列使用,实现异步消息处理和分布式系统中的消息传递。通过使用LPUSH和RPOP命令,可以实现消息的生产者和消费者模式。
  3. 排行榜:Redis的有序集合数据类型可以用于实现排行榜功能,如游戏排名、热门商品等。通过ZADD命令添加分数,ZRANGEBYSCORE和ZREVRANGEBYSCORE命令获取排名结果。
  4. 会话管理:Redis可以作为会话管理系统,存储用户会话数据,提高系统安全性和可靠性。通过将用户会话数据存储在Redis中,可以实现会话劫持保护和跨节点会话同步等功能。
  5. 分布式锁:Redis的原子性操作和事务功能可以用于实现分布式锁机制,确保多个节点之间的操作一致性和安全性。通过SETNX命令实现分布式锁的加锁操作,并通过定时任务或监听机制实现锁的自动释放和重试机制。

四、Redis的性能优化

  1. 内存优化:合理配置Redis的内存大小和数据存储方式,避免过高的内存占用和频繁的磁盘I/O操作。根据实际需求调整键值对的存储方式和数据结构的使用。
  2. 连接池:使用连接池可以减少创建和销毁连接的开销,提高系统的并发处理能力。合理配置连接池的大小和连接超时时间等参数。
  3. 异步处理:对于非实时要求的操作,可以采用异步处理方式,提高系统的响应速度和吞吐量。例如使用Redis的发布/订阅模式实现异步消息处理。
  4. 缓存策略:根据实际需求选择合适的缓存策略,如LRU(Least Recently Used)策略或TTL(Time To Live)策略等。通过合理设置缓存过期时间和缓存替换机制,提高缓存利用率和性能。
  5. 压缩数据:对于存储的数据进行压缩处理,可以减少内存占用和提高网络传输效率。Redis支持对字符串类型的数据进行压缩存储。
  6. 持久化优化:根据实际需求选择合适的持久化方式(RDB或AOF),并调整相关参数如持久化频率和同步策略等,以平衡数据安全性和性能。
  7. 多线程处理:在一些高并发场景下,可以考虑使用多线程处理来提高系统的吞吐量。但需要注意的是,Redis本身是单线程模型,多线程处理主要应用于客户端或代理层的优化。
  8. 监控与调优:定期监控Redis的性能指标如CPU使用率、内存占用、QPS等,并根据实际情况进行调整和优化。同时可以借助第三方工具如Redis Exporter、Prometheus等来实现更全面的监控和告警功能。
  9. 安全与防护:确保Redis的安全性,采取措施如密码验证
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值