当前位置: 首页 > 图灵资讯 > 技术篇> 集成Redis

集成Redis

来源:图灵教育
时间:2023-06-07 09:48:06

1.Redis简介66

Spring,在Springbot中,Redistemplatetete(StringRedisTemplate),与redis交互处理与redis交互

Redis是NoSQL数据库,常用于缓存Cache。通过Redis客户端可以使用多种方式

在程序中,语言访问Redis数据。

Redis的数据类型:string,hash,set,zset,list

Redis是一个中间件:一个独立的服务器。

java中著名的客户端:Jedis,lettuce,Redisson

在SpringBoot中使用Redistemplate(Stringredistemplate)模板类操作Redis数据。

1.1需求66

需求:根据学生的id完善学生的功能,先从redis缓存中找到。如果找不到,再从数

在数据库中搜索,然后放入redis缓存中

2.配置Windows版redis672.1redis客户端和服务端67

Redis-x64-3.2.100.rar解压缩到一个非中文目录

我放在E:\java\tools\Redis

redis-server.exe:服务端,启动后不要关闭(可以最小化)

redis-cli.exe:客户端,访问redis中的数据
我们在客户端输入几个数据,看看是否可以使用。OK没问题

集成Redis_springboot

2.2Redis图形界面客户端677

redisclient-win32.x86_64.2.0.jar:Redis图形界面客户端

执行方法:在本文件所在的目录cmd中执行java-jarredisclient-win32.x86_64.2.0.jar

集成Redis_redis_02

启动成功后,点击左上角的Server---add

集成Redis_redis_03

集成Redis_springboot_04

3.集成Redis步骤683.1使用Redistemplatepomeplatepomm.xml68

lettuce客户端库使用Redistemplate

<!--redis起步依赖: Redistemplatet直接用于项目(StringRedisTemplate)--><dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-data-redis</artifactId></dependency>data-使用redis   lettuce 客户端库

在程序中,redistemplate类的方法用于操作redis数据,实际上是调用lettuce客户端的方法

aplication核心配置文件.properties69
server.port=9001server.servlet.context-path=/myredis#指定redis (host,ip,password)   69spring.redis.host=localhostspring.redis.port=6379#密码设置没有密码注释#spring.redis.password=
创建Rediscontroler700
package com.bjpowernode.controller;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.core.ValueOperations;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;////演示Redis的使用  70@RestController //复合注释, 是@Controller 与@Responsebody组合。public class RedisController {    /**     * 注入Redistemplatetet     *     * RedisTemplate 泛型     * RedisTemplate     * RedisTemplate     * RedisTemplate     *     * 注意: Redistemplate对象的名称 redisTemplate     */    @Resource  //注入Redistemplatetet    private RedisTemplate redisTemplate;    ///将数据添加到redis中  70    @PostMapping("/redis/addstring")    public String addToRedis(String name,String value){        // 在Redis中操作string类型的数据, 首先获得Valueoperations对象        ValueOperations valueOperations = redisTemplate.opsForValue();        ///将数据添加到redis中        valueOperations.set("myname","lisi");        return “向redis添加string类型的数据”;    }    ////从redis中获取数据  71    @GetMapping("/redis/getk")    public String getData(String k){        ValueOperations valueOperations = redisTemplate.opsForValue();        Object v = valueOperations.get(k);        return “key是”+k+",他的价值是:“+v;    }}
启动Redis服务执行SpringBootaplication启动

集成Redis_序列化_05

使用Postman发送71测试71添加数据到redis71

选择post请求输入地址http://localhost:9001/myredis/redis/addstring

name添加参数=myname和value=lisi

发送请求,成功

集成Redis_redis_06

从redis中获取数据71

选择get请求输入http://localhost:9001/myredis/redis/getk

输入参数k=myname,成功

集成Redis_redis_07

3.2使用Stringredistemplate71rediscontrlerlerlerler
package com.bjpowernode.controller;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.core.ValueOperations;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;////演示Redis的使用  70@RestController //复合注释, 是@Controller 与@Responsebody组合。public class RedisController {    @Resource  ///注入Stringredistemplateteteteter  71    private StringRedisTemplate stringRedisTemplate;    ///使用Stringredistemplatetelatet  71    ///添加数据  71    @PostMapping("/redis/{k}/{v}")    public String addStringKV(@PathVariable String k,                              @PathVariable  String v){        // 使用Stringredistemplate对象        stringRedisTemplate.opsForValue().set(k,v);        return “使用Stringredistemplate对象”;    }    ///取出数据 71    @GetMapping("/redis/getstr/{k}")    public String getStringValue(@PathVariable  String k){        String v  = stringRedisTemplate.opsForValue().get(k);        return "k的value:"+v;    }}

添加数据

集成Redis_redis_08

取出数据

集成Redis_redis_09

4.比较StringRedistemplate和Redistemplate71

StringRedisTemplate:将k、v作为String处理,使用String序列化,可读性好

RedisTemplate通过序列化将k、v存储到redis。k,v是序列化的内容,不能直接识别.

JDK序列化默认使用,可以修改为其他序列化

序列化:将对象转换为可传输字节序列的过程称为序列化。

反序列化:将字节序列还原为对象的过程称为反序列化。

4.1为什么需要序列化71

序列化的最终目的是跨平台存储和网络传输对象。我们的跨平台存储和网络传输是IO,我们的IO支持的数据格式是字节数组。当我们将对象转换为字节数组时,我们必须制定一个规则(序列化),然后当我们从IO流中读取数据时,我们会恢复对象(反序列化)。

4.2在什么情况下需要序列化71

通过以上,我想你已经知道,所有需要“跨平台存储”和“网络传输”的数据都需要序列化。本质上,存储和网络传输需要将对象状态保存到跨平台识别的字节格式中,然后其他平台可以通过字节信息分析恢复对象信息。

4.3序列化方法71

序列化只是拆装对象的一种规则,所以这种规则肯定有很多种,比如现在常见的序列化方法有:

JDK(不支持跨语言)、JSON、XML、Hessian、Kryo(不支持跨语言)、Thrift、ProtoStuff

例如:JSON的序列化:Student(name=zs,age=20)----{"name":"zs","age":20}

java序列化:将java对象转换为byte[],二进制数据

4.4json序列化:71

json序列化功能将对象转换为JSON格式或从JSON格式转换对象。例如,将Student对象转换为JSON字符串{”name":"李四","age":反序列化(JSON字符串{”)name":"李四","age":29}转换为Student对象)

5.设置key或value的序列化方法725.1设置Redistemplate序列化为StringRedisserializerer

在存取值之前设置序列化

RedisController
/** 设置 RedisTemplate 序列化   72     *  可以设置 key 的序列化, value序列化可以设置     *  可同时设置 key 和 value序列化     */    @PostMapping("/redis/addstr")    public String  addString(String k,String v){        // 使用Redistemplatetet        // 设置 key 使用String序列化        redisTemplate.setKeySerializer( new StringRedisSerializer());        // 设置 value 的序列化        redisTemplate.setValueSerializer( new StringRedisSerializer());        redisTemplate.opsForValue().set(k,v);        return “定义Redistemplate对象的key,value序列化”;    }

在redis中查询没有问题

集成Redis_spring_11

6.idea生成序列化版本号73

设置-检查-无serialVersionUID的可序列化类

集成Redis_redis_12

然后alt+enter---添加serialversionUID字段

集成Redis_redis_13

6.1用SON序列化添加数据73-74Student
package com.bjpowernode.vo;import java.io.Serializable;public class Student implements Serializable {    private static final long serialVersionUID = 3625244033394044125L;    private Integer  id;    private String name;    private Integer age;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public String toString() {        return "Student{" +                "id=" + id +                ", name='" + name + '\'' +                ", age=" + age +                '}';    }}
RedisController
/**     * 使用json 序列化, 将java对象转化为json存储  74     */    @PostMapping("/redis/addjson")    public String  addJson(){        Student student  = new Student();        student.setId(1001);        student.setName("zhangsan");        student.setAge(20);        ///将key设置为string序列化        redisTemplate.setKeySerializer(new StringRedisSerializer());        // 把 值 作为json序列化        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));        redisTemplate.opsForValue().set("mystudent", student);        return “json序列化”;    }

集成Redis_redis_14

集成Redis_redis_15

6.2反json序列化取出数744

将我们存储的json序列格式的字符串反序列化为原始对象

RedisController
///反json序列化取出值  74    @GetMapping("/redis/getjson")    public String  getJson(){        redisTemplate.setKeySerializer(new StringRedisSerializer());        // 将值作为json序列化        redisTemplate.setValueSerializer( new Jackson2JsonRedisSerializer(Student.class) );        Object obj  = redisTemplate.opsForValue().get("mystudent");        return "json反序列化="+ obj;    }

上一篇:

集成Dubbo

下一篇:

请求转发和重定向