Jedis的使用以及Java和redis的连接

一、Jedis

        我们要使用 Java 来操作 Redis,什么是Jedis 是 Redis 官方推荐的 java连接开发工具! 使用Java 操作 Redis 中间件!

1、导入对应的依赖
<!--导入jedis的包-->
<dependencies>
 <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
 <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.2.0</version>
    </dependency>
</dependencies>
2、编码测试
import redis.clients.jedis.Jedis;
public class TestPing {
    public static void main(String[] args) {
        // 1、 new Jedis 对象即可
        Jedis jedis = new Jedis("127.0.0.1",6379);
        // jedis 所有的命令就是我们之前学习的所有指令!所以之前的指令学习很重要!
   System.out.println(jedis.ping());
   }
}

二、使用坐标完成Java和redis的连接

1.首先导入坐标依赖:
 <!--redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
2.再创建config包,包下创建配置RedisTemplate的类,使其能够以JSON格式序列化和反序列化数据。
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<Object,Object> jsonRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException{
        //1.创建自定义模板类
        RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
        //配置json类型的序列化工具
        template.setKeySerializer(new StringRedisSerializer());//这样key会用字符串方式保存
        template.setDefaultSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
 
        template.setConnectionFactory(redisConnectionFactory);
 
        return template;
    }
}

RedisTemplate<Object, Object>:这是一个Spring提供的模板类,用于与Redis进行交互。泛型<Object,Object>表示key和value的类型都是Object。

RedisConnectionFactory:这是Redis连接工厂,用于创建与Redis服务器的连接。

template.setKeySerializer(new StringRedisSerializer()):这行代码设置了key的序列化工具,将key以字符串形式保存到Redis中。

template.setDefaultSerializer(new Jackson2JsonRedisSerializer<>(Object.class)):这行代码设置了默认的序列化工具,使用Jackson2JsonRedisSerializer将对象序列化为JSON格式。

template.setConnectionFactory(redisConnectionFactory):将Redis连接工厂设置给模板,模板会使用这个工厂与Redis交互。

然后就是去测试类里创建方法:

4.方案一(字符串处理):
@Autowired
    StringRedisTemplate stringRedisTemplate;
    @Test
    public void show1(){
//        1.key相关
        Set<String> keys = stringRedisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }
//        2.各种类型支持
        stringRedisTemplate.opsForValue();
        stringRedisTemplate.opsForList();//List
        stringRedisTemplate.opsForHash();//hash
        stringRedisTemplate.opsForSet();//set
        stringRedisTemplate.opsForZSet();//zset
        //3.举例字符串
        stringRedisTemplate.opsForValue().set("name","许老师");
        String name = stringRedisTemplate.opsForValue().get("name");
        System.out.println(name);
        //4.操作list列表
        stringRedisTemplate.opsForList().leftPush("myList1","曹丕");
        stringRedisTemplate.opsForList().leftPush("myList1","曹植");
        stringRedisTemplate.opsForList().leftPushAll("mylistAll","曹操","曹丕","曹植");
        List<String> list =  stringRedisTemplate.opsForList().range("mylistAll",0,2);
        System.out.println(list);
    }

首先在一开始就定义了StringRedisTemplate,他是用来专门用于处理字符串类型的键和值。

stringRedisTemplate.keys("*"):获取Redis中所有的键(使用*作为通配符),并存储在Set<String>中。然后通过for循环打印每个键。

后面的opsForValue()、opsForList()、opsForHash()、opsForSet()、opsForZSet()都是操作对应的数据然后返回一个可以操作Redis字符串数据类型的接口。

stringRedisTemplate.opsForValue().set("name","许老师");:将字符串键"name"的值设置为"许老师",通过接口操作。

后面的stringRedisTemplate.opsForList().leftPush("myList1", "曹丕");:将字符串"曹丕"从左侧推入到列表"myList1"中,后面两端代码都是。

List<String> list = stringRedisTemplate.opsForList().range("mylistAll",0,2);:获取列表"mylistAll"中从索引0到2的所有元素,并打印出来。

5.方案二(通用模板):
@Autowired
    RedisTemplate redisTemplate;
    @Test
    public void show2(){
 
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("name","薛老师");
        String name = (String) valueOperations.get("name");
        System.out.println(name);
 
 
        redisTemplate.opsForValue();//String
        redisTemplate.opsForList();//List
        redisTemplate.opsForHash();//hash
        redisTemplate.opsForSet();//set
        redisTemplate.opsForZSet();//zset
 
 
        Student stu1 = new Student(1,"薛老师","洗脚");
        redisTemplate.opsForValue().set("stu1",stu1);
        Student ss1 = (Student)redisTemplate.opsForValue().get("stu1");
        System.out.println(ss1);
 
        redisTemplate.opsForList().leftPushAll("mylist","睡觉","游戏");
        List<String> list = redisTemplate.opsForList().range("mylist",0,-1);
        for (int i = 0; i < list.size(); i++) {
            String s =  list.get(i);
            System.out.println(s);
        }
 
        System.out.println("打印默认序列策略"+redisTemplate.getDefaultSerializer());
 
    }

首先定义了一个通用的模板对象,RedisTemplate是一个通用模板类,用于与Redis进行交互,可以处理多种数据类型。

 ValueOperations valueOperations = redisTemplate.opsForValue();:获取操作字符串数据类型的接口ValueOperations。

 valueOperations.set("name", "薛老师");:将字符串键"name"的值设置为"薛老师",get("name")是将键name对应的值打印出来。

 后面的opsForValue()、opsForList()等等都是用来操作字符串类型的数据、操作列表(List)类型的数据等等。

 后面Student操作是将对象通过opsForValue()方法存储到Redis中。在获取打印。

  list操作也是一样的原理,存入再通过rang()方法获取元素并打印。

6.方案三(自定义处理):

注意:定义配置类JavaConfig,自定义序列化策略

@Autowired
    RedisTemplate jsonRedisTemplate;
    @Test
    public void show3(){
        //保存对象
        Student stu = new Student(1,"彭老师","拉面");
        jsonRedisTemplate.opsForValue().set("stu",stu);
        //获取对象
        Object s1 = jsonRedisTemplate.opsForValue().get("stu");
        String jsonS1 = JSONObject.toJSONString(s1);
        Student s11 = JSONObject.parseObject(jsonS1,Student.class);
        System.out.println(s11);
 
        Student stu2 = new Student(2,"彭老师","拉面");
        Student stu1 = new Student(2,"彭老师","拉面");
        Student stu3 = new Student(2,"彭老师","拉面");
        List<Student> students = Arrays.asList(stu1, stu2, stu3);
        jsonRedisTemplate.opsForValue().set("stus",students);
        //必须Object接受,利用ObjectMapper对象转换,如果强制转换会报错
        Object data = jsonRedisTemplate.opsForValue().get("stus");
        String dataJson = JSONObject.toJSONString(data);
        //将JSON类型转为List
        List<Student> stus = JSONObject.parseArray(dataJson, Student.class);
        System.out.println(stus);
 
    }

        这里首先实例化了一个jsonRedisTemplate,这个RedisTemplate已经通过配置类(如RedisConfig)自定义了序列化策略,用于将对象以JSON格式存储和检索。

        前面的语法基本一致,但是jsonRedisTemplate可以直接调用比如opsForValue()等方法进行保存数据,获取数据的方式有些不同,Object s1 = jsonRedisTemplate.opsForValue().get("stu");从Redis中获取键"stu"对应的对象,并存储在Object类型的变量s1中。再通过获取到的对象转换为JSON字符串,再通过parseObject()方法,将刚才的对象转换的json字符串和对象类名传入方法中,就可以得到对象本身了。

        保存获取多个对象跟保存单个对象也是一样的原理,必须Object接受,利用ObjectMapper对象转换,如果强制转换会报错。

注意jsonRedisTemplate都是使用opsForValue()方法来保存获取对象的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值