三种方式区别:

Jedis、RedisTemplate、StringRedisTemplate:

  1. Jedis是官方推荐使用的操作redis的客户端
  2. StringRedisTemplate继承自RedisRemplate,但是两者是不共通的,StringRedisTemplate只管理StringRedisTemplate里面的数据,RedisTemplate只管理RedisTemplate下的数据,他们俩都是spring提供的
  3. StringRedisTemplate使用的是String的序列化策略,RedisTemplate使用的是JDK的序列化策略
  4. StringRedisTemplate能够查询Jedis存储的值,但是不能查询RedisTemplate的值,同样,Jedis可以得到StringRedisTemplate的值,但是不能够得到RedisTemplate的值,这个在最后会说明

Jedis使用

导依赖

<!--jedis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.1.0</version>
        </dependency>

使用:

需要在代码里配置一下环境

/*--------jedis test---------*/
    @PostMapping("/jedisTest")
    public void jedisTest() {
        Jedis jedis = new Jedis("192.168.1.190");//ip,可以不设置port,默认6379
      //  Jedis jedis = new Jedis("106.13.66.110",6379);//设置port
        jedis.auth("password");//密码
        jedis.select(1);//设置操作的redis数据库
        jedis.setex("2",60 * 60 * 24,"222");//设置key为“2”,过期时间为1天的value为“222”的数据,过期时间单位是秒
       // jedis.expire("2",60 * 60 * 24);也是设置过期:key为“2”的值在一天后过期,过期时间单位也是秒
        System.out.println(jedis.get("2"));
        jedis.close();//关闭
    }
//结果为 222

结果为:222

其他操作:

// 移除key的过期时间
		jedis.persist("key");
		// 将key重命名
		jedis.renamenx("key", "key1");
		// 删除key
		jedis.del("key");
		//String基本操作
		jedis.setex("2",60 * 60 * 24,"222");
        jedis.set("2","222");
        jedis.get("2");
        //set基本操作
        jedis.sadd("key","members");
        jedis.smembers("key");
        //hash基本操作
        jedis.hset("key","field","value");
        jedis.hget("key","field");
        //zset基本操作
        jedis.zadd("key",2.22,"member");
        jedis.zrange("key",1,10);
        //list基本操作
        jedis.lpush("key","str","str");
        jedis.lpop("key");

RedisTemplate

<!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>

可以在配置文件里配置环境:

# Redis
spring.redis.database=1 #连接的库
spring.redis.host=192.168.1.190 #ip
spring.redis.port=6379 #port
spring.redis.password=password # 密码
spring.redis.timeout=5000ms #超时时间

使用:

/*--------redisTemplate test---------*/
    @PostMapping("/redisTemplateTest")
    public void redisTemplateTest() {
        redisTemplate.boundValueOps("1").set("111",7, TimeUnit.DAYS);//存储类型为String类型的key为“1”,value为“111”的数据,保存时间是7天
        System.out.println(redisTemplate.boundValueOps("1").get());
    }

结果:111
其他操作:

//String基本操作
		redisTemplate.boundValueOps("1").set("111",7, TimeUnit.DAYS);
        redisTemplate.boundValueOps("1").get();
		//list基本操作
		redisTemplate.opsForList().leftPop("key");//左边插入
        redisTemplate.opsForList().range("key",1,10);//获取指定范围的内容
		//set基本操作
        redisTemplate.opsForSet().add("key","value","value");
        redisTemplate.opsForSet().randomMember("key");
	    //zset基本操作    
        redisTemplate.opsForZSet().add("key","value",1);
        redisTemplate.opsForZSet().range("key",1,10);
 	    //hash基本操作    
        redisTemplate.opsForHash().putAll("key",new HashMap());
        redisTemplate.opsForHash().get("key","hashkey");

StringRedisTemplate

用法和RedisTemplate一样

对比三种方式的互通性

package com.example.testall.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.concurrent.TimeUnit;

/**
 * @author Shuoshi.Yan
 * @package:com.example.testall.test
 * @className:redis test
 * @description:
 * @date 2020-04-28 11:01
 * @version:V1.0
 * @NOTICE:本内容仅限于xxx有限公司内部传阅,禁止外泄以及用于其他的商业项目
 * @ Copyright  xxx. All rights reserved.
 **/
@RestController
@RequestMapping("/redis")
public class RedisTestController {

    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    /*--------stringRedisTemplate test---------*/
    @PostMapping("/stringRedisTemplateTest")
    public void stringRedisTemplateTest() {
        stringRedisTemplate.boundValueOps("3").set("333",7, TimeUnit.DAYS);
        System.out.println("---------stringRedisTemplateTest接口----------");
        System.out.println("redisTemplateTest:" + stringRedisTemplate.boundValueOps("1").get());
        System.out.println("jedis:" + stringRedisTemplate.boundValueOps("2").get());
        System.out.println("stringRedisTemplate:" + stringRedisTemplate.boundValueOps("3").get());
    }
    /*--------redisTemplate test---------*/
    @PostMapping("/redisTemplateTest")
    public void redisTemplateTest() {
        redisTemplate.boundValueOps("1").set("111",7, TimeUnit.DAYS);
        System.out.println("---------redisTemplateTest接口----------");
        System.out.println("redisTemplateTest:" + redisTemplate.boundValueOps("1").get());
        System.out.println("jedis:" + redisTemplate.boundValueOps("2").get());
        System.out.println("stringRedisTemplate:" + redisTemplate.boundValueOps("3").get());
    }
    /*--------jedis test---------*/
    @PostMapping("/jedisTest")
    public void jedisTest() {
        Jedis jedis = new Jedis("192.168.1.190",6379);//配置IP,port
        jedis.auth("password");//配置密码
        jedis.select(1);//配置库
        jedis.setex("2",60 * 60 * 24,"222");//设置值及过期时间
        System.out.println("---------jedisTest接口----------");
        System.out.println("redisTemplateTest:" + jedis.get("1"));
        System.out.println("jedis:" + jedis.get("2"));
        System.out.println("stringRedisTemplate:" + jedis.get("3"));
        jedis.close();
    }
}

在这里说明一下,jedis测试接口存的key是“2”,redisTemplate存的是“1”,StringRedisTemplate存的是“3”,看一下结果:

data redis和jedis哪个更好 spring jediscluster和redistemplate_System


StringRedisTemplate能够查询Jedis存储的值,但是不能查询RedisTemplate的值,同样,Jedis可以得到StringRedisTemplate的值,但是不能够得到RedisTemplate的值在来看一下redis里面存的值:

jedis:

data redis和jedis哪个更好 spring jediscluster和redistemplate_redis_02


RedisTemplate:

data redis和jedis哪个更好 spring jediscluster和redistemplate_System_03


StringRedisTemplate:

data redis和jedis哪个更好 spring jediscluster和redistemplate_redis_04


是不是看样子还是用RedisTemplate比较好,至少看不到是什么数据