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

Redis的Java客户端

时间:2022-11-30 21:13:13浏览次数:45  
标签:Java name void Redis println Jedis Test jedis 客户端

Redis的Java客户端

Jedis线程不安全,lettuce线程安全

Jedis

测试

引入依赖

<dependencies>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.7.0</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>5.7.0</version>
    </dependency>
</dependencies>

Test.java

public class JedisTest {
    private Jedis jedis;

    @BeforeEach
    void setUp() {
        //1.建立连接
        jedis=new Jedis("192.168.164.128",6379);
        //2.设置密码
        jedis.auth("123456");
        //3.选择库
        jedis.select(0);
    }

    @Test
    void testString() {
        //存入
        String result=jedis.set("name","熊哥");
        System.out.println("result="+result);
        //获取
        String name=jedis.get("name");
        System.out.println("name="+name);

        //存入
        jedis.hset("user:1","name","Jack");
        jedis.hset("user:1","age","21");
        //获取
        Map<String, String> map = jedis.hgetAll("user:1");
        System.out.println(map);
    }

    @AfterEach
    void tearDown() {
        //关闭连接
        if(jedis!=null){
            jedis.close();
        }
    }
}

Jedis连接池

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

JedisConnectionFactory.java

public class JedisConnectionFactory {
    //连接池对象
    private static final JedisPool jedisPool;

    //初始化
    static {
        //配置连接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8);  //最大8个连接
        poolConfig.setMaxIdle(8);   //最大空闲数量
        poolConfig.setMinIdle(0);   //最小空闲数量
        poolConfig.setMaxWaitMillis(1000);  //当池内没有返回对象时最大等待时间

        //创建连接池对象(JedisPoolConfig,ip,port,timeout,password)
        jedisPool=new JedisPool(poolConfig,"192.168.164.128",6379,1000,"123456");
    }
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

Test.java(改变建立连接的语句)

public class JedisTest {
    private Jedis jedis;

    @BeforeEach
    void setUp() {
        //1.建立连接
//        jedis=new Jedis("192.168.164.128",6379);
        jedis= JedisConnectionFactory.getJedis();
        //2.设置密码
        jedis.auth("123456");
        //3.选择库
        jedis.select(0);
    }

    @Test
    void testString() {
        //存入
        String result=jedis.set("name","熊哥");
        System.out.println("result="+result);
        //获取
        String name=jedis.get("name");
        System.out.println("name="+name);

        //存入
        jedis.hset("user:1","name","Jack");
        jedis.hset("user:1","age","21");
        //获取
        Map<String, String> map = jedis.hgetAll("user:1");
        System.out.println(map);
    }

    @AfterEach
    void tearDown() {
        //关闭连接
        if(jedis!=null){
            jedis.close();
        }
    }
}

SpringDataRedis

SpringDataRedis中提供RedisTemplate工具类,封装了各种对Redis的操作。springboot2.x以前默认支持Jedis,以后默认支持lettuce

依赖

<!--redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--common-pool-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

application.yaml

spring:
  redis:
    host: 192.168.164.128
    port: 6379
    password: 123456
    database: 0
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms

Test.java

@SpringBootTest
class RedisDemoApplicationTests {
    @Resource
    private RedisTemplate redisTemplate;

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

序列化以实现跨平台存储(在上面的基础上修改)

添加配置类RedisConfig.java

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

Test.java中修改下面这行

private RedisTemplate<String,Object> redisTemplate;

若linux下还是显示乱码,在启动客户端时最后加上 --raw

StringRedisTemplate(上面的经典白学)

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

Test.java

@SpringBootTest
public class RedisStringTest {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void contextLoads() {
        //写入一条String数据
        stringRedisTemplate.opsForValue().set("name","王五");
        //获取
        Object name=stringRedisTemplate.opsForValue().get("name");
        System.out.println(name);
    }
}

标签:Java,name,void,Redis,println,Jedis,Test,jedis,客户端
From: https://www.cnblogs.com/LoginX/p/Login_X60.html

相关文章

  • Java中进制基础知识与算法题
    本篇文章旨在给大家普及下计算机内部数据的机器级表示方式,即:二进制、八进制、十进制、十六进制…对于进制,我们从小最先接触的是十进制,这个也是我们日常生活中应用最多的数......
  • Redis从入门到精通:中级篇
    本文目录上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启第二部分的学习,在本文中,我们将看到以下内容:Redis数据结构String、Hash、List、Set、SortedSet及相关操作,......
  • go redis v8 gin session
    今天使用到gin的模版功能,于是学习了一下登录session因为gin有自家开发好的sessionredis。所以在redis支持方面。已经有支持好的了但是看了一下golangredis方面,发现有......
  • .NET集成Yitter.IdGenerator实现分布式Id,并使用redis自动注册WorkerId
    参考文章多语言新雪花算法(SnowFlakeIdGenerator)添加依赖Install-PackageYitter.IdGenerator-Version1.0.14自动注册WorkerId的动态库下载这是一个go语言版本的......
  • 小新学Java14-【File类、递归】
    一、File类1.1概述java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。1.2构造方法①File(Stringpathname)通过将给定路径......
  • 力扣287(java&python)-寻找重复数(中等)
    题目:给定一个包含 n+1个整数的数组 nums,其数字都在 [1,n] 范围内(包括1和n),可知至少存在一个重复的整数。假设nums只有一个重复的整数,返回 这个重复的数......
  • springboot缓存之搭建redis环境
    Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库\缓存和消息中间件.安装redis,使用dockerdockerpullregistry.docker-cn.com/library/redis运行re......
  • springboot缓存之整合redis
     一\引入redispom.xml中添加<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>......
  • java程序如何将8g的文件,在jvm内存2g的情况下
    importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.nio.ByteBuffer;importjava.nio.channels.FileChannel;publicclassTest......
  • java导入包(键盘录入)
    java中的Scanner,这个类就可以接受键盘输入的数字导包--Scanner这个类在哪importjava.util.Scanner导包的动作必须出现在类定义的上边创建对象---表示我要开始用Sc......