首页 > 数据库 >Redis——Java的客户端

Redis——Java的客户端

时间:2024-06-05 16:31:59浏览次数:36  
标签:Java name Redis jedis user 序列化 RedisTemplate 客户端

Java的客户端

在Redis官网中提供了各种语言的客户端,地址: https://redis.io/clients

jedis

jedis的官网地址: https://github.com/redis/jedis

1. 引入依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.0.0</version>
</dependency>

2. 建立连接

private Jedis jedis;
@BeforeEach
void setUp() {

// 建立连接

jedis = new Jedis("192.168.150.101", 6379);

//设置密码

jedis.auth("123321");

// 选择库
jedis.select(0);

3.测试string

@Test
void testString() {

//插入数据,方法名称就是redis命令名称,非常简单

String result = jedis.set("name","张三");

System.out.println("result =" + result);

//获取数据

String name = jedis.get("name");

System.out.println("name = u + name);

4.释放资源

@AfterEach

void tearDown() {

//释放资源
if (jedis != null){

        jedis.close();

    }
}

Jedis连接池


Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐大家使用]edis连接池代替Jedis的直连方式

package com;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author hyk~
 */
public class JedisConnectionFactory {
    private static final JedisPool jedispool;

    static {
        //配置连接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        //最大连接数
        poolConfig.setMaxTotal(8);
        //最大空闲连接
        poolConfig.setMaxIdle(8);
        //最小空闲连接
        poolConfig.setMinIdle(0);
        //等待时长
        poolConfig.setMaxWaitMillis(1000);
        //创建连接池对象
        jedispool = new JedisPool(poolConfig,"localhost",6379,1000,"123456");
    }
    public static Jedis getJedis(){
        return jedispool.getResource();
    }
}

SpringDataRedis

SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis

官网地址: https://spring.io/projects/spring-data-redis

提供了对不同Redis客户端的整合 (Lettuce和Jedis)

提供了RedisTemplate统一API来操作Redis

支持Redis的发布订阅模型

支持Redis哨兵和Redis集群

支持基于Lettuce的响应式编程

支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化

支持基于Redis的JDKCollection实现

RedisTemplate工具类

SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:

RedisTemplate在Java中的作用

RedisTemplate 是 Spring Data Redis 提供的一个类,用于在 Java 应用程序中与 Redis 进行交互。它提供了高层次的抽象和便捷的操作方法,使开发者可以方便地执行 Redis 的各种操作(如字符串操作、哈希操作、列表操作、集合操作、有序集合操作等)。以下是 RedisTemplate 的主要作用:

  1. 数据操作的简化RedisTemplate 提供了一系列简化的 Redis 操作方法,使开发者不必直接使用低层次的 Redis 命令,从而提高了开发效率。

  2. 支持多种数据类型RedisTemplate 支持 Redis 的多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。

  3. 事务支持RedisTemplate 支持 Redis 事务操作,可以在一个事务中执行多个命令,确保操作的原子性。

  4. 序列化RedisTemplate 提供了多种序列化方式,默认使用 JdkSerializationRedisSerializer,但也可以配置其他序列化方式(如 JSON 序列化、字符串序列化等)。

SpringDataRedis快速入门

1.引入依赖

        <!--redis依赖-->
        <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>

2.配置文件

spring:
  redis:
    host: localhost
    port: 6379
    #password: 密码未设置可以不写
    lettuce:
      pool:
        max-active: 8 #最大连接
        max-idle: 8 #最大空闲连接
        min-idle: 0 #最小空闲连接
        max-wait: 100ms #连接等待时间
        

3.注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

4.编写测试

@SpringBootTest
class SpringDataRedisDemoApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testString() {
        //写入一条String数据
        redisTemplate.opsForValue().set("name","jack");
        //获取String数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }

}

运行成功

总结

SpringDataRedis的使用步骤:
1.引入spring-boot-starter-data-redis依赖
2.在application.yml配置Redis信息
3.注入RedisTemplate 

SpringDataRedis的序列化方式


RedisTemplate可以接收任意0bject作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用]DK序列化,得到的结果是这样的:

可读性差  内存占用较大

可以自定义SpringDataRedis的序列化方式

代码如下:

@Configuration
public class redisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        //创建RedisTemplate对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        //设置连接工厂
        template.setConnectionFactory(redisConnectionFactory);
        //创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        //设置Key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        //设置Value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashKeySerializer(jsonRedisSerializer);
        //返回
        return template;
    }
}

在测试代码中加入泛型:

在pom.xml文件中写入Jackson依赖

        <!--引入Jackson依赖 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

 运行代码

再次点开图形化工具查看:

实践:写入对象是否会序列化

