依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

福运盘济宁依星网络八字排盘系统
查看: 17|回复: 0

Java 本地缓存库Caffeine 通过 Java API 来完成新增、查询、修改、删除、刷新等操作

[复制链接] 主动推送

3万

主题

3万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
33956
发表于 11 小时前 | 显示全部楼层 |阅读模式
Caffeine 是 Java 本地缓存库,它不像 Redis 有一套命令行命令,而是通过 Java API 来完成新增、查询、修改、删除、刷新等操作。
下面整理一下实际开发中最常用的 Caffeine 操作。

1. 创建 Cache基础 Cache

  1. Cache<String, Object> cache =
  2.         Caffeine.newBuilder()
  3.                 .build();
复制代码


带容量限制和过期时间

  1. Cache<String, Object> cache =
  2.         Caffeine.newBuilder()
  3.                 .maximumSize(10000)
  4.                 .expireAfterWrite(30, TimeUnit.MINUTES)
  5.                 .build();
复制代码



含义:
  • 最多缓存10000条
  • 写入30分钟后失效

2. 新增数据 put()
对应 Redis:
SET key value
Caffeine:
cache.put("user:1001", user);
例如:


  1. User user = new User();

  2. user.setId(1001);
  3. user.setName("张三");

  4. cache.put(
  5.     "user:1001",
  6.     user
  7. );
复制代码



结果:
  1. user:1001
  2.       |
  3.       张三
复制代码


3. 查询数据 getIfPresent()对应 Redis:
GET key
Caffeine:
User user =    (User)cache.getIfPresent("user:1001");
如果不存在:
返回:
null
推荐:
User user = cache.getIfPresent("user:1001");if(user != null){    return user;}else{    //查询数据库}
4. 查询,没有则加载 get()这是最常用方式。
类似:
Redis GET不存在查询数据库SETCaffeine:
User user =cache.get(    "user:1001",    key -> queryDatabase(key));流程:
查询缓存  |存在  ↓返回不存在  ↓执行queryDatabase()  ↓自动放入缓存
5. 修改缓存 put()Caffeine没有 update 命令。
修改就是覆盖:
cache.put( "user:1001", newUser);例如:
旧:
user:1001张三30岁执行:
cache.put("user:1001",张三35岁);变成:
张三35岁
6. 删除单个缓存 invalidate()对应 Redis:
DEL keyCaffeine:
cache.invalidate("user:1001");例如:
用户删除:
deleteUser(1001);cache.invalidate("user:1001");
7. 批量删除 invalidateAll()对应:
DEL key1 key2 key3Caffeine:
cache.invalidateAll(    Arrays.asList(       "user:1001",       "user:1002"    ));
8. 清空全部缓存对应:
FLUSHDBCaffeine:
cache.invalidateAll();例如:
系统重新加载配置:
cache.invalidateAll();全部清除。

9. 判断是否存在Object value =cache.getIfPresent("user:1001");if(value != null){    System.out.println("存在");}
10. 获取缓存数量long size =cache.estimatedSize();例如:
System.out.println( cache.estimatedSize());输出:
8560
11. 获取所有缓存数据Caffeine:
Map<String,Object> map =cache.asMap();例如:
cache.asMap()     .forEach(       (key,value)->{          System.out.println(key);       }     );
12. 更新对象内部字段(注意)例如:
缓存:
User user =cache.getIfPresent("user:1");修改:
user.setName("李四");可能存在问题:
因为:
缓存里的对象|引用同一个对象建议:
不要直接修改。
推荐:
User newUser =copy(user);newUser.setName("李四");cache.put("user:1",newUser);
13. 手动刷新 refresh()如果使用 LoadingCache:
LoadingCache<String,User> cache =Caffeine.newBuilder().build( key -> queryDatabase(key));刷新:
cache.refresh("user:1001");流程:
旧数据↓重新查询数据库↓替换缓存适合:
配置中心、热点数据。

14. 删除所有指定前缀的数据例如:
删除所有用户:
user:user:1001user:1002user:1003Caffeine没有Redis:
SCAN user:*需要自己处理:
cache.asMap().keySet().removeIf( key -> key.startsWith("user:"));
常用操作对照 Redis[td]
RedisCaffeine
SETput()
GETgetIfPresent()
GET不存在加载get()
DELinvalidate()
批量DELinvalidateAll(keys)
清空invalidateAll()
TTLexpireAfterWrite
KEYSasMap().keySet()
刷新refresh()

企业项目中最常见的三个操作实际 80% 场景就是:
查询cache.get("user:"+id,key -> userService.find(id));
修改数据后删除userDao.update(user);cache.invalidate("user:"+user.getId());
定时刷新热点数据cache.refresh("hot_products");



相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员6折;永久VIP4折
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2026-8-27 22:37

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表