【simple-cache】我开发了一款只要一个注解就可以轻松实现缓存的框架

2023-05-16

🐶背景:

  • 我们在写web项目的时候,
  • 当大量的请求进来会导致我们数据库压力过大,
  • 所以我们需要加入缓存来减轻数据库的压力,但是现在市面上的很多缓存框架配置太复杂,
  • 所以该框架只需要一个@RedisCache注解就可以实现redis的缓存功能

在这里插入图片描述

所以该框架就叫simple-cache :简单的缓存

🐭介绍:

simple-cache 1.x 是使用redis作为数据库缓存系统,使用自定义注解配合Spring的Aop功能实现方法的缓存,使用restful风格支持get请求,根据请求的参数和key来分类唯一的请求key

🐹代码托管

Gitee

🐰安装

simple-cache 1.x 版本基于 JDK11,所以安装集成 simple-cache 1.x 要求如下:

  • JDK 11+
  • Maven or Gradle

Maven:

<dependency>
            <groupId>io.gitee.antopen</groupId>
            <artifactId>simple-cache</artifactId>
            <version>最新版本</version>
</dependency>

Gradle:

implementation group: 'io.gitee.antopen', name: 'simple-cache', version: '最新版本'

最新版本

中心仓库地址

在这里插入图片描述

🐺快速开始

Gitee:快速开始实例项目

初始化工程

创建一个空的 Spring Boot 工程

 	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.6</version>
        <relativePath/>
    </parent>

添加依赖

引入 spring-boot-starterspring-boot-starter-testsimple-cachespring-boot-starter-web 依赖:

 	<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>io.gitee.antopen</groupId>
            <artifactId>simple-cache</artifactId>
            <version>1.0.1</version>
        </dependency>

    </dependencies>

🐸配置

application.properties 配置文件中添加 redis 的相关配置:

server.port=8773

spring.redis.host=127.0.0.1
spring.redis.database=0
spring.redis.port=6379

在 Spring Boot 启动类中添加 @ComponentScan注解,扫描 com.masiyi本项目(例如:com.example)文件夹:

package com.example.springbootdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({"com.masiyi","com.example"})
public class SpringbootdemoApplication {

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

}

🐯编码

编写controller类 Test.java

package com.example.springbootdemo.controller;

import com.example.springbootdemo.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description TODO
 * @Author masiyi
 * @Date 2022/12/21
 **/
@RestController
public class Test {

    @Autowired
    private TestService testService;

    /**
     * 不走缓存
     * @return string
     */
    @GetMapping("/testnocache")
    public String testnocache() {
        return testService.testnocache();
    }

    @GetMapping("/test")
    /**
     * 走缓存
     * @return string
     */
    public String test() {
        return testService.test();
    }
    
    /**
     * 缓存带参数方法
     * @return string
     */
    @GetMapping("/testParams")
    public Object testParams(@RequestParam String name,@RequestParam String sex) {
        return testService.testParams(name,sex);
    }


}


一共有三个方法,不走缓存方法走缓存方法缓存带参数方法

创建对应的service类

package com.example.springbootdemo.service;

import com.alibaba.fastjson.JSONObject;
import com.masiyi.simplecache.annotation.RedisCache;
import com.masiyi.simplecache.util.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Random;
import java.util.UUID;

/**
 * @Description TODO
 * @Author masiyi
 * @Date 2022/12/21
 **/
@Service
public class TestService {

    @Autowired
    RedisUtils redisUtils;

    @RedisCache(key = "test")
    public String test() {
        return UUID.randomUUID().toString();
    }

    public String testnocache() {
     	return UUID.randomUUID().toString();
    }

    @RedisCache(key = "testParams",expire = 100)
    public Object testParams(String name, String sex) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put(name, UUID.randomUUID());
        jsonObject.put(sex, new Random().nextInt(2));
        return jsonObject;
    }

}

启动项目访问三个接口

http://localhost:8773/test

在这里插入图片描述
访问两次返回结果都是一样的

在这里插入图片描述
因为走了缓存

http://localhost:8773/testnocache

在这里插入图片描述
两次结果不一样

在这里插入图片描述

因为没有走缓存

http://localhost:8773/testParams?name=王富贵&sex=男

