首页 > 数据库 >基于Java的redis客户端的基本使用

基于Java的redis客户端的基本使用

时间:2024-05-13 12:29:56浏览次数:21  
标签:Java name redis jedis static 序列化 public redisTemplate 客户端

1.简介

Java中redis客户端有jedis、lettuce、Redission等

2.jedis的基本使用

  1. 引入依赖
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.2.3</version>
</dependency>
  1. 从jedis连接池获取jedis对象
// resources目录下新建jedis配置参数文件
host=120.55.87.98
port=6379
password=123456
userName=null

public final class JedisConnectionFactory {
    private static final JedisPool JEDIS_POOL;
    private static final String  host;
    private static final String password;
    private static final String userName;
    private static final Integer port;

    static {
        ResourceBundle bundle = ResourceBundle.getBundle("jedis");
        host = bundle.getString("host");
        password = bundle.getString("password");
        userName = "null".equals(bundle.getString("userName")) ? null : bundle.getString("userName");
        port = Integer.parseInt(bundle.getString("port"));
        JedisPoolConfig config = new JedisPoolConfig();
        // 最大连接
        config.setMaxTotal(10);
        // 最大空闲连接
        config.setMaxIdle(10);
        // 最小空闲连接
        config.setMinIdle(0);
        //   设置最长等待时间
        config.setMaxWaitMillis(200);
        JEDIS_POOL = new JedisPool(config, host, port, userName, password);
    }
    public static Jedis getJedis() {
        Jedis jedis = JEDIS_POOL.getResource();
        return jedis;
    }
    public static void close(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }
}
  1. 使用jedis对象的方法,方法名和Redis的命令一样
Jedis jedis = JedisConnectionFactory.getJedis();
jedis.set("name", "李四");
String name = jedis.get("name");
System.out.println(name);
  1. 释放资源
jedis.close();

3.SpringDataRedis的基本使用

  1. SpringDataRedis是spring对redis集成的模块,其内部整合了不同的redis客户端,比如jedis、Lettuce
  2. 在springBoot中SpringDataRedis的简单使用:
    1. 导入依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
    
    1. 在application.yml配置Redis信息
    spring:
      redis:
        host: 120.55.87.98
        password: 123456
        lettuce:
          pool:
            max-idle: 8 #最大空闲连接
            max-active: 8 #最大连接
            max-wait: 100 #连接等待时间
            min-idle: 0 #最小连接
    
    1. 测试
    @SpringBootTest
    public class RedisTest {
        @Autowired
        RedisTemplate redisTemplate;
        @Test
        // 操作string类型的数据
        public void testString() {
            redisTemplate.opsForValue().set("name", "张三");
            String name = (String) redisTemplate.opsForValue().get("name");
            System.out.println(name);
        }
    }
    
  3. 上述程序默认采用的是JDK序列化,其序列化结果如下图所示:缺点可读性差,且占用内存。解决方式采用其他方案进行序列化
  4. 修改RedisTemplate的序列化器:
    1. 配置如下:
    // 在pom文件中添加依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-json</artifactId>
    </dependency>
    
    @Configuration
    public class RedisConfig {
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            // 设置连接工厂
            redisTemplate.setConnectionFactory(factory);
            // 设置序列化器
            GenericJackson2JsonRedisSerializer redisSerializer = new GenericJackson2JsonRedisSerializer();
            // key和 hashKey采用 string序列化
            redisTemplate.setKeySerializer(RedisSerializer.string());
            redisTemplate.setHashKeySerializer(RedisSerializer.string());
            // value和 hashValue采用 JSON序列化
            redisTemplate.setValueSerializer(redisSerializer);
            redisTemplate.setHashValueSerializer(redisSerializer);
            return redisTemplate;
        }
    }
    
    
    1. 测试:
    @Autowired
    RedisTemplate<String, Object> redisTemplate;
    @Test
    // 操作string类型的数据
    public void testString() {
        redisTemplate.opsForValue().set("user", new User("张三", 24));
        User user = (User) redisTemplate.opsForValue().get("user");
        System.out.println(user);
    }
    
    1. 缺点:JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。
  5. 使用StringRedisTemplate:
    1. 写入Redis时,手动把对象序列化为JSON
    2. 从Redis读取时,手动把读取到的JSON反序列化为对象
@SpringBootTest
public class RedisTest {
    @Autowired
    private StringRedisTemplate redisTemplate;
    private static final ObjectMapper mapper = new ObjectMapper();
    @Test
    public void testString() throws JsonProcessingException {
        User user = new User("张三", 24);
        // 手动序列化    
        String json = mapper.writeValueAsString(user);
        redisTemplate.opsForValue().set("user001", json);
        String value = redisTemplate.opsForValue().get("user001");
        // 反序列化
        User user1 = mapper.readValue(value, User.class);
        System.out.println(user1);
    }
}

标签:Java,name,redis,jedis,static,序列化,public,redisTemplate,客户端
From: https://www.cnblogs.com/xiaocer/p/18188989

相关文章

  • JavaSE之java基础语法
    关键字和保留字关键字定义和特点定义:被java语言赋予了特殊含义,用作专门用途的字符串。特点:关键字中所有字母都为小写。关键字不能用作变量名,方法名,类名,包名和参数。用于定义数字类型的关键字classinterfaceenumbyteshortintlongfloatdoublecharbooleanvoi......
  • 软工计算1—Java篇1 20240513
    Java中的函数重载函数重载(FunctionOverloading)是面向对象编程中的一个概念,它允许在同一个类中定义多个同名函数,但这些函数的参数列表必须不同。参数列表的不同可以体现在参数的类型、数量或顺序上。函数重载使得程序设计更加灵活,可以针对不同的参数类型或数量提供不同的函数实现......
  • Redis配置登录密码并使用认证密码登录
    Redis配置登录密码并使用认证密码登录1.修改配置文件Redis的配置文件redis.conf,找到如下行:#requirepassfoobared去掉注释,并修改为所需要的密码:requirepass123456(其中123456就是要设置的密码)2.重启Redis如果Redis已经配置为service服务,可以通过以下方式重启:serviceredis......
  • Java 高效获取两个List中不同的元素集合
    /***借助Map来获取listA、listB的不同元素集合**@paramlistA集合A*@paramlistB集合B*@returnlist<String>不同元素集合*/publicstaticList<String>getDifferListByMap(List<String>listA,List<String>listB){List<String>differList=new......
  • 【问题解决】java.lang.NoSuchMethodError错误
    问题现象近期本人负责的一个SpringBoot模块出现了java.lang.NoSuchMethodError报错,问题情况如下:A类提供了setJumpType(Stringtype),B类调用A类的setJumpType(Stringtype)报错java.lang.NoSuchMethodError:com.xxx.A.setJumpType(Ljava/lang/String;)V在之前的发版的程序中,B......
  • 干了 2 年多 Java 外包,终于脱离了!
    大家好,我是R哥。金三银四结束了,上个月分享了一个35K入职的面试辅导案例:35K*14薪入职了,这公司只要不裁员,我能一直呆下去。。今天再分享一个上个月让人很有成就感的面试辅导case:外包、空窗四个月、薪资10k、996——>甲方公司、薪资15k、早九晚六(WLB),从报名面试辅导后,从......
  • CentOS7部署Redis(离线单机)
    一、检查是否安装##检查是否安装了Redis[root@localhost/]#ps-ef|grepredis##存在就删除[root@localhost/]#sudoyumremoveredis##检查是否安装了gcc[root@localhost/]#gcc--version安装gcc1、手动离线安装下载gcc安装包,下载地址:http://mirrors.ali......
  • 使用Lambda表达式和接口的简单Java 8 Predicate示例
    大量的Java编程涉及到对真或假值的评估,从条件语句到迭代循环。当您使用JDK的StreamsAPI和Lambda函数时,可以使用备受欢迎的JavaPredicate接口来简化布尔条件的评估。也被称为Java8Predicate(源自引入函数式编程的JDK版本),这个简单的接口定义了五个方法,尽管只有JavaPredicate的t......
  • java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBea
    简介前排提示:这个错误一般是由于Spring新版本导致的与其他框架不兼容现象,解决办法一般是升级其他框架版本。使用springboot-3.2.5和myabtis-plus-3.5.0搭建开发环境时,启动Springboot程序时报错,报错信息:点击查看代码java.lang.IllegalArgumentException:Invalidvalu......
  • 音乐格式转换:java代码实现
    1packageutil;23importws.schild.jave.*;4importjava.io.File;56/*7音乐格式转换8<dependency>9<groupId>ws.schild</groupId>10<artifactId>jave-core</artifactId>11<version>2.4.4</versi......