# spring-data-redis-tools **Repository Path**: ggsss_admin/spring-data-redis-tools ## Basic Information - **Project Name**: spring-data-redis-tools - **Description**: spring data redis 封装工具类包含分布式锁(distributedLock)、分布式唯一键(distributedId) - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-01-10 - **Last Updated**: 2024-07-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # spring-data-redis-tools - RedisTemplate封装工具类 `redisTools` - 可视化分布式ID生成器 `distributedId` - 可靠分布式锁工具类 `distributedLock`(lua脚本实现原子性解决断电问题、valueId避免错误释放问题) - [Redis技术总结思维导图](#user-content-redis技术总结) *** ## Maven ```xml org.springframework.boot spring-boot-starter-data-redis ``` ## RedisConfiguration ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import redis.clients.jedis.JedisPoolConfig; /** * @author wellJay */ @Configuration @EnableCaching public class RedisConfiguration { //过期时间一天 private static final int DEFAULT_EXPIRE_TIME = 3600 * 24; //从配置文件读取redis参数 @Autowired private CloudConfigProperties cloudConfigProperties; /** * jedisPoolConfig config */ @Bean public JedisPoolConfig jedisPoolConfig() { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(cloudConfigProperties.getRedis().getMaxIdle()); jedisPoolConfig.setMinIdle(cloudConfigProperties.getRedis().getMinIdle()); jedisPoolConfig.setTestOnBorrow(cloudConfigProperties.getRedis().getTestOnBorrow()); jedisPoolConfig.setTestOnReturn(cloudConfigProperties.getRedis().getTestOnReturn()); return jedisPoolConfig; } /** * JedisConnectionFactory */ @Bean public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) { JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setHostName(cloudConfigProperties.getRedis().getHost()); jedisConnectionFactory.setPort(cloudConfigProperties.getRedis().getPort()); jedisConnectionFactory.setPassword(cloudConfigProperties.getRedis().getPassword()); jedisConnectionFactory.setTimeout(cloudConfigProperties.getRedis().getTimeout()); jedisConnectionFactory.setUsePool(true); jedisConnectionFactory.setPoolConfig(jedisPoolConfig); return jedisConnectionFactory; } /** * RedisTemplate * 从执行时间上来看,JdkSerializationRedisSerializer是最高效的(毕竟是JDK原生的),但是是序列化的结果字符串是最长的。 * JSON由于其数据格式的紧凑性,序列化的长度是最小的,时间比前者要多一些。 * 所以个人的选择是倾向使用JacksonJsonRedisSerializer作为POJO的序列器。 */ @Bean public RedisTemplate redisTemplate(JedisConnectionFactory jedisConnectionFactory) { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(jedisConnectionFactory); redisTemplate.setDefaultSerializer(new StringRedisSerializer()); //设置普通value序列化方式 redisTemplate.setValueSerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer()); return redisTemplate; } @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate); redisCacheManager.setDefaultExpiration(DEFAULT_EXPIRE_TIME); return redisCacheManager; } } ``` ## How To Use 1、注入util方式,适用于复杂的业务处理 ```java @Autowired private RedisCacheUtil redisCacheUtil; ``` 2、Spring注解方式适用于简单的数据缓存 ```java @Cacheable(value = Constants.Redis.SYSTEM, key = ACTIONS_CACHE_KEY) ``` ## Redis技术总结 ![](Redis技术总结.png)