带参数访问

在这里插入图片描述

如果参数不相同,返回结果不相同,因为缓存的key不同

在这里插入图片描述
如果参数相同,返回结果则相同,因为缓存的key相同

在这里插入图片描述

🐨注解

本文将介绍 simple-cache 注解包相关类详解(更多详细描述可点击查看源码注释)

注解类包源码:👉
simple-cache-annotation

属性类型必须指定默认值描述
keystring“”缓存的key,可以自定义
expirelong86400秒(一天)缓存的时间,可以自定义

注意,此版本目前只适用redis单机版本,且为上过生产,请谨慎使用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【simple-cache】我开发了一款只要一个注解就可以轻松实现缓存的框架 的相关文章

  • 问题解决:consider to specify kernel configuration cache directory through OPENCV_OCL4DNN_CONFIG_PATH par

    在使用Openpose代码运行的时候 xff0c 提示 xff1a consider to specify kernel configuration cache directory through OPENCV OCL4DNN CONFIG
  • Linux中各文件占用的Cache统计

    统计Linux中各个文件占用cache的情况 xff0c 使用工具fincore 可以从GitHub上获取到源码 xff1a https github com david415 linux ftools git 下载后 xff0c conf
  • Cache-主存效率问题

    本文主要明确在软考中经常遇到的缓存效率问题 第零 xff0c 明确一个问题 xff1a 如果Cache不命中时 xff0c 不同的系统有不同的应对策略 一是直接从主存中拿走待取数据 xff0c 它的时间消耗仅仅是一个访问主存周期 二是把待取
  • Kaiming He论文阅读笔记三——Simple Siamese Representation Learning

    Kaiming He大神在2021年发表的Exploring Simple Siamese Representation Learning xff0c 截至目前已经有963的引用 xff0c 今天我们就一起来阅读一下这篇自监督学习论文 Si
  • PHP Simple HTML DOM解析器使用入门

    http www cnphp info php simple html dom parser intro html 一直以来使用php解析html文档树都是一个难题 Simple HTML DOM parser 帮我们很好地解决了这个问题
  • Linux 中的内存(cache,buffer等)

    在Linux系统中 xff0c 为了提高文件系统性能 xff0c 内核利用一部分物理内存分配出缓冲区 xff0c 用于缓存系统操作和数据文件 xff0c 当内核收到读写的请求时 xff0c 内核先去缓存区找是否有请求的数据 xff0c 有就
  • 探讨下为什么设置了Cache-Control:no-cache 服务器还是返回304 Not Modified ?

    前言 今天做项目的时候遇到一个问题 xff0c 就是在ie11中 新增一条新的消息后页面刷新后 xff0c 并没有看到新增的消息 xff0c 于是打开控制台发现 304 Not Modified 加时间戳没用 于是赶紧联系后台大佬能不能把c
  • px4_simple_example和uorb机制

    px4 simple app PX4 Autopilot src exampes px4 simple app xff0c 这个程序是用c语言调用orb API和poll机制订阅和发布通讯数据 xff0c 但是这个例子并不是既有接收又有发送
  • Zynq Cache问题的解决方法

    在进行PS PL之间的DMA传输时 xff0c 不可避免会遇到Cache问题 今天在这里讲一下Cache的解决方法 其中参考了forums xilinx com的处理方法 首先解释为什么DMA会引入Cache问题 xff08 专业名称为Ca
  • 如何删除 CloudFront 缓存

    CloudFront 是 Amazon Web Services 提供的一项流行的缓存和内容交付网络服务 它通过其全球数据中心向用户提供数据 CloudFront 还在其服务器上创建本地内容缓存 进一步用于快速满足用户请求 失效允许我们在对
  • 删除节点后从新加入的错误

    ERR Node 172 168 63 202 7001 is not empty Either the nodealready knows other nodes check with CLUSTER NODES or contains
  • spring缓存机制-根据condition加入缓存(三)

    spring是一个轻量级开源框架 以IoC Inverse of Control 控制反转 和AOP Aspect Oriented Programming 面向切面编程 为内核 兼具功能强大的的原生展现层spring mvc 原生持久层s
  • MSI cache一致性协议

    按照高速缓存的写策略的不同 有写直达和写回WB两种高速缓存 1 写直达高速缓存 一旦高速缓存中的一个字被修改 则在主存中要立即修改 2 写回高速缓存 并不是立即写回 而是当被修改的字从高速缓存中被替换或清除时 才真正修改主存 在侦听协议的设
  • LRU(最近最少使用页面置换算法)淘汰算法

    什么是LRU算法 LRU是Least Recently Used的缩写 即最近最少使用页面置换算法 是为虚拟页式存储管理服务的 关于操作系统的内存管理 如何节省利用容量不大的内存为最多的进程提供资源 一直是研究的重要方向 而内存的虚拟存储管
  • Linux cache介绍及控制

    有关Cache 文件缓存是提升性能的重要手段 毋庸置疑 读缓存 Read caching 在绝大多数情况下是有益无害的 程序可以直接从RAM中读取数据 而写缓存 Write caching 则相对复杂 Linux内核将写磁盘的操作分解成了
  • kzalloc 函数详解

    用kzalloc申请内存的时候 效果等同于先是用 kmalloc 申请空间 然后用 memset 来初始化 所有申请的元素都被初始化为 0 kzalloc allocate memory The memory is set to zero
  • readis windows servrer 搭建与Java客户端的连接

    1 首先下载redis redis 2 0 2 zip 32 bit 解压 从下面地址下 http code google com p servicestack wiki RedisWindowsDownload 看到下面有redis 2
  • Spring Boot2.x 整合lettuce redis 和 redisson

    前言 springboot2之前redis的连接池为jedis 2 0以后redis的连接池改为了lettuce lettuce能够支持redis4 需要java8及以上 lettuce是基于netty实现的与redis进行同步和异步的通信
  • Spring Cache缓存注解

    目录 Spring Cache缓存注解 Cacheable 键生成器 CachePut CacheEvict Caching CacheConfig Spring Cache缓存注解 本篇文章代码示例在Spring Cache简单实现上的代
  • oracle alter system命令使用

    我們可以利用alter system語句在數據庫咝羞 程中修改初始化參數的值 如果instance在啟動時使用的是文本初始化參數文件 那樣我們在利用alter system語句修改的初始化參數僅在當前的instance中有效 并且所做的修改

