返回顶部
首页 > 资讯 > 后端开发 > JAVA >一文带你了解如何在Java中操作Redis
  • 194
分享到

一文带你了解如何在Java中操作Redis

javaredis开发语言后端缓存数据库 2023-08-16 14:08:34 194人浏览 薄情痞子
摘要

文章目录 前言一、 Redis客户端简介1. Redis客户端分类2. Spring 整合 Redis 的两种方式 二、 使用 Jedis 操作 Redis1. Jedis的maven坐标2. 使用Jedis操作Redis的步骤


前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

一、 Redis客户端简介

1. Redis客户端分类

Redis的Java 客户端很多,官方推荐的有三种

  1. Jedis
  2. Lettuce
  3. Redisson

2. spring 整合 Redis 的两种方式

Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis

二、 使用 Jedis 操作 Redis

1. Jedis的Maven坐标

redis.clientsjedis2.8.0

2. 使用Jedis操作Redis的步骤

  1. 获取连接
  2. 执行操作
  3. 关闭连接

3. Jedis 操作 Redis 示例

1. 新建maven工程,导入相关坐标

                        junit            junit            4.12                            redis.clients            jedis            2.8.0        

2. 编写测试方法

public class JedisTest {    @Test    public void testRedis(){        //1 获取连接        Jedis jedis = new Jedis("localhost",6379);                //2 执行具体的操作        jedis.set("username","xiaoming");                //输出打印        String value = jedis.get("username");        System.out.println(value);                //删除操作        //jedis.del("username");        //哈希存储        jedis.hset("myhash","addr","bj");        //输出打印        String hValue = jedis.hget("myhash", "addr");        System.out.println(hValue);        //keys * 输出打印        Set keys = jedis.keys("*");        for (String key : keys) {            System.out.println(key);        }        //3 关闭连接        jedis.close();    }}

3. 启动redis服务(windows),连接客户端,测试获取 key username

在这里插入图片描述

4. 启动测试类,通过后再次获取key username

在这里插入图片描述

三、 使用 Spring Data Redis 操作 Redis

1. Spring Data Redis 的 maven 坐标

org.springframework.bootspring-boot-starter-data-redis

2. spring Data Redis 中 operation 接口的分类

spring Data Redis中提供了一个高度封装的类RedisTemplate,针对iedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下

  1. ValueOperations ---- 简单K-V操作
  2. SetOperations ---- set类型数据操作
  3. ZSetOperations ---- zset类型数据操作
  4. HashOperations ---- 针对map类型的数据操作
  5. ListOperations ---- 针对list类型的数据操作

3. Spring Data Redis 操作 Redis String 类型示例(ValueOperations ---- 简单K-V操作)

1. 新建 SpringBoot 工程,导入相关坐标

