在Java开发中,分布式缓存是一种常用的提高系统性能和可扩展性的方法,通过将数据存储在多个节点上,可以减轻单个服务器的压力,提高数据的访问速度,常见的分布式缓存实现有Redis、Memcached等,本文将以Redis为例,介绍如何在Java项目中使用分布式缓存。
(图片来源网络,侵删)
1、引入Redis依赖
需要在项目的pom.xml文件中添加Redis的依赖:
<dependencies> <!Redis客户端 > <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.7.0</version> </dependency> </dependencies>
2、配置Redis
在项目的资源文件夹(如src/main/resources)下创建一个名为application.properties的文件,用于配置Redis的相关信息:
Redis服务器地址 redis.host=127.0.0.1 Redis端口号 redis.port=6379 连接超时时间(毫秒) redis.timeout=10000
3、创建Redis工具类
创建一个名为RedisUtil的工具类,用于封装Redis的操作方法:
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisUtil { private static JedisPool jedisPool; static { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(100); // 最大连接数 config.setMaxIdle(20); // 最大空闲连接数 config.setMinIdle(5); // 最小空闲连接数 config.setMaxWaitMillis(10000); // 获取连接时的最大等待时间(毫秒) config.setTestOnBorrow(true); // 获取连接时检查是否可用 config.setTestOnReturn(true); // 归还连接时检查是否可用 config.setTestWhileIdle(true); // 空闲时检查是否可用 jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000); } public static Jedis getJedis() { return jedisPool.getResource(); } }
4、使用Redis缓存数据
在需要使用缓存的地方,可以通过RedisUtil工具类来操作Redis:
import redis.clients.jedis.Jedis; public class UserService { public String getUserInfo(String userId) { // 从Redis中获取用户信息,如果不存在则从数据库中查询并存入Redis try (Jedis jedis = RedisUtil.getJedis()) { String userInfo = jedis.get("user_info_" + userId); if (userInfo == null) { // 从数据库中查询用户信息并存入Redis userInfo = queryUserInfoFromDatabase(userId); jedis.set("user_info_" + userId, userInfo); } else { // 如果存在则直接返回缓存的用户信息,减少数据库查询压力 return userInfo; } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("获取用户信息失败"); } } }
5、更新缓存数据
当数据发生变化时,需要更新缓存中的数据,可以使用以下方法:
public void updateUserInfo(String userId, String newUserInfo) { try (Jedis jedis = RedisUtil.getJedis()) { // 更新数据库中的用户信息(省略具体实现)... // 同时更新Redis中的用户信息,设置过期时间为60秒(可根据实际需求调整) jedis.setex("user_info_" + userId, 60, newUserInfo); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("更新用户信息失败"); } }
6、删除缓存数据
当某个数据不再需要缓存时,可以将其从Redis中删除:
public void deleteUserInfo(String userId) { try (Jedis jedis = RedisUtil.getJedis()) { jedis.del("user_info_" + userId); // 根据key删除缓存数据,也可以使用keys命令批量删除(慎用)或使用过期策略自动删除过期数据(推荐) } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("删除用户信息失败"); } }
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/295030.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复