spring data redis是spring提供的redis操作库,官网链接,spring data redis提供了几乎包括全部redis命令的操作方法。本文以在spring boot中的使用为说明。

开始使用

安装

添加依赖
maven:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>

配置

redis配置以spring.redis为前缀,以下为yaml配置示例:

  1. spring:
  2. redis:
  3. host: localhost
  4. port: 6379
  5. ...

配置属性列表,全部属性查看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提供的操作工具类,在配置完成后就可以注入使用

  1. @Autowried
  2. private RedisTemplate redisTemplate;
  3. // 设置"test:key"的值为"value"
  4. redisTemplate.opsForValue().set("test:key", "value");
  5. // 获取"test.key"的值,返回"value"
  6. redisTemplate.opsForValue().get("test.key");

使用说明

value

template value操作包括redis key和value的操作命令

  1. // 设置test:key的值为"value"
  2. redisTemplate.opsForValue().set("test:key", "value");
  3. // 设置test:key的值为"value",设置test:key在5秒后过期
  4. redisTemplate.opsForValue().set("test:key", "value", 5, TimeUnit.SECONDS);
  5. // 当test:key不存在时,设置test:key的值为"value",如果test:key已经存在则不修改值
  6. redisTemplate.opsForValue().setIfAbsent("test:key", "value");
  7. // 获取test:key的值
  8. redisTemplate.opsForValue().get("test:key");
  9. // 获取test:key的旧值,并设置新值为"new"
  10. redisTemplate.opsForValue().getAndSet("test:key", "new");
  11. Map<String, String> map = new HashMap<>();
  12. map.put("test:key1", "value1");
  13. map.put("test:key2", "value2");
  14. // 同时设置多个kv
  15. redisTemplate.opsForValue().multiSet(map);
  16. List<String> keys = new ArrayList<>();
  17. keys.add("test:key1");
  18. keys.add("test:key2");
  19. // 同时获取多个kv,返回map类型
  20. redisTemplate.opsForValue().multiGet(keys);
  21. redisTemplate.opsForValue().set("test:int", "10");
  22. // 为test:int添加10,新值为20,也可以是负数,则执行减操作
  23. redisTemplate.opsForValue().increment("test:int", 10);
  24. redisTemplate.opsForValue().set("test:str", "a");
  25. // 为test:str的值后面拼接"1",新值为"a1"
  26. redisTemplate.opsForValue().append("test:str", "1");

hash

template hash操作提供了hash相关的命令实现

  1. // 删除test:hash的hashKey key1
  2. redisTemplate.opsForHash().delete("test:hash", "key1");
  3. // 也可以同时删除多个
  4. redisTemplate.opsForHash().delete("test:hash", "key1", "key2", "key3");
  5. // 判断test:hash有没有hashKey key1
  6. redisTemplate.opsForHash().hasKey("test:hash", "key1");
  7. // 获取test:hash的hashKey key1的值
  8. redisTemplate.opsForHash().get("test:hash", "key1");
  9. List<String> keys = new ArrayList<>();
  10. keys.add("key1");
  11. keys.add("key2");
  12. // 同时获取多个
  13. redisTemplate.opsForHash().multiGet(keys);
  14. redisTemplate.opsForHash().put("test:hash", "int", "5");
  15. // 为test:hash的hashKey int添加10,新值为20,也可以是负数,执行减法操作
  16. redisTemplate.opsForHash().increment("test:hash", "int", "10");
  17. // 获取test:hash全部的hashKey
  18. redisTemplate.opsForHash().keys("test:hash");
  19. // 获取test:hash全部的hashKey的数量
  20. redisTemplate.opsForHash().size("test:hash");
  21. // 设置test:hash的hashKey key的值为value
  22. redisTemplate.opsForHash().put("test:hash", "key", "value");
  23. // 当test:hash不存在hashKey key时,设置test:hash的hashKey key的值为new,如果存在则不修改
  24. redisTemplate.opsForHash().putIfAbsent("test:hash", "key", "new");
  25. Map<String, String> map = new HashMap<>();
  26. map.put("key1", "value1");
  27. map.put("key2", "value2");
  28. // 批量插入多个值
  29. redisTemplate.opsForHash().putAll("test:hash", map);
  30. // 获取test:hash的全部值
  31. redisTemplate.opsForHash().values("test:hash");
  32. // 获取test:hash的全部键值
  33. redisTemplate.opsForHash().entries("test:hash");

list

redis template list提供了redis list相关操作

  1. // 返回test:list下标0-1的元素列表
  2. redisTemplate.opsForList().range("test:list", 0, 1);
  3. redisTemplate.opsForList().

set

sorted set

序列化器

应用场景