概述:
Redis是一个基于内存的数据库,提供了字符串(String), 哈希(Map), 列表(list), 集合(sets)多种数据类型。而RedisTemplate是Spring Data Redis提供给用户的最高级的抽象客户端,用户可直接通过RedisTemplate进行多种操作。
依赖文件:
<!-- springboot整合redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
RedisConfig(redis配置类,数据序列化设置):
/**
* @Author: zjh
* @Description:
* @Date: Create in 16:23 2019/11/27
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
// 配置redisTemplate
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
RedisSerializer stringSerializer = new StringRedisSerializer();
// key序列化
redisTemplate.setKeySerializer(stringSerializer);
// value序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// Hash key序列化
redisTemplate.setHashKeySerializer(stringSerializer);
// Hash value序列化
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
application.properties
#redis配置
#Matser的ip地址
spring.redis.host=127.0.0.1
#端口号
spring.redis.port=6379
#如果有密码
spring.redis.password=admin
#客户端超时时间单位是毫秒 默认是2000
spring.redis.timeout=10000
#最大空闲数
spring.redis.maxIdle=300
#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
#redis.maxActive=600
#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
spring.redis.maxTotal=1000
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
spring.redis.maxWaitMillis=1000
#连接的最小空闲时间 默认1800000毫秒(30分钟)
spring.redis.minEvictableIdleTimeMillis=300000
#每次释放连接的最大数目,默认3
spring.redis.numTestsPerEvictionRun=1024
#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
spring.redis.timeBetweenEvictionRunsMillis=30000
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
spring.redis.testOnBorrow=true
#在空闲时检查有效性, 默认false
spring.redis.testWhileIdle=true
常用数据类型:
String:
- 设置缓存过期时间:redisTemplate.expire(String key, Long time, TimeUnit timeUnit)
- 判断key是否存在:redisTemplate.hasKey(String key)
- 设置key和Value:redisTemplate.opsForValue().set(String key,Object value)
- 根据key获取value:redisTemplate.opsForValue().get(String key)
- 根据key删除缓存:redisTemplate.delete(String key)
- 根据key,自增value:redisTemplate.opsForValue().increment(String key,Long num)
- 根据key,自减value:redisTemplate.opsForValue().decrement(String key,Long num)
List:
- 根据key获取List的长度:redisTemplate.opsForList().size(String key)
- 从List左边插入值:redisTemplate.opsForList().leftPush(String key,Object value)
- 从List左边插入一个数组:redisTemplate.opsForList().leftPushAll(String key,String[] strs)
- 从List右边插入值:redisTemplate.opsForList().rightPush(String key,Object value)
- 从List右边插入一个数组:redisTemplate.opsForList().rightPushAll(String key,String[] strs)
- 根据索引位置设置值:redisTemplate.opsForList().set(String key,Long index,Object value)
- 根据索引位置获取值:redisTemplate.opsForList().index(String key,Long index)
- 根据key获取List所有值:redisTemplate.opsForList().range(String key,0,-1)
- 根据key从List左边删除一个value:redisTemplate.opsForList().leftPop(String key)
- 根据key从List右边删除一个value:redisTemplate.opsForList().rightPop(String key)
Hash
- 根据key设置HashMap指定项的值:redisTemplate.opsForHash().put(String key,String hashKey,Object hashValue)
- 根据key设置HashMap值:redisTemplate.opsForHash().putAll(String key, HashMap<String, Object> hashMap)
- 删除指定hashKey和hashValue,可以是多个:redisTemplate.opsForHash().delete(String key,String… hashKeys)
- 判断指定key下的hashkey是否存在:redisTemplate.opsForHash().hasKey(String key,String hashKey)
- 获取指定key和hashkey下的value值:redisTemplate.opsForHash().get(String key,String hashKey)
- 获取指定key的Hash表长度:redisTemplate.opsForHash().size(String key)
- 获取指定hash的所有key:redisTemplate.opsForHash().keys(String key)
- 获取指定hash的所有的value:redisTemplate.opsForHash().values(String key)
- 获取指定hash表的所有键值对:redisTemplate.opsForHash().entries(String key)
Set
- 根据key获取所有的Set集合:redisTemplate.opsForSet().members(String key)
- 根据key和value判断是否存在value:redisTemplate.opsForSet().isMember(String key,Object value)
- 设置value值,可以是多个:redisTemplate.opsForSet().add(String key,Object… values)
- 删除指定的values,可以是多个:redisTemplate.opsForSet().remove(String key,Object… values)
- 获取Set的长度:redisTemplate.opsForSet().size(String key)
测试类:
@SpringBootTest
public class RedisTests {
@Autowired
RedisTemplate redisTemplate;
@Test
public void redisTest(){
redisTemplate.opsForHash().put("hashMap","hashKey","hashValue");
}
}