SpringBoot整合Redis 之 StringRedisTemplate、RedisTemplate 基础

stringRedisTemplate.opsForValue().append(“name”, “他是一个好人!”);

List 常用操作


所有 List 的操作都是通过 StringRedisTemplate.opsForList(); 实现。

从左边往列表中放入一个元素:

stringRedisTemplate.opsForList().leftPush(“lists”, “振宇”);

从左边往列表中放入多个元素(两种方法):

stringRedisTemplate.opsForList().leftPushAll(“lists”, “张三”, “李四”, “王五”);

List names = new ArrayList<>();

names.add(“xiaoming”);

names.add(“xiaosan”);

stringRedisTemplate.opsForList().leftPushAll(“lists”, names);

遍历整个 List:

List stringList = stringRedisTemplate.opsForList().range(“lists”, 0, -1);// 遍历list

stringList.forEach(v -> System.out.println("value = " + v));

保留截取的指定区间的 List:

stringRedisTemplate.opsForList().trim(“lists”, 1, 3);

Set 常用操作


所有 Set 的操作都是通过 StringRedisTemplate.opsForSet(); 实现。

创建 Set 并放入多个元素:

stringRedisTemplate.opsForSet().add(“sets”, “张三”, “张三”, “李四”, “振宇”); // 创建set 并放入多个元素

查看 Set 中所有成员:

Set sets = stringRedisTemplate.opsForSet().members(“sets”);

sets.forEach(value -> System.out.println("value = " + value));

获取 Set 中元素个数:

Long size = stringRedisTemplate.opsForSet().size(“sets”);

ZSet 常用操作


所有 ZSet 的操作都是通过 StringRedisTemplate.opsForZSet(); 实现。

创建 ZSet 并放入元素:

stringRedisTemplate.opsForZSet().add(“zsets”, “小黑”, 20);

指定范围进行查询:

// 遍历所有元素

Set zsets = stringRedisTemplate.opsForZSet().range(“zsets”, 0, -1);

zsets.forEach(value-> System.out.println(value));

获取指定元素以及分数(可以指定分数范围):

// 获取分数范围在 0 -1000 之间的元素 并排序

Set<ZSetOperations.TypedTuple> zsets1 = stringRedisTemplate.opsForZSet().rangeByScoreWithScores(“zsets”, 0, 1000);

zsets1.forEach(typedTuple ->{

System.out.println("value = " + typedTuple.getValue() + ", score = " + typedTuple.getScore());

});

Hash 常用操作


所有 Hash 的操作都是通过 StringRedisTemplate.opsForHash(); 实现。

往指定 Hash 中放入一个 key,value:

stringRedisTemplate.opsForHash().put(“maps”, “name”, “zhangsan”);

往指定 Hash 中放入多个 key,value:

Map<String, String> map = new HashMap<>();

map.put(“age”, “12”);

map.put(“bir”, “2012-12-12”);

stringRedisTemplate.opsForHash().putAll(“maps”, map); // 放入多个key, value

获取指定 Hash 中某个 key 的 value:

String value = (String) stringRedisTemplate.opsForHash().get(“maps”, “name”);

获取指定 Hash 中多个 key 的 value:

List values = stringRedisTemplate.opsForHash().multiGet(“maps”, Arrays.asList(“name”, “age”));

values.forEach(value -> System.out.println(value));

获取指定 Hash 中所有 key,获取所有 value:

Set keys = stringRedisTemplate.opsForHash().keys(“maps”); // 获取所有keys

List vals = stringRedisTemplate.opsForHash().values(“maps”); // 获取所有values

Key 的绑定操作 Bound


Spring Data 为了方便我们对 redis 进行更友好的操作,提供了 bound api 简化操作。

如果日后对某一个 key 的操作极其频繁,可以将这个 key 绑定到对应 redistemplate 中,可以简化操作。

  • boundValueOps 用来对 String 值绑定 key

  • boundListOps 用来对 List 值绑定 key

  • boundSetOps 用来对 Set 值绑定 key

  • boundZSetOps 用来对 ZSet 值绑定 key

  • boundHashOps 用来对 Hash 值绑定 key

原本代码可能需要这么写:

stringRedisTemplate.opsForValue().set(“name”, “zhangsan”);

stringRedisTemplate.opsForValue().append(“name”, “是一个好人”);

String s = stringRedisTemplate.opsForValue().get(“name”);

System.out.println(s);

绑定后只需要这么写:

BoundValueOperations<String, String> nameValueOperations = stringRedisTemplate.boundValueOps(“name”);

nameValueOperations.set(“zhangsan”);

nameValueOperations.append(“是一个好人”);

String name = nameValueOperations.get();

