当前位置: 首页 > news >正文

RedisTemplate 的基本使用手把手教

下载实例源码

使用步骤
1、引入 spring-boot-starter-data-redis 依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、在 application.yml 配置 Redis 的信息

spring:redis:host: 127.0.0.1port: 6379password: 123456database: 0 # 几号库lettuce:pool:max-active: 8 # 最大连接max-idle: 8 # 最大空闲连接min-idle: 0 # 最小空闲连接max-wait: 100ms # 连接等待时间

3、注入 RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

Demo1

package com.test;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.test.context.junit4.SpringRunner;import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisDemoApplicationTest {// 注入 RedisTemplate@Autowiredprivate RedisTemplate redisTemplate;// String 类型@Testpublic void testString () {redisTemplate.opsForValue().set("name", "xiaobai");Object name = redisTemplate.opsForValue().get("name");System.out.println(name);}// Hash 类型@Testpublic void testHash () {redisTemplate.opsForHash().put("user1", "name", "clarence");redisTemplate.opsForHash().put("user1", "age", "25");Map map = redisTemplate.opsForHash().entries("user1");System.out.println(map);}// List 类型@Testpublic void testList () {redisTemplate.opsForList().leftPushAll("names", "xiaobai", "xiaohei", "xiaolan");List<String> names = redisTemplate.opsForList().range("names", 0, 3);System.out.println(names);}// Set 类型@Testpublic void testSet () {redisTemplate.opsForSet().add("set", "a", "b", "c");Set<String> set = redisTemplate.opsForSet().members("set");System.out.println(set);}// SortedSet 类型@Testpublic void testSortedSet () {redisTemplate.opsForZSet().add("class", "xiaobai", 90);Set aClass = redisTemplate.opsForZSet().rangeByScore("class", 90, 100);System.out.println(aClass);Set<ZSetOperations.TypedTuple<String>> set = new HashSet<>();set.add(new DefaultTypedTuple<>("xiaohei", 88.0));set.add(new DefaultTypedTuple<>("xiaohui", 94.0));set.add(new DefaultTypedTuple<>("xiaolan", 84.0));set.add(new DefaultTypedTuple<>("xiaolv", 82.0));set.add(new DefaultTypedTuple<>("xiaohong", 99.0));redisTemplate.opsForZSet().add("class", set);Set aClass1 = redisTemplate.opsForZSet().range("class", 0, 6);System.out.println(aClass1);}
}

序列化
1、默认是 JdkSerializationRedisSerializer

RedisTemplate 可以接收任意 Object 作为值写入 Redis,不过在写入前会把 Object 序列化为字节形式,默认是采用 JDK 序列化,上面的 demo 运行后得到的结果如下:
在这里插入图片描述
缺点:可读性差;内存占用较大
2、添加配置文件,使用 String 序列化、Json 序列化

Redis 配置文件

package com.test.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {// 创建 RedisTemplate 对象RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// 设置连接工厂redisTemplate.setConnectionFactory(connectionFactory);// 设置 Key 的序列化 - String 序列化 RedisSerializer.string() => StringRedisSerializer.UTF_8redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());// 设置 Value 的序列化 - JSON 序列化 RedisSerializer.json() => GenericJackson2JsonRedisSerializerredisTemplate.setValueSerializer(RedisSerializer.json());redisTemplate.setHashValueSerializer(RedisSerializer.json());// 返回return redisTemplate;}
}

引入 Jackson 依赖

<!--Jackson依赖-->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.4</version>
</dependency>

添加 User 实体类

package com.test.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private String name;private Integer age;
}

注意这里要安装lombok插件,同时引入lombok依赖

Demo2

package com.test;import com.test.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.test.context.junit4.SpringRunner;import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisDemoApplicationTest2 {// 注入 RedisTemplate@Autowiredprivate RedisTemplate redisTemplate;// String 类型@Testpublic void testString () {redisTemplate.opsForValue().set("name", "xiaobai");Object name = redisTemplate.opsForValue().get("name");System.out.println(name);}@Testpublic void testSaveUser() {redisTemplate.opsForValue().set("user", new User("小白", 23));User user = (User) redisTemplate.opsForValue().get("user");System.out.println(user);}
}

运行结果
在这里插入图片描述
StringRedisTemplate
从上述 Demo 的运行结果可以看到,为了在反序列化时知道对象的类型,Json 序列化会将类的 class 类型写入 json 结果中存入 Redis,会带来额外的内存开销

为了节省内存空间,我们并不会使用 json 序列化器来处理 value,而是统一使用 String 序列化器,要求只能存储 String 类型的 key 和 value。当需要存储 Java 对象时,手动完成对象的序列化和反序列化

spring 提供了一个 StringRedisTemplate 类,其 key 和 value 的序列化方式默认为 String 方式
引入 fastjson 依赖

<!--fastjson依赖-->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version>
</dependency>

运行结果
在这里插入图片描述

http://www.lryc.cn/news/23461.html

相关文章:

  • Hbase -- Compact工具梳理
  • 【java代码审计】SQL注入
  • 前置知识-辛 Runge-Kutta 方法
  • require 与 import 两种引入模块方式到底有什么区别?
  • 软考信息系统监理师备考建议
  • 第八届蓝桥杯省赛——4承压计算(二维数组,嵌套循环)
  • 【ECNU】3645. 莫干山奇遇(C++)
  • 为什么需要学习shell、shell的作用
  • pgsql-Create_ALTER_GRANT_REVOKE命令语法
  • 【linux】:进程概念
  • 创建对象的方式和对属性的操作
  • GO时间相关操作说明
  • 选择和分支结构
  • Elasticsearch总结笔记
  • Ubuntu 安装指定版本 Mysql,并设置远程连接(以安装mysql 5.5 为例)
  • NumPy:Python中的强大数学工具
  • Hbase资源隔离操作指南
  • TPS2012B泰克Tektronix隔离通道示波器
  • 9.4 PIM-DM
  • 程序员推荐的良心网站合集!
  • 信息安全概论之《密码编码学与网络安全----原理与实践(第八版)》
  • 跬智信息全新推出云原生数据底座玄武,助力国产化数据服务再次升级
  • 【离线数仓-9-数据仓库开发DWS层设计要点-DWS层汇总表以及数据装载】
  • 我的十年编程路 序
  • xs 180
  • 时间序列分析 | BiLSTM双向长短期记忆神经网络时间序列预测(Matlab完整程序)
  • 0101基础-认证授权-springsecurity
  • 一文简单了解THD布局要求
  • [C++]多态
  • 中国版ChatGPT高潮即将到来,解密ChatGPT底层网络架构