redis的java客户端

一、jedis

(1)写一个test的步骤

①首先引入依赖

 

查找与jdk版本适配的依赖

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

 

②建立连接

    private Jedis jedis;
    @BeforeEach
    public void setUp() {
        jedis=new Jedis("192.168.88.140",6379);
        jedis.auth("123456");
        jedis.select(0);
    }

③编写Test代码

 

    @Test
    public void testString() {
        String result = jedis.set("name", "zhangsan");
        System.out.println("result="+result);
        String name = jedis.get("name");
        System.out.println("name="+name);
    }

④释放连接

@AfterEach
    public void tearDown() {
        if(jedis!=null) {
            jedis.close();
        }
    }

 

 

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

 在后面需要使用Jedis时,可以通过JedisConnectionFactory.getJedis()来初始化Jedis对象

例如:private Jedis jedis;

           jedis=JedisConnectionFactory.getJedis()

(3)使用SpringDataRedis

 

 小缺陷:

在使用下面的代码操作redis数据库,给name赋值时,无法实现更改redis数据库中name的值,而是会多一个\xAC\xED\x00\x05t\x00\x04name的key,并且它的值也是乱码

    //注入RedisTemplate操作redis数据库
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    void testString() {
        redisTemplate.opsForValue().set("name","Rose");
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }

效果如下图:

原因是:

  这个问题是因为 RedisTemplate 默认使用了 JdkSerializationRedisSerializer 进行序列化导致的。当你使用 RedisTemplate 直接操作时,它会将键和值都进行序列化,所以你会看到类似 \xAC\xED\x00\x05t\x00\x04name 这样的二进制数据而不是原始的 "name" 键。

 

解决方法:

使用StringRedisTemplate 进行操作,同时自己手动进行序列化和反序列化

@Test
    void testJson() throws JsonProcessingException {
        User user =new User();
        user.setName("连赛轩");
        user.setAge(18);

        //手动对json数据进行转换,转换为String  (序列化)
        String json = mapper.writeValueAsString(user);
        System.out.println("json="+json);
        System.out.println("-------------------");
        //添加数据
        stringRedisTemplate.opsForValue().set("user:100",json);
        //获取数据
        String jsonUser = stringRedisTemplate.opsForValue().get("user:100");
        //将获得到的String类型数据转换为User类型
        User resultUser = mapper.readValue(jsonUser, User.class);
        System.out.println(resultUser);
    }

 

posted @ 2025-07-12 18:16  连师傅只会helloword  阅读(7)  评论(0)    收藏  举报