Redis(连接池)

SpringBoor环境下使用redis连接池

依赖:

<dependencies>
        <dependency>
            <groupId>com.yugabyte</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0-yb-11</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

测试类:“

package com.pb;

public class RedisTest1 {

    @Test
    public  void  test(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();   //创建连接池的配置对象
        jedisPoolConfig.setMaxTotal(100);    //并发量在100左右
        jedisPoolConfig.setMaxIdle(50);  //最大的等待连接
        jedisPoolConfig.setMinIdle(10);  //最小的等待连接
        jedisPoolConfig.setTestOnBorrow(false);   //其作用是设置在从连接池中获取连接时,是否检测并确保获取的连接可用。
        jedisPoolConfig.setTestOnReturn(false);   //用于设置在将连接还回连接池时是否检测连接的可用性
        jedisPoolConfig.setTestOnCreate(true);   //用于设置在创建新的连接时是否检测连接的可用性
        jedisPoolConfig.setBlockWhenExhausted(true);    //用于设置当连接池中的连接耗尽时,是阻塞等待还是立即抛出异常。

        jedisPoolConfig.setMaxWaitMillis(1000);  //等待1s

        //创建连接池
        JedisPool jedisPool=new JedisPool(jedisPoolConfig,"192.168.200.166",6380,2000,"123.com");

        Jedis jedis=null;
        try {
            jedis = jedisPool.getResource();
            jedis.select(10);
            jedis.set("curry","库里");
            String curry = jedis.get("curry");
            System.out.println(curry);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            jedis.close();  //关闭连接
        }

    }
}

Spring—Redis(连接池)

pom

<dependencies>
        <dependency>
            <groupId>com.yugabyte</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0-yb-11</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.0.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.7.RELEASE</version>
        </dependency>
    </dependencies>

配置文件

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean  id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="100"/>
        <property name="maxIdle" value="50"/>
        <property name="minIdle" value="10"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>
        <property name="testOnCreate" value="false"/>
    </bean>

    <bean  id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
          p:usePool="true" p:poolConfig-ref="jedisPoolConfig"
          p:hostName="192.168.200.166" p:port="6380" p:database="10"
          p:password="123.com" p:timeout="200000">
    </bean>

    <bean class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory-ref="connectionFactory">

       
    </bean>

</beans>

测试:

package com.pb;


@RunWith(value = SpringJUnit4ClassRunner.class )
@ContextConfiguration(locations ={"classpath:beans.xml"})
public class RedisTest1 {

    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public  void  test(){
        //System.out.println(redisTemplate);

        //操作Spring类型
        redisTemplate.opsForValue().set("aa","aa");

        String aa = (String) redisTemplate.opsForValue().get("aa");
        System.out.println(aa);

    }
}

但是出现了一个问题  就是乱码问题

需要在xml中  内部Bean

<bean class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory-ref="connectionFactory">

        <!--创建一个内部Bean-->
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>

        <!--创建一个内部Bean-->
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
    </bean>

但是这样子又出现一个问题 就是  保存对象的额时候出现的问题   可能还会出现乱码

/**
     * 存对象
     */
    @Test
    public void  test2(){

        User user = new User();
        user.setId(1);
        user.setName("curry");
        user.setSex("男");

        redisTemplate.opsForValue().set("user:1:info",user);

        User user1 = (User) redisTemplate.opsForValue().get("user:1:info");
        System.out.println(user1);

    }

上面的代码会报错  纯是编码问题:   

我们就需要在xml 中配置:

  <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
 </property>

 还有一个和就是可能会保存hash数据

  <!--创建一个内部Bean-->
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
        </property>

        <!--创建一个内部Bean-->
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
        </property>

 测试:

 /**
     * 存hash
     */
    @Test
    public  void  test3(){
        Map<String, Object> map=new HashMap<>();
        User user = new User();
        user.setId(1);
        user.setName("curry");
        user.setSex("男");
        map.put("user11",user);
        redisTemplate.opsForHash().putAll("user:1:hash",map);


        User user11 = (User) redisTemplate.opsForHash().get("user:1:hash", "user11");

        System.out.println(user11);
    }
}

Spring—Boot声明式缓存

SpringBoot_data_redis

依赖:(boot版本   2.6.13)

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

配置文件  application.yml

spring:
  redis:
    host: 192.168.200.166
    port: 6380
    password: 123.com
    connect-timeout: 10000

    jedis:
      pool:
        max-active: 100
        max-idle: 50
        min-idle: 10
        max-wait: 1000
    database: 10

测试类:

package com.pb;