                    org.springframework.boot            spring-boot-starter-test            test                            junit            junit                            org.springframework.boot            spring-boot-starter-data-redis        

2. yml 配置文件

spring:  application:    name: springdataredis_demo  #Redis相关配置  redis:    host: localhost    port: 6379    #passWord: 123456    database: 0 #默认操作的是0号数据库    jedis:      #Redis连接池配置      pool:        max-active: 8 #最大连接数        max-wait: 1ms #连接池最大阻塞等待时间        max-idle: 4 #连接池中的最大空闲连接        min-idle: 0 #连接池中的最小空闲连接

3. 了解如何修改默认数据库数量(16)配置

在这里插入图片描述

4. 编写测试方法

@SpringBootTest@RunWith(SpringRunner.class)public class SpringDataRedisTest {    //yml中配置支持RedisTemplate对象自动装配    @Autowired    private RedisTemplate redisTemplate;        @Test    public void testString(){        //ValueOperations valueOperations = redisTemplate.opsForValue();        redisTemplate.opsForValue().set("city","beijing");    }}

5. 运行并访问设置的 key 值

在这里插入图片描述

6. 设置配置类配置Redis序列化方式

@Configurationpublic class RedisConfig extends CachinGConfigurerSupport {    @Bean    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {        RedisTemplate redisTemplate = new RedisTemplate<>();        //默认的Key序列化器为:jdkSerializationRedisSerializer        //String类型序列化器        redisTemplate.seTKEySerializer(new StringRedisSerializer());        //hash类型序列化器        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setConnectionFactory(connectionFactory);        return redisTemplate;    }}

7. 修改添加的 key 为 city123,再次运行测试类并访问新设置的 key

在这里插入图片描述

8. 其他测试

@SpringBootTest@RunWith(SpringRunner.class)public class SpringDataRedisTest {    //yml中配置支持RedisTemplate对象自动装配    @Autowired    private RedisTemplate redisTemplate;        @Test    public void testString(){        //ValueOperations valueOperations = redisTemplate.opsForValue();        redisTemplate.opsForValue().set("city123","beijing");        //打印输出        String value = (String) redisTemplate.opsForValue().get("city123");        System.out.println(value);        //设置超时时间        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);        //当key不存在才设置value        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");        System.out.println(aBoolean);            }}

4. Spring Data Redis 操作 Redis hash 类型示例(HashOperations ---- 针对map类型的数据操作)

1. 编写相关测试方法

@SpringBootTest@RunWith(SpringRunner.class)public class SpringDataRedisTest {    @Autowired    private RedisTemplate redisTemplate;            @Test    public void testHash(){        HashOperations hashOperations = redisTemplate.opsForHash();        //存值        hashOperations.put("002","name","xiaoming");        hashOperations.put("002","age","20");        hashOperations.put("002","address","bj");        //取值        String age = (String) hashOperations.get("002", "age");        System.out.println(age);        //获得hash结构中的所有字段        Set keys = hashOperations.keys("002");        for (Object key : keys) {            System.out.println(key);        }        //获得hash结构中的所有值        List values = hashOperations.values("002");        for (Object value : values) {            System.out.println(value);        }    }}

2. 运行测试类,观察结果

在这里插入图片描述

5. Spring Data Redis 操作 Redis list 类型示例(ListOperations ---- 针对list类型的数据操作)

1. 编写测试相关测试方法

@SpringBootTest@RunWith(SpringRunner.class)public class SpringDataRedisTest {    @Autowired    private RedisTemplate redisTemplate;           @Test    public void testList(){        ListOperations listOperations = redisTemplate.opsForList();        //存1个值        listOperations.leftPush("mylist","a");        //存多个值        listOperations.leftPushAll("mylist","b","c","d");        //取值        List mylist = listOperations.range("mylist", 0, -1);        for (String value : mylist) {            System.out.println(value);        }        //获得列表长度 llen        Long size = listOperations.size("mylist");        int lSize = size.intValue();        for (int i = 0; i < lSize; i++) {            //出队列            String element = (String) listOperations.rightPop("mylist");            System.out.println(element);        }    }}

2. 运行测试方法,观察结果

在这里插入图片描述

6. Spring Data Redis 操作 Redis set 类型示例( SetOperations ---- set类型数据操作)

1. 编写相关测试方法

@SpringBootTest@RunWith(SpringRunner.class)public class SpringDataRedisTest {    @Autowired    private RedisTemplate redisTemplate;        @Test    public void testSet(){        SetOperations setOperations = redisTemplate.opsForSet();        //存值        setOperations.add("myset","a","b","c","a");        //取值        Set myset = setOperations.members("myset");        for (String o : myset) {            System.out.println(o);        }        //删除成员        setOperations.remove("myset","a","b");        //取值        myset = setOperations.members("myset");        for (String o : myset) {           ![在这里插入图片描述](https://img-blog.csdnimg.cn/498ec17ed8744d25a0cd5ee96fc20b73.png) System.out.println(o);        }    }}

2. 运行测试方法,观察结果

在这里插入图片描述

7. Spring Data Redis 操作 Redis Zset 类型示例(ZSetOperations ---- zset类型数据操作)

1. 编写相关测试方法

@SpringBootTest@RunWith(SpringRunner.class)public class SpringDataRedisTest {    @Autowired    private RedisTemplate redisTemplate;         @Test    public void testZset(){        ZSetOperations zSetOperations = redisTemplate.opsForZSet();        //存值        zSetOperations.add("myZset","a",10.0);        zSetOperations.add("myZset","b",11.0);        zSetOperations.add("myZset","c",12.0);        zSetOperations.add("myZset","a",13.0);        //取值        Set myZset = zSetOperations.range("myZset", 0, -1);        for (String s : myZset) {            System.out.println(s);        }        //修改分数        zSetOperations.incrementScore("myZset","b",20.0);        //取值        myZset = zSetOperations.range("myZset", 0, -1);        for (String s : myZset) {            System.out.println(s);        }        //删除成员        zSetOperations.remove("myZset","a","b");        //取值        myZset = zSetOperations.range("myZset", 0, -1);        for (String s : myZset) {            System.out.println(s);        }    }}

2. 运行测试方法,观察结果

在这里插入图片描述

8. Spring Data Redis 操作 Redis 通用操作

1. 编写相关测试方法

@SpringBootTest@RunWith(SpringRunner.class)public class SpringDataRedisTest {    @Autowired    private RedisTemplate redisTemplate;        @Test    public void testCommon(){        //获取Redis中所有的key        Set keys = redisTemplate.keys("*");        for (String key : keys) {            System.out.println(key);        }        //判断某个key是否存在        Boolean itcast = redisTemplate.hasKey("dongli");        System.out.println(itcast);        //删除指定key        redisTemplate.delete("myZset");        //获取指定key对应的value的数据类型        DataType dataType = redisTemplate.type("myset");        System.out.println(dataType.name());    }}

2. 运行测试方法,观察结果

在这里插入图片描述

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

来源地址:https://blog.csdn.net/HHX_01/article/details/131748045

--结束END--

本文标题: 一文带你了解如何在Java中操作Redis

本文链接: https://www.lsjlt.com/news/371399.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作