对 List 进行绑定:

BoundListOperations<String, String> listsOperations = stringRedisTemplate.boundListOps(“lists”);

listsOperations.leftPushAll(“张三”, “李四”, “小陈”);

List lists = listsOperations.range(0, -1);

lists.forEach(list-> System.out.println(list));

redis 中每个数据类型都可以进行绑定,与上面同理。

RedisTemplate 基本使用

=====================================================================================

RedisTemplate 的用法和 StringRedisTemplate 基本一样,我们关注他们的不同之处!

RedisTemplateStringRedisTemplate 的区别主要在于他们使用的序列化类:

  • RedisTemplate 使用的是 JdkSerializationRedisSerializer,存入数据时,会将数据先序列化成字节数组,然后再存入 Redis 数据库。;

  • StringRedisTemplate 使用的是 StringRedisSerializer


通过@Autowired注解的方式注入 RedisTemplate 对象:

@Autowired

private RedisTemplate redisTemplate; //存储对象

想要存入 redis 的对象必须实现序列化接口:

@Data

@AllArgsConstructor

@NoArgsConstructor

@Accessors(chain = true)

public class User implements Serializable { // 实现序列化接口

private String id;

private String name;

private Integer age;

private Date bir;

}

RedisTemplate 基本操作


往 redis 中存入一个 User 对象:

redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); // 指定值使用对象序列化

// 往redis中存入一个User对象

redisTemplate.opsForValue().set(“user”, new User(“21”, “小黑”, 23, new Date()));

// 根据值获取存入的User对象

User user = (User) redisTemplate.opsForValue().get(“user”);

System.out.println(user);

需要注意的是,如果通过 redis 客户端查看其中的数据,无法正常显示 key 名,如下图:

在这里插入图片描述

在这里插入图片描述

RedisTemplate 正常往 redis 中存入 String 数据与 StringRedisTemplate 用法几乎一样,但是如果存放的是 String 类型数据则更推荐 StringRedisTemplate 而不是 RedisTemplate

redisTemplate.opsForList().leftPushAll(“lists”, “hello”, “world”);

List lists = redisTemplate.opsForList().range(“lists”, 0, -1);

lists.forEach(list -> System.out.println(list));

RedisTemplate 与 StringRedisTemplate 数据互不相通


RedisTemplate 和 StringRedisTemplate 的数据是不相通的!

1、StringRedisTemplate 往 redis 中存入一个 String 类型的值,分别尝试获取值:

  • RedisTemplate 无法获取到;

  • StringRedisTemplate 可以获取到;

stringRedisTemplate.opsForValue().set(“name”, “zhenyu”);

Object name1 = redisTemplate.opsForValue().get(“name”);

System.out.println(name1); // null

String name2 = stringRedisTemplate.opsForValue().get(“name”);

System.out.println(name2); // zhenyu

注:如果是在客户端中操作,视为使用 StringRedisTemplate

2、RedisBuilder 往 redis 中存入一个 User 对象,分别尝试获取值:

  • RedisTemplate 可以获取到;

  • StringRedisTemplate 无法获取到;

redisTemplate.opsForValue().set(“user”, new User(“21”, “zhenyu”, 23, new Date()));

User user1 = (User) redisTemplate.opsForValue().get(“user”);

System.out.println(user1); // User(id=21, name=zhenyu, age=23, bir=Sat Jul 04 10:17:12 CST 2020)

String user2 = stringRedisTemplate.opsForValue().get(“user”);

System.out.println(user2); // null

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

image

User user1 = (User) redisTemplate.opsForValue().get(“user”);

System.out.println(user1); // User(id=21, name=zhenyu, age=23, bir=Sat Jul 04 10:17:12 CST 2020)

String user2 = stringRedisTemplate.opsForValue().get(“user”);

System.out.println(user2); // null

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

[外链图片转存中…(img-8Xjz96If-1714149778046)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是SpringBoot整合Redis的步骤: 1. 在pom.xml中引入Redis的依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 在application.properties或application.yml中配置Redis连接信息,例如: ``` spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= spring.redis.database=0 ``` 3. 创建RedisConfig类,配置RedisTemplateStringRedisTemplate: ``` @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } @Bean public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); stringRedisTemplate.setConnectionFactory(redisConnectionFactory); return stringRedisTemplate; } } ``` 4. 在需要使用Redis的地方注入RedisTemplateStringRedisTemplate,并使用相应方法操作Redis,例如: ``` @Autowired private RedisTemplate<String, Object> redisTemplate; public void set(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object get(String key) { return redisTemplate.opsForValue().get(key); } ``` 以上就是SpringBoot整合Redis的基本步骤,希望能够帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值