@SpringBootTest
class SpringBootDataRedisApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        System.out.println(redisTemplate);

        redisTemplate.opsForValue().set("java","opoo");
        String java = stringRedisTemplate.opsForValue().get("java");
        System.out.println(java);


        User user = new User(1001,"curry","男");

        redisTemplate.opsForValue().set("123123",user);
    }

}

不管是村对象还是存单个值 都有乱码问题  

我们需要写一个配置类

package com.pb.com.config;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){

        RedisTemplate redisTemplate = new RedisTemplate();

        redisTemplate.setConnectionFactory(connectionFactory);

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.afterPropertiesSet();
        return  redisTemplate;
    }
}

在测试 就没有乱码了

过期时间:

@Test
    void  test(){
        redisTemplate.opsForValue().set("java","hello",5000, TimeUnit.SECONDS);
        redisTemplate.opsForValue().set("spring","spring", Duration.ofSeconds(5000));
    }

List集合:

 @Test
    void  test(){
        redisTemplate.opsForList().rightPushAll("user:1:info","11","22","33","44","55");

        List range = redisTemplate.opsForList().range("user:1:info", 0, -1);
        System.out.println(range);
    }

Hash

 @Test
    void  test2(){
        Map<String,Object> map=new HashMap<>();
        map.put("id",1001);
        map.put("name","詹姆斯");
        map.put("sex","男");

       redisTemplate.opsForHash().putAll("user:info",map);

       Map<Object,Object> entries=redisTemplate.opsForHash().entries("user:info");
       Iterator<Map.Entry<Object, Object>> integer=entries.entrySet().iterator();
       while (integer.hasNext()){
           Map.Entry<Object,Object>  next= integer.next();
           System.out.println(next.getKey()+"\t"+next.getValue());
       }

        Set<Object> keys = redisTemplate.opsForHash().keys("user:info");
        for (Object key : keys) {
            Object o = redisTemplate.opsForHash().get("user:info", key);
            System.out.println(o);

        }
    }

其他的操作   (匿名函数)

 @Test
    public  void test3(){
        redisTemplate.execute(new RedisCallback<Object>() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                connection.flushAll();
                return null;
            }
        });
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/18787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot基础篇3(SpringBoot+Mybatis-plus案例)

环境搭建&#xff1a;配置起步依赖pom.xml和配置文件application.yml 1.创建模块时&#xff0c;勾选的依赖有springMVC和MySQL驱动 2.手动添加的依赖有&#xff1a;MyBatis-plus、Druid、lombok <dependencies><dependency><groupId>org.springframework.…

行为型模式-解释器模式

解释器模式 概述 如上图&#xff0c;设计一个软件用来进行加减计算。我们第一想法就是使用工具类&#xff0c;提供对应的加法和减法的工具方法。 //用于两个整数相加 public static int add(int a,int b){return a b; }//用于两个整数相加 public static int add(int a,int …

使用护眼灯台灯哪个牌子好用来保护眼睛?真正做到护眼台灯品牌

现在的家长很多人觉得家里已经有灯光了&#xff0c;没必要在买台灯。但事实上台灯有很多优点&#xff0c;尤其对于小孩子来说&#xff1a;1.提供更好的光线:台灯能够提供更加明亮的光线&#xff0c;有助于保护眼睛健康。2.提高工作效率:台灯光线舒适可提高工作效率或学习效率。…

CPU 架构(x86/ARM)简介

CPU 架构通过指令集的方式一般可分为 复杂指令集&#xff08;CISC&#xff09; 和 精简指令集&#xff08;RISC&#xff09; 两类&#xff0c;CISC 主要是 x86 架构&#xff0c;RISC 主要是 ARM 架构&#xff0c;还有 MIPS、RISC-V、PowerPC 等架构。 本文重点介绍 x86 和 ARM…

SpringBoot整合Nacos配置中心和注册中心

一、背景 公司项目中使用的Nacos作为服务的注册中心和配置中心&#xff0c;但是呢公司的这一套Nacos是经过封装了的&#xff0c;而且封装的不是很友好&#xff0c;想着自己搭建一套标注的Nacos配置中心和服务中心 二、Nacos配置中心和注册中心搭建 2.1 依赖引入 <!--注册…

【Linux】shell编程之循环语句

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、循环语句二、for循环语句1.for 语句的结构2.for语句应用示例 三、while 循环语句1.while 循环语句结构2.while语句应用示例 四、until 循环五、跳出循环六、死循…

新品发布全线添员,九号全力奔向“红海”深处?

5月10日&#xff0c;九号公司2023新品发布会声势达到顶峰。此次发布会的看点为九号电动2023产品线的更新&#xff0c;电动家族再添多员大将。 随着人们出行选择的多样化&#xff0c;国内短途出行工具发展迎来井喷期。在传统的电动两轮车市场上&#xff0c;雅迪、爱玛等品牌仍然…

今年这面试难度,我给跪了……

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;又得准备面试了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&a…

关于cartographer建立正确关系树的理解

正确的TF关系map----odom----base_link----laser base_link是固定在机器人本体上的坐标系&#xff0c;通常选择飞控 其中map–odom 的链接是由cartographer中lua文件配置完成的 map_frame "map", tracking_frame "base_link", published_frame "b…

MySQL日志

目录 错误日志 查询日志 二进制日志 慢查询日志 redo log 和 undo log &#xff08;事务日志&#xff09; redo log&#xff1a; undo log&#xff1a; mysql> show variables like log_%; 返回所有以"log_"开头的系统变量和它们的值&#xff0c;这些变量控…

研读Rust圣经解析——Rust learn-12(智能指针)

研读Rust圣经解析——Rust learn-12&#xff08;智能指针&#xff09; 智能指针智能指针选择Box<T>使用场景创建Box使用Box在堆上存储递归类型数据解决 通过 Deref trait 将智能指针当作常规引用处理追踪指针的值创建自定义的智能指针&#xff08;*&#xff09; Deref隐式…

开源智慧家居

与家居行业、服务行业等伙伴协同合作&#xff0c;努力创造社会价值&#xff0c;提升行业整体服务 水平&#xff0c;树立家居服务业统一售后标准&#xff0c;构建品质、高效、有温度的居家生活服务新生态。 为企业商家和个人客户提供家居配送、搬运、安装、维修、保养等服务。 …

IPC:匿名管道和命名管道

一 管道初级测试 写两个小程序&#xff0c;一个负责向管道发数据&#xff0c;一个从管道接收数据&#xff1b; pipe.cpp #include <iostream> using namespace std;int main() {cout << "hello world" << endl;return 0; } pipe2.cpp #inclu…

Java线程池及其实现原理

线程池概述 线程池&#xff08;Thread Pool&#xff09;是一种基于池化思想管理线程的工具&#xff0c;经常出现在多线程服务器中&#xff0c;如MySQL。 线程过多会带来额外的开销&#xff0c;其中包括创建销毁线程的开销、调度线程的开销等等&#xff0c;同时也降低了计算机…

【设计模式】单例模式(懒汉和饿汉模式详解)

目录 1.设计模式是什么&#xff1f; 2.单例模式 1.概念&#xff1a; 2.如何设计一个单例 1.口头约定&#xff08;不靠谱&#xff09; 2.使用编程语言的特性来处理 3.使用"饿汉模式"设计单例 1.详细步骤 2.完整代码 4.使用"饿汉模式"设计单例 1.详…

为什么我在大厂待了三个月就选择离开?我聊聊应届生该选择大厂还是小公司

我在互联网大厂只待了3个月就离开了&#xff0c;主要原因不是大厂的福利或者薪资不够好&#xff0c;只是因为我发现在大厂里每天都有开不完的会&#xff0c;忙碌到没有自己的生活。当时我每天10点上班&#xff0c;晚上要工作到11甚至是12点&#xff0c;甚至半夜两三点都接到过工…

Flowable+React+bpmn-js实现工作流

由于新东家使用的是React&#xff0c;不是Vue&#xff0c;而自己一直想做一个关于工作流的应用出来&#xff0c;断断续续&#xff0c;花了几个月的时间&#xff0c;开发了工作流的功能&#xff0c;后面会继续完善。 技术栈 前端 前端是基于React开发的&#xff0c;使用了ant…

OpenCV 直方图统计函数 cv::calcHist算是彻底弄明白了

参数说明 void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,OutputArray hist, int dims, const int* histSize,const float** ranges, bool uniform true, bool accumulate false );images 图像数组。每个图像的大小要一致&#xff0c…

最强算法视频公开课!(内容硬核,完全免费!

和录友们汇报一下&#xff0c;代码随想录算法公开课已经更新完毕了。 由我亲自录制了140期算法视频&#xff0c;覆盖了 《代码随想录》纸质版上全部题目的讲解。 视频全部免费开放在B站&#xff1a;代码随想录 目录就在视频播放的右边&#xff0c;完全按照代码随想录的顺序讲…

鸿蒙Hi3861学习七-Huawei LiteOS-M(信号量)

一、简介 信号量&#xff08;Semaphore&#xff09;是一种实现任务间通信的机制&#xff0c;实现任务之间同步或临界资源的互斥访问。常用于协助一组相互竞争的任务来访问临界资源。 在多任务系统中&#xff0c;各任务之间需要同步或互斥实现临界资源的保护&#xff0c;信号量功…