SpringBoot学习(五)-----Redis集成

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

Redis是一个NoSQL数据库,意思是not   only  sql(不仅仅是sql),场用作缓存Cache使用、通过Redis客户端可以使用多种语言在程序中,访问Redis数据。java语言使用的客户端有Jedis,lettuce,Redisson等

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

在Springboot框架在,使用RedisTemplate、StringRedisTemplate模板类操作Redis

使用Redis的准备工作

安装Redis客户端和服务器端,实现数据的可查询,在Redis的官网中只有linux的版本,该版本为微软改造之后可以在Windows上运行的版本,不是官方版本,解压Redis后打开服务器端和客户端

 redisclient-win32.x86_64.2.0.jar是Redis的图形界面的操作客户端。

在文件所在位置打开cmd,执行java -jar  redisclient-win32.x86_64.2.0.jar 就可以了

使用Redis

RedisTemplate的使用

创建一个新的Springboot项目,勾选Redis依赖

<!--        Redis起步依赖,添加后可以直接使用RedisTemplate、StringRedisTemplate类对Redis进行操作-->
<!-- RedisTemplate 使用的是lettuce客户端,使用RedisTemplate类的方法就是调用lettuce客户端的方法-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

 在application中配置Redis

#设置redis连接的地址
spring.redis.host=localhost
#设置Redis的端口号
spring.redis.port=6379
#设置Redis的密码,没有密码可以注释掉
#spring.redis.password=******

 编写controller,向Redis写入数据,和读取数据

package com.ys.controller;

import org.springframework.data.redis.core.RedisTemplate;
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;

@RestController
public class RedisController {
    /**
     * 在项目中注入RedisTemplate类
     * RedisTemplate的泛型
     * RedisTemplate<String,String>
     * RedisTemplate<Object,Object>
     * RedisTemplate
     * */
    @Resource
    private RedisTemplate redisTemplate;
//    添加数据到Redis
    @PostMapping("/addRedis")
    public String addRedis(String name,Integer age){
//        操作String中的string类型的数据  创建ValueOperations对象
        ValueOperations valueOperations=redisTemplate.opsForValue();
//        添加数据到Redis
        valueOperations.set("lisi",23);
        return "向Redis添加String类型的数据";
    }
//    获取Redis中的数据
    @GetMapping("/getRedis")
    public String getRedis(String k){
        //        操作String中的string类型的数据  创建ValueOperations对象
        ValueOperations valueOperations=redisTemplate.opsForValue();
        Object v =valueOperations.get(k);
        return "k="+k+"v="+v;
    }

}

使用PostMan工具,发送请求,查看结果

 

 使用Redis的客户端,查询数据

 StringRedisTemplate的使用

package com.ys.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.*;

import javax.annotation.Resource;

@RestController
public class RedisController {
    /**
     * 在项目中注入RedisTemplate类
     * RedisTemplate的泛型
     * RedisTemplate<String,String>
     * RedisTemplate<Object,Object>
     * RedisTemplate
     * */

    @Resource
    private StringRedisTemplate stringRedisTemplate;

//    使用路径变量添加数据和stringRedisTemplate
    @PostMapping("/setRedis/{k}/{v}")
    public String setRedis(@PathVariable String k,
                           @PathVariable String v){
        stringRedisTemplate.opsForValue().set(k, v);
        return "使用stringRedisTemplate添加数据";
    }

//获取对象
    @GetMapping("/ourRedis")
    public String ourRedis(String k){
      String s= stringRedisTemplate.opsForValue().get(k);
        return k+"的值是:"+s;
    }

}

使用postman发送请求,查看结果

使用Redis客户端查看数据

  StringRedisTemplate和 RedisTemplate的区别

 StringRedisTemplate:把k,v都是作为String处理,使用的是String的序列化,可读性好。默认使用的是字符串的序列化机。

 RedisTemplate:把k,v都作了序列化后存到Redis,k,v都是序列化的内容,可读性差。默认的使用的是JDK序列化机制。

序列化

序列化:把对象转化为可传输的字节序列过程

反序列化:把字节序列化还原为对象的过程

序列化的目的:是为了对象可以跨平台存储,和进行网络传输。

序列化的方式:只是一种拆装组装对象的规则,这种规则多种多样,常见的有JDK(不支持跨语言),JSON,XML,Hessian,Kryo,Thrift(不支持跨语言),Protostuff

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

json序列化:把对象转化为JSON格式{"k1":"v1","k2":"v2"},或者JSON转为对象

修改RedisTemplate的序列化

在使用RedisTemplat时,需要在存取值之前修改序列化

package com.ys.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.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
public class RedisController {
    /**
     * 在项目中注入RedisTemplate类
     * RedisTemplate的泛型
     * RedisTemplate<String,String>
     * RedisTemplate<Object,Object>
     * RedisTemplate
     * */
    @Resource
    private RedisTemplate redisTemplate;
    /**
     * 设置RedisTemplate的序列化
     * 可以单独对k,v分别进行设置
     * 也可以同时设置
     * */
    @PostMapping("/addString")
    public String addString(String k,String v){
//       修改RedisTemplate的键(k)的序列化为字符串
        redisTemplate.setKeySerializer(new StringRedisSerializer());
//       修改RedisTemplate的值(v)的序列化为字符串
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.opsForValue().set(k,v);
        return "修改RedisTemplate的序列化";
    }

}

postman发送请求

使用客户端查看数据,修改成功

 

 JSON序列化

   /**
     * 使用json序列化 把java对象转化为json存储
     * */
    @PostMapping("/setJson")
    public String setJson(){
        Student student=new Student("chengliu",27);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));
        redisTemplate.opsForValue().set("myJson",student);
        return "值使用JSON的序列化"; 
    }

postman发生请求

客户端查看数据

 

  JSON反序列化

    @GetMapping("/getJson")
    public String getJson(){
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));
        Object o=redisTemplate.opsForValue().get("myJson");
        return "JSON的反序列化:"+o;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值