随机推荐

  • R语言做正态分布检验

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 首先准备两个样本 code set seed 0 a lt runif 100 min 61 3 max 61 3 b lt rnorm 100 mean 61 0 sd
  • node-gyp安装 报错if not defined npm_config_node_gyp

    解决if not defined npm config node gyp 1 br npm install g node gyp 2 npm config set node gyp 34 node C Users me AppData Ro
  • Oracle在Windows上的运行问题分析和解决

    Oracle大型数据库系统在AIX UNIX上的实战详解 集中讨论的继续 做了一周关于Oracle在32位windows上实施的培训 xff0c 恰好期间有几位Oracle用户邮件询问关于Windows系统调整问题 正好吧 xff0c 把准
  • iOS UIImage 图片局部拉伸的一些学习要点

    之前 做纯色局部拉伸 通过 top bottom left right 相交的阴影拉伸 屡试不爽 实施方法 imageView image 61 UIImage imageNamed 64 34 icon helper palace day
  • Python 查看模块的帮助文档,方法和帮助信息

    参考链接 xff1a https blog csdn net u013810296 article details 55509284 这里介绍下python自带的查看帮助功能 xff0c 可以在编程时不中断地迅速找到所需模块和函数的使用方法
  • 移动电源、3G路由拆机

    这款电源 4400mAh xff0c 淘宝也就八十元左右 xff0c 可以作为无线路由使用 xff0c 可以插 3G 网卡 xff0c 总的来说还算不错 xff0c 关键是外观精美 xff0c 网上一堆和华美 A100 那样的 xff0c
  • FreeRTOS——任务调度—抢占式,时间片和合作式

    以下转载自安富莱电子 xff1a http forum armfly com forum php 本章教程为大家将介绍 FreeRTOS 操作系统支持的任务调度方式 xff1a 抢占式 xff0c 时间片和合作式 xff0c 这部分 算是
  • Linux无网络怎么安装软件,解决无网络环境使用yum本地源安装软件

    搞运维的朋友经常会遇到单位的服务器使用的是内网 xff0c 编译安装时间长 xff0c 麻烦些 xff0c 使用yum安装相对简单 xff0c 由于不能联网所以配置本地yum源是必要的 其实配置本地源是很简单的 xff0c 只需要挂载上系统
  • 到了这个年纪,就应该阅读Spring源码了,源码阅读指南-编译加运行

    文章目录 到了那个年纪 xff0c 就应该阅读Spring源码了 x1f604 第一步 xff0c clone x1f606 第二步 xff0c 使用idea打开项目 x1f60a gradle介绍 xff08 插叙手法 xff09 x1f
  • 页面加载完成

    1 document ready function alert 34 页面加载完成 xff01 34 简写 xff1a function alert 34 页面加载完成 xff01 34 2 原生JS方法 window nl ad 61 f
  • Java写的斗地主游戏源码

    源码下载在最后 我们的前年的课设要求做一个斗地主程序 xff0c 当时正在愁如何做界面 xff0c 当时刚好在学习C xff0c 于是就用C 完成了这个程序 一方面 xff0c 当时我C 功底还很差 xff08 其实现在也不怎么样 xff0
  • 加密的m3u8、ts文件合并

    加密后的ts文件不能直接合并或播放 xff0c 需要使用key对每个ts文件进行解密 分为两种情况 xff1a 1 如果ts文件已经全部下载好 xff0c 则可以直接在本地通过ffmpeg快速解密合并 2 如果ts文件没有下载好 xff0c
  • 微信小程序:截图组件welCropper,实现原理及其使用

    最近做项目的时候 xff0c 需要做一个截图功能 用了一个别人写的截图工具 xff0c 发现截出的图质量下降了 xff0c 但是我们图片要用来做识别 需要保证截出的图质量不下降 而且也不支持通过拖动来调整截图框的大小 所以这个截图工具无法满
  • 时序数据从分表到分库

    这里的时序数据泛指一切随时间推移而不断增长的数据 xff0c 比如通话记录 银行交易记录等 对于数据库来讲 xff0c 时序数据并没有什么特殊性 xff0c 可以和普通数据一样放在数据表中 不过 xff0c 因为不断增长 xff0c 积累时
  • Elasticsearch7.1中文文档-第一章-入门

    入门 引言 Elasticsearch是一个高度可扩展开源的全文搜索引擎 它搜索几乎是实时的 用ES作为搜索引擎 为复杂搜索功能的需求提供解决方案 ES的使用场景 网上商场 搜索商品 ES配合logstash kibana 日志分析 本教程
  • VINS(一)简介与代码结构

    VINS Mono和VINS Mobile是香港科技大学沈劭劼团队开源的单目视觉惯导SLAM方案 是基于优化和滑动窗口的VIO xff0c 使用IMU预积分构建紧耦合框架 并且具备自动初始化 xff0c 在线外参标定 xff0c 重定位 x
  • QTableView中设置单元格居中

    在获取想要设置的单元格对应的QStandardItem item xff0c 然后设置此item文本属性属性 xff0c 伪码如下 xff1a QStandardItem item 61 new QStandarItem 或者 GetQSt
  • MacBook Pro休眠掉电、耗电量大问题解决方案

    1 前言 最近我的2015mbpMacBook Pro Retina 13 inch early 2015 更新完10 14系统后 xff0c 发现休眠待机一晚上后能掉5 电 xff0c 白天待机4 5小时又掉了8 然而在此之前我记得休眠是
  • 推荐一本springBoot学习书籍---深入浅出springBoot2.x

    花了几周时间读完了这本书 确实是一本特别详细全面的书 而且不单单只是springBoot 书中还介绍了许多工作中常用的技术与springBoot的整合使用 当然 也有一些小bug 因为在代码实践过程发现和书中代码还是有区别的 当然我只发现了
  • 【simple-cache】我开发了一款只要一个注解就可以轻松实现缓存的框架

    x1f436 背景 xff1a 我们在写web项目的时候 xff0c 当大量的请求进来会导致我们数据库压力过大 xff0c 所以我们需要加入缓存来减轻数据库的压力 xff0c 但是现在市面上的很多缓存框架配置太复杂 xff0c 所以该框架只