redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。
1.pom.xml文件添加依赖
org.springframework.boot spring-boot-starter-data-redis
2.配置yml文件
redis: host: localhost # Redis服务器地址 port: 6379 # Redis服务器连接端口 database: 0 password: # Redis服务器连接密码(默认为空)
3. 配置好RedisConfig
(注意我们使用了注解:@EnableCaching来开启缓存)
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.CacheKeyPrefix; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisPassword; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.*; import org.springframework.stereotype.Component; import java.lang.reflect.Method; import java.time.Duration; @Component @EnableCaching @EnableAutoConfiguration @Configuration public class RedisConfig extends CachingConfigurerSupport { private static final long DEFAULT_TTL = 999999L; @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.database}") private int database; @Value("${spring.redis.password}") private String password; @Bean public LettuceConnectionFactory lettuceConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setDatabase(database); redisStandaloneConfiguration.setHostName(host); redisStandaloneConfiguration.setPort(port); redisStandaloneConfiguration.setPassword(RedisPassword.of(password)); LettuceClientConfiguration.LettuceClientConfigurationBuilder lettuceClientConfigurationBuilder = LettuceClientConfiguration.builder(); LettuceConnectionFactory factory = new LettuceConnectionFactory(redisStandaloneConfiguration, lettuceClientConfigurationBuilder.build()); return factory; } @Bean public RedisTemplateredisTemplate() { RedisTemplate template = new RedisTemplate<>(); RedisSerializer stringSerializer = new StringRedisSerializer();//序列化为String Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);//序列化为Json template.setKeySerializer(stringSerializer); template.setValueSerializer(jackson2JsonRedisSerializer); template.setHashKeySerializer(stringSerializer); template.setHashValueSerializer(jackson2JsonRedisSerializer); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); //set value serializer template.setDefaultSerializer(jackson2JsonRedisSerializer); template.setConnectionFactory(lettuceConnectionFactory()); template.afterPropertiesSet(); return template; } @Bean public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { //初始化一个RedisCacheWriter RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory); //自定义key前缀 CacheKeyPrefix cacheKeyPrefix = new CacheKeyPrefix() { @Override public String compute(String cacheName) { return cacheName+":"; } }; //设置CacheManager的值序列化方式为json序列化 RedisSerializer
4. 配置Redis工具类RedisUtil
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.*; import org.springframework.stereotype.Service; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; @Service public class RedisTestUtil { @Autowired private RedisTemplate redisTemplate; public boolean set(final String key, Object value) { boolean result = false; try { ValueOperationsoperations = redisTemplate.opsForValue(); operations.set(key, value); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } public boolean set(final String key, Object value, Long expireTime, TimeUnit timeUnit) { boolean result = false; try { ValueOperations operations = redisTemplate.opsForValue(); operations.set(key, value); redisTemplate.expire(key, expireTime, timeUnit); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } public void remove(final String... keys) { for (String key : keys) { remove(key); } } public void removePattern(final String pattern) { Set keys = redisTemplate.keys(pattern); if (keys.size() > 0) { redisTemplate.delete(keys); } } public void remove(final String key) { if (exists(key)) { redisTemplate.delete(key); } } public boolean exists(final String key) { return redisTemplate.hasKey(key); } public Object get(final String key) { Object result = null; ValueOperations operations = redisTemplate.opsForValue(); result = operations.get(key); return result; } public void hmSet(String key, Object hashKey, Object value) { HashOperations hash = redisTemplate.opsForHash(); hash.put(key, hashKey, value); } public Map hashGetAll(final String key) { return redisTemplate.opsForHash().entries(key); } public Object hmGet(String key, Object hashKey) { HashOperations hash = redisTemplate.opsForHash(); return hash.get(key, hashKey); } public void hashDelete(String key, Object... hashKey){ redisTemplate.opsForHash().delete(key,hashKey); } public void lPush(String k, Object v) { ListOperations list = redisTemplate.opsForList(); list.rightPush(k, v); } public List lRange(String k, long l, long l1) { ListOperations list = redisTemplate.opsForList(); return list.range(k, l, l1); } public void add(String key, Object value) { SetOperations set = redisTemplate.opsForSet(); set.add(key, value); } public Set setMembers(String key) { SetOperations set = redisTemplate.opsForSet(); return set.members(key); } public void zAdd(String key, Object value, double scoure) { ZSetOperations zset = redisTemplate.opsForZSet(); zset.add(key, value, scoure); } public Set rangeByScore(String key, double scoure, double scoure1) { ZSetOperations zset = redisTemplate.opsForZSet(); return zset.rangeByScore(key, scoure, scoure1); } public boolean hexists(String key, String field) { return redisTemplate.opsForHash().hasKey(key, field); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)