【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】我开发了一款只要一个注解就可以轻松实现缓存的框架 的相关文章

  • springBoot集成guava cache缓存

    文章目录 前言一 guava cache实现本地缓存1 引入依赖2 定义GuavaLocalCache类3 引入配置类4 配置application properties数据库信息5 DataApplication启动类测试 二 Guava
  • MyBatis中关于session以及cache的管理

    Mybatis中缓存分为一级缓存与二级缓存 一级缓存指的只是缓存级别的一个命名 xff0c 主要就是每个sqlsession里都有一个HashMap来存储数据 xff0c 当然不同对象每个缓存区域也不一样 xff0c 所以一级缓存是不相互影
  • A simple Binary Search Tree written in C# and the case at the bottom

    Introduction In Computer Science a binary tree is a hierarchical structure of nodes each node referencing at most to two
  • simple_html_dom使用小结

    简单范例 lt php include 34 simple html dom php 34 Create DOM from URL or file html 61 file get html 39 http www google com 3
  • (深度学习快速入门)Exploring Simple Siamese Representation Learning(SimSam)论文精读

    文章目录 Abstract Introduction Related Work Method Emprical Study Stop gradient Predictor Batch Size Batch Normalization Sim
  • Linux中各文件占用的Cache统计

    统计Linux中各个文件占用cache的情况 xff0c 使用工具fincore 可以从GitHub上获取到源码 xff1a https github com david415 linux ftools git 下载后 xff0c conf
  • rctimer二轴云台及云台控制板调试(Simple bgc 8位破解板)

    前段时间在鬼王家抢了rctimer的二轴云台和控制板 xff0c 感觉做工很精良 这几天有空了就调试下 整个过程比较容易 xff0c 首先要准备好usbisp烧写器 xff0c 和一根阶梯形的micro usb线 先刷bootloader
  • SVN卡在Refresh SVN status cache

    转载请注明出处 xff1a http blog csdn net l1028386804 article details 52305230 装上TortoiseSVN后 xff0c 默认会开机启动一个叫做TSVNCache exe的进程 x
  • 从uboot中学习C语言基本功(uboot/lib_generic/vsprintf.c/simple_strtoul)

    此函数有以下几点值得注意 xff1a 1 第一个参数中的const 一般在函数的形参中 xff0c 如果我们只是希望调用者使用该参数 xff0c 而不会去改变该 参数内容 xff08 一般是指针指向的内容 xff09 xff0c 则可以声明
  • E: Archives directory /var/cache/apt/archives/partial is missing. - Acquire (2: No such file or dire

    mkdir p var cache apt archives partial apt get autoclean
  • Linux 中的内存(cache,buffer等)

    在Linux系统中 xff0c 为了提高文件系统性能 xff0c 内核利用一部分物理内存分配出缓冲区 xff0c 用于缓存系统操作和数据文件 xff0c 当内核收到读写的请求时 xff0c 内核先去缓存区找是否有请求的数据 xff0c 有就
  • Cache和DMA一致性

    cache读必须要buffer是cacheline对齐的 DMA应该多多少少知道点吧 DMA Direct Memory Access 是指在外接可以不用CPU干预 xff0c 直接把数据传输到内存的技术 这个过程中可以把CPU解放出来 x
  • Linux buffer/cache介绍

    free 命令 与 buffer cache 在 Linux 系统中 xff0c 我们经常用 free m命令来查看系统内存的使用状态 xff1a m 显示单位为MB free m 各个参数的说明 total 内存总数 used 已经使用的
  • 怎样优化Pentium系列处理器的代码 From:http://www.codingnow.com/2000/download/pentopt.htm#26_14

    How to optimize for the Pentium family of microprocessors Copyright 1996 2000 by Agner Fog Last modified 2000 07 03 Cont
  • 4.2 计算机体系结构——存储层次结构——cache工作原理

    cache是小容量 高速缓冲存储器 由SRAM组成 速度几乎和CPU一样快 一般将cache和主存的存储空间都划分为若干大小相同的块 1 cache工作原理 根据时间局部性和空间局部性 当处理器访问一块数据时 它很可能再次访问这块数据或者访
  • 当绘图遇上Caché之元数据代理

    很久以前到沈阳实习的时候还一个个问度娘C 画图 画了电路图绘制软件的毕业设计 雪花屏保等等 搞LIS软件后绘制各种仪器图 对C 画笔 画字符串 画线 画圆等等耳熟能详 然而却碰到一个问题 我们的仪器大部分是盒子用数据库M连接的 如果盒子仪器
  • SMT HT CMP SMP

    1 多线程 同时多线程 Simultaneous multithreading 简称 SMT SMT 可通过复制处理器上的结构状态 让同一个处理器上的多个线程同步执行并共享处理器的执行资源 可最大限度地实现宽发射 乱序的超标量处理 提高处理
  • MPC8314 (e300核) uboot 调试

    历经2个多月 完成了MPC8314最小系统 uboot 及Linux内核和根文件系统的调试 这是我第一次从头开始做小系统和内核的移植工作 虽然调试的比较辛苦 但是收获还是很多的 下面就介绍一下调试的过程和一些原理性的东西 1 MPC8314
  • 集群环境下Redis分布式锁

    一 前言 在上一篇文章中 已经介绍了基于Redis实现分布式锁的正确姿势 但是上篇文章存在一定的缺陷 它加锁只作用在一个Redis节点上 如果通过sentinel保证高可用 如果master节点由于某些原因发生了主从切换 那么就会出现锁丢失
  • slabinfo解读

    文件 proc slabinfo统计slab分配器相关信息 如 cat proc slabinfo slabinfo version 1 1 kmem cache 65 70 108 2 2 1 ip fib hash 10 112 32

随机推荐

  • 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 所以该框架只