1.创建user类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private Integer age;
}

2. 编写测试方法

    @Test
    void testSaveUser(){
        //写入数据
        redisTemplate.opsForValue().set("user:100",new User("tom",22));
        //获取数据
        Object user = redisTemplate.opsForValue().get("user:100");
        System.out.println("user="+user);
    }

3.运行

4.查看可视化图形

由此可见是可以实现的

StringRedisTemplate
尽管JSON的序列化方式可以满足我们的需求,但依然存在一些问题,如图:

为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。

为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化。


Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程:

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    //手动序列化工具
    private static final ObjectMapper mapper = new ObjectMapper();
    @Test
    void testSaveUser() throws JsonProcessingException {
        //创建对象
        User user = new User("tom",22);
        //手动序列化
        String json = mapper.writeValueAsString(user);
        //写入数据
        stringRedisTemplate.opsForValue().set("user:200",json);
        //获取数据
        String  jsonUser = stringRedisTemplate.opsForValue().get("user:200");
        //手动反序列化
        User user1 = mapper.readValue(jsonUser,User.class);
        System.out.println("user="+user);
    }

运行结果:

可视化图形界面

RedisTemplate的两种序列化实践方案

方案一:
1.自定义RedisTemplate
2.修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer

方案二:
1.使用StringRedisTemplate
2.写入Redis时,手动把对象序列化为JSON
3.读取Redis时,手动把读取到的JSON反序列化为对象

Hash结构的用法

示例:

    @Test
    void testHash(){
        stringRedisTemplate.opsForHash().put("user:400","name","牛马");
        stringRedisTemplate.opsForHash().put("user:400","age","22");

        Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:400");
        System.out.println("entries="+entries);
    }

运行结果:

可视化图形:

标签:Java,name,Redis,jedis,user,序列化,RedisTemplate,客户端
From: https://blog.csdn.net/weixin_53891720/article/details/139403659

相关文章

  • Java—集合框架、时间和空间复杂度
    一、集合框架Java集合框架(JavaCollectionFramework),又称为容器(container),是定义在java.util包下的一组接口(interfaces)和其实现类(classes)其主要表现为将多个元素(element)置于一个单元中,用于对这些元素进行快速、便捷的存储(store)、检索(retrieve)、管理(manipulate......
  • JavaDoc生成文档
    javaDoc命令是用来生成自己API文档的参数信息:@auchor:作者名@version:版本号@since:指明需要最早使用的jdk版本@param:参数名@return:返回值情况@throws:异常抛出情况//主要生成的参数如:/***@author林伟填*@version1.0*@since1.8*/publiccla......
  • Git客户端工具:SourceTree for Mac v 4.1.5中文特别版
    SourceTree是一款由Atlassian公司推出的免费的Git和Mercurial版本控制系统的可视化客户端工具。它提供了一种简单易用的方式来管理和查看代码的版本历史,以及进行代码的比较、合并和提交等操作。用户可以通过SourceTree轻松地管理多个代码仓库,并且可以直观地查看代码的变化和提......
  • Java (MyBatis)
    前沿MyBatis是一个开源的持久层框架,它简化了数据库访问的过程,通过将SQL语句和Java方法进行映射1.SQL和Java方法的映射:MyBatis使用XML或注解来配置SQL语句,并将SQL语句映射到Java接口或方法上,使得开发者可以直接调用Java方法来执行数据库操作。2.SQL语句的......
  • Java基于SSM的医院医患管理系统设计实现
    21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对医院医患管......
  • Java基于SSM的员工信息管理系统设计实现
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本龙腾公司员工信息管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高......
  • Java基于SSM的图书管理系统设计实现
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本图书管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,......
  • Java基于SSM的在线购物系统设计实现
    随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势:对于在线购物系统当然也不能排除在外,随着网络技术的不断成熟,带动了在线购物系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个性化的平......
  • java8新特性
    1.使用lambda表达式对集合进行迭代/***Lambda表达式遍历集合*/@TestpublicvoidlambdaTest1(){List<String>features=Arrays.asList("Lambdas","DefaultMethod","StreamAPI","DateandTimeAPI");......
  • JAVA:实际工作中,项目上线——打包war,并部署到Tomcat中运行(史上最详细教程)
    每日一讲希望每天叫醒你的不是闹钟,而是梦想!目录每日一讲1.部署原因1.1Tomcat介绍 2.Tomcat下载及安装2.1Tomcat下载2.2Tomcat在IDEA上部署​2.3解决Tomcat乱码问题3.打包war文件,并在Tomcat目录下运行3.1打包文件3.2Tomcat环境配置3.3Tomcat运行1.部署原因......