spring data redis是spring提供的redis操作库,官网链接,spring data redis提供了几乎包括全部redis命令的操作方法。本文以在spring boot中的使用为说明。
开始使用
安装
添加依赖
maven:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
配置
redis配置以spring.redis为前缀,以下为yaml配置示例:
spring:redis:host: localhostport: 6379...
配置属性列表,全部属性查看RedisProperties类
| 属性 | 详情 | 默认值 |
|---|---|---|
| database | redis database | 0 |
| host | redis服务器主机 | localhost |
| password | redis服务器登录密码 | |
| port | redis服务器端口 | 6379 |
| cluster.nodes | redis集群节点列表,格式:host:port | |
| jedis.pool | jedis连接池配置 | |
| lettuce.pool | lettuce连接池配置 |
redis template
redis template是spring data redis提供的操作工具类,在配置完成后就可以注入使用
@Autowriedprivate RedisTemplate redisTemplate;// 设置"test:key"的值为"value"redisTemplate.opsForValue().set("test:key", "value");// 获取"test.key"的值,返回"value"redisTemplate.opsForValue().get("test.key");
使用说明
value
template value操作包括redis key和value的操作命令
// 设置test:key的值为"value"redisTemplate.opsForValue().set("test:key", "value");// 设置test:key的值为"value",设置test:key在5秒后过期redisTemplate.opsForValue().set("test:key", "value", 5, TimeUnit.SECONDS);// 当test:key不存在时,设置test:key的值为"value",如果test:key已经存在则不修改值redisTemplate.opsForValue().setIfAbsent("test:key", "value");// 获取test:key的值redisTemplate.opsForValue().get("test:key");// 获取test:key的旧值,并设置新值为"new"redisTemplate.opsForValue().getAndSet("test:key", "new");Map<String, String> map = new HashMap<>();map.put("test:key1", "value1");map.put("test:key2", "value2");// 同时设置多个kvredisTemplate.opsForValue().multiSet(map);List<String> keys = new ArrayList<>();keys.add("test:key1");keys.add("test:key2");// 同时获取多个kv,返回map类型redisTemplate.opsForValue().multiGet(keys);redisTemplate.opsForValue().set("test:int", "10");// 为test:int添加10,新值为20,也可以是负数,则执行减操作redisTemplate.opsForValue().increment("test:int", 10);redisTemplate.opsForValue().set("test:str", "a");// 为test:str的值后面拼接"1",新值为"a1"redisTemplate.opsForValue().append("test:str", "1");
hash
template hash操作提供了hash相关的命令实现
// 删除test:hash的hashKey key1redisTemplate.opsForHash().delete("test:hash", "key1");// 也可以同时删除多个redisTemplate.opsForHash().delete("test:hash", "key1", "key2", "key3");// 判断test:hash有没有hashKey key1redisTemplate.opsForHash().hasKey("test:hash", "key1");// 获取test:hash的hashKey key1的值redisTemplate.opsForHash().get("test:hash", "key1");List<String> keys = new ArrayList<>();keys.add("key1");keys.add("key2");// 同时获取多个redisTemplate.opsForHash().multiGet(keys);redisTemplate.opsForHash().put("test:hash", "int", "5");// 为test:hash的hashKey int添加10,新值为20,也可以是负数,执行减法操作redisTemplate.opsForHash().increment("test:hash", "int", "10");// 获取test:hash全部的hashKeyredisTemplate.opsForHash().keys("test:hash");// 获取test:hash全部的hashKey的数量redisTemplate.opsForHash().size("test:hash");// 设置test:hash的hashKey key的值为valueredisTemplate.opsForHash().put("test:hash", "key", "value");// 当test:hash不存在hashKey key时,设置test:hash的hashKey key的值为new,如果存在则不修改redisTemplate.opsForHash().putIfAbsent("test:hash", "key", "new");Map<String, String> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");// 批量插入多个值redisTemplate.opsForHash().putAll("test:hash", map);// 获取test:hash的全部值redisTemplate.opsForHash().values("test:hash");// 获取test:hash的全部键值redisTemplate.opsForHash().entries("test:hash");
list
redis template list提供了redis list相关操作
// 返回test:list下标0-1的元素列表redisTemplate.opsForList().range("test:list", 0, 1);redisTemplate.opsForList().
