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: localhost
port: 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提供的操作工具类,在配置完成后就可以注入使用
@Autowried
private 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");
// 同时设置多个kv
redisTemplate.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 key1
redisTemplate.opsForHash().delete("test:hash", "key1");
// 也可以同时删除多个
redisTemplate.opsForHash().delete("test:hash", "key1", "key2", "key3");
// 判断test:hash有没有hashKey key1
redisTemplate.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全部的hashKey
redisTemplate.opsForHash().keys("test:hash");
// 获取test:hash全部的hashKey的数量
redisTemplate.opsForHash().size("test:hash");
// 设置test:hash的hashKey key的值为value
redisTemplate.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().