1.redis下载
https://www.runoob.com/redis/redis-install.html
启动
redis-server.exe redis.windows.conf
2.引入依赖
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.17</version>
</dependency>
<!--redis客户端-连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
3.application.yml
spring:
# redis配置
redis:
host: localhost
port: 6379
4.config.RedisConfig
//Redis配置类,需要用@Configuration注解标记这个类是一个配置类
//现在这个配置类是一个固定的模板,如果需要配置redis,直接拿走用即可
@Configuration
public class RedisConfig {
//编写我们自己的RedisTemplate
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
//Json序列化配置
//设置序列化的方式,想要用jackson序列化,直接new出它的对象,传object.class,表示解析任何的对象,放进setKeySerializer方法中即可
Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
objectJackson2JsonRedisSerializer.setObjectMapper(om);
//string的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
//hash的key采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//value的序列化采用jackson
template.setValueSerializer(objectJackson2JsonRedisSerializer);
//hash的value采用jackson
template.setHashValueSerializer(objectJackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
5.redis操作
1. 字符串(String)操作
设置值:redisTemplate.opsForValue().set(K key, V value)
获取值:redisTemplate.opsForValue().get(Object key)
追加值:redisTemplate.opsForValue().append(K key, String valueToAppend)
设置值及过期时间:redisTemplate.opsForValue().set(K key, V value, long timeout, TimeUnit unit)
2. 列表(List)操作
左侧添加:redisTemplate.opsForList().leftPush(K key, V... values)
右侧添加:redisTemplate.opsForList().rightPush(K key, V... values)
左侧弹出:redisTemplate.opsForList().leftPop(K key)
右侧弹出:redisTemplate.opsForList().rightPop(K key)
获取列表长度:redisTemplate.opsForList().size(K key)
获取指定范围:redisTemplate.opsForList().range(K key, long start, long end)
3. 集合(Set)操作
添加元素:redisTemplate.opsForSet().add(K key, V... values)
移除元素:redisTemplate.opsForSet().remove(K key, Object... values)
判断元素是否存在:redisTemplate.opsForSet().isMember(K key, Object o)
获取集合元素数量:redisTemplate.opsForSet().size(K key)
获取集合所有元素:redisTemplate.opsForSet().members(K key)
4. 有序集合(ZSet 或 SortedSet)操作
添加元素:redisTemplate.opsForZSet().add(K key, Set<TypedTuple<V>> tuples)
移除元素:redisTemplate.opsForZSet().remove(K key, Object... values)
增加分数:redisTemplate.opsForZSet().incrementScore(K key, V value, double delta)
获取元素分数:redisTemplate.opsForZSet().score(K key, Object o)
获取指定范围元素:redisTemplate.opsForZSet().rangeByScore(K key, double min, double max)
获取集合大小:redisTemplate.opsForZSet().size(K key)
5. 哈希(Hash)操作
添加键值对:redisTemplate.opsForHash().put(H key, HK hashKey, HV value)
获取值:redisTemplate.opsForHash().get(H key, Object hashKey)
删除键值对:redisTemplate.opsForHash().delete(H key, Object... hashKeys)
判断哈希中是否存在某个键:redisTemplate.opsForHash().hasKey(H key, Object hashKey)
获取哈希中所有键:redisTemplate.opsForHash().keys(H key)
获取哈希中所有值:redisTemplate.opsForHash().values(H key)
6. 其他操作
删除键:redisTemplate.delete(Object... keys)
判断键是否存在:redisTemplate.hasKey(Object key)
设置键的过期时间:redisTemplate.expire(K key, long timeout, TimeUnit unit)
获取键的剩余生存时间:redisTemplate.getExpire(K key, TimeUnit unit)