• redis在springcloud中的使用


    1.redis的使用场景

     做中央缓存,通过空间换时间

    特点:快、安全、持久、可用jedis  java客户端

    启动服务命令:redis-server.exe   redis.conf

    2.优化的好处

    每次请求都要从数据库中查询数据,对数据库服务器压力很大;

    3.常用的缓存实现

    jpa/mybits的二级缓存,但是不能支持集群;所以用到了redis

    4.怎么实现交互

    前台请求-》先从redis中查询数据,有就之久返回数据;没有查询到数据就从数据库中查询,并同步到redis中,再返回前台;

    5.保证redis中数据与数据库中的数据一致

    修改时,先修改数据库中的数据再同步到redis中

    6.redis怎么储存对象

    序列化和json字符串(采纳),,,一般使用json字符串的方式

    --1:存:

      就是把数据库的数据存到redis(json字符串)

    --2:取:

      就是把redis(json字符串)的数据转换成对象

    --3对象与json字符串的转换

    我们使用到了 Alibaba:fastjson---功能很强大

    7.redis的项目实战

    --导包

    <!--redis的依赖-->
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    </dependency>



    --创建一个redis的一个工具类

    /**
    * pool:
    * get和set
    */
    public class RedisUtil {

    static JedisPool jedisPool = null;

    static {
    GenericObjectPoolConfig poolConfig = new JedisPoolConfig();
    //参数设置:
    poolConfig.setMaxTotal(30);//最大连接数
    poolConfig.setMaxIdle(10);//最大空闲数
    poolConfig.setMaxWaitMillis(3*1000);//超时时间
    poolConfig.setTestOnBorrow(true);//借的时候进行测试

    //你在做的时候,应该丢到properties的配置文件:直接用这个工具类
    String host = "127.0.0.1";
    int port = 6379;
    int timeout = 5 * 1000;
    String password = "root";//根据自己的redis密码进行修改
    jedisPool = new JedisPool(poolConfig, host, port, timeout, password);
    }
    //get和set
    public static void set(String key,String value){
    Jedis jedis=null;
    try {
    jedis = jedisPool.getResource();
    jedis.set(key,value);
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (jedis != null) {
    jedis.close();
    }
    }
    }
    public static String get(String key){
    Jedis jedis=null;
    try {
    jedis = jedisPool.getResource();
    return jedis.get(key);
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    } finally {
    if (jedis != null) {
    jedis.close();
    }
    }
    }
    }
    --controller调用set和get
    @RestController
    @RequestMapping("/common")
    public class RedisController implements RedisClient{

    @RequestMapping(value = "/redis",method = RequestMethod.POST)
    @Override
    public void set(@RequestParam("key") String key,@RequestParam("value") String value){
    RedisUtil.set(key,value);
    }


    @RequestMapping(value = "/redis/{key}",method = RequestMethod.GET)
    @Override
    public String get(@PathVariable("key") String key){
    return RedisUtil.get(key);
    }
    --启动类
    @SpringBootApplication
    @EnableEurekaClient
    public class CommonApplication8848 {

    public static void main(String[] args) {
    SpringApplication.run(CommonApplication8848.class);
    }
    }
    --yml配置
    server:
    port: 8848//端口
    max-http-header-size: 4048576 #Request header is too large异常解决
    spring:
    application:
    name: COMMON-PRIVODER
    data:
    elasticsearch:
    cluster-name: elasticsearch
    cluster-nodes: 127.0.0.1:9300//地址
    eureka:
    instance:
    hostname: localhsot
    prefer-ip-address: true
    client:
    service-url:
    defaultZone: http://localhost:7001/eureka/ //注册到注册中心
    --给内部的消费者访问
    --redisclient
    @RequestMapping("/common")
    @FeignClient(value = "COMMON-PRIVODER",fallbackFactory = RedisClientCallBackFactory.class)//映射的服务名:在注册中心的服务名,告诉使用哪一个托底类
    public interface RedisClient {

    @RequestMapping(value = "/redis",method = RequestMethod.POST)
    public void set(@RequestParam("key") String key, @RequestParam("value") String value);

    @RequestMapping(value = "/redis/{key}",method = RequestMethod.GET)
    public String get(@PathVariable("key") String key);
    }

    --RedisClientCallBackFactory
    @Component 
    public class RedisClientCallBackFactory implements FallbackFactory<RedisClient> {

    @Override
    public RedisClient create(Throwable throwable) {
    return new RedisClient() {
    @Override
    public void set(String key, String value) {

    }

    @Override
    public String get(String key) {
    return null;
    }
    };
    }
    }
    --消费者
    --依赖
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
    </dependency>


    --service
    * 使用中央缓存:
    * 先从redis根据一个key获取:
    * 1:没有:从mysql获取,放入redis,并返回
    * 2:有:就直接返回
    --抽取常量
    public class GlobalConstant {

    //redis的:商品分类的key
    public static final String TREE_DATA="tree_data";
    public static final String PAGE_MODEL="page_model";//页面静态需要的数据
    public static final String TEMPLATE_FILE="template_file";//页面静态需要的模板路径
    public static final String TARGET_FILE="target_file";//页面静态生成的静态页面路
    }
    
    
    @Override
    public List<ProductType> treeData() {

    //常量:
    String treeDataRedis = redisClient.get(GlobalConstant.TREE_DATA);
    if(StringUtils.isEmpty(treeDataRedis)){
    //1:没有:从mysql获取,放入redis,并返回
    redisClient.set(GlobalConstant.TREE_DATA,JSON.toJSONString(productTypes));//对象转换成json字符串
    System.out.println("========mysql========");
    return productTypes;
    }else{
    // 2有:就直接返回
    System.out.println("=====cache==========");
    return JSON.parseArray(treeDataRedis,ProductType.class);//json字符串转成对象
    }
    }
     
     
  • 相关阅读:
    ROS学习(九)—— rqt_console 和 roslaunch
    ROS学习(八)—— 理解ROS服务和参数
    ROS学习(七)—— 理解ROS Topic
    ROS学习(六)—— 理解ROS节点
    ROS学习(五)—— 编译ROS Package
    ROS学习(四)—— 创建ROS Package
    jupyter notebook + pyspark 环境搭建
    快速搭建大数据分析虚拟机
    系统研究Airbnb开源项目airflow
    pip高级使用技巧以及搭建自己的pypi服务器
  • 原文地址:https://www.cnblogs.com/wgyi140724-/p/10742958.html
Copyright © 2020-2023  润新知