Redis学习路线(3)——Redis的Java客户端

这篇具有很好参考价值的文章主要介绍了Redis学习路线(3)——Redis的Java客户端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、如何使用Redis的Java客户端

官方文档: https://redis.io/docs/clients/java/

Java-Redis客户端 使用场景
Jeids
以Redis命令作为方法名称,学习成本低,简单实现,但是Jedis实例是线程不安全的,多线程环境下需要基于连接池使用。
lettuce
Lettuce 是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。Redis的哨兵模式、集群模式和管道模式。
Redisson
Redisson是基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map、Queue、Lock、Semaphore(信号量)、AtomicLong(原子类)等强大功能

SpringDataRedis: 一款结合了Jedis和Lettuce的SpringBoot框架整合Redis组件。


二、Jedis

Jedis官网: https://github.com/redis/jedis

Redis的官方也推荐了这种客户端。

(一)引入依赖

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

(二)建立连接

方式一:单点连接

    private Jedis jedis;

    @BeforeEach
    void setup() {
        //建立连接
        jedis = new Jedis("192.168.92.131",6379);
        //设置密码
        jedis.auth("123321");
        //选择数据库
        jedis.select(0);
    }
    
    @Test
    void redisTest(){
        //插入数据
        String result = jedis.set("name","张三");
        System.out.println("result="+result);

        //获取数据
        String name = jedis.get("name");
        System.out.println("name="+name);
    }
    
    @AfterEach
    void destroy() {
        if (jedis != null)
            jedis.close();
    }

//获取的结果
result=OK
name=张三

方式二:连接池建立连接

public class JedisConnectionFactory {
    private static final JedisPool jedisPool;

    static {
        //1、创建连接池配置对象
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //2、配置连接池相关信息
        // 最大连接数
        jedisPoolConfig.setMaxTotal(8);
        // 最大空间连接
        jedisPoolConfig.setMaxIdle(8);
        // 最小空闲连接
        jedisPoolConfig.setMinIdle(0);
        // 设置最长等待时间,ms
        jedisPoolConfig.setMaxWaitMillis(200);

        //3、建立连接池,需要连接池配置,ip,端口,等待时间,密码
        jedisPool = new JedisPool(jedisPoolConfig, "192.168.92.131",6379,1000,"123321");
    }

    public static Jedis getConnection(){
        //获取单个连接
        return jedisPool.getResource();
    }

}

三、SpringDataRedis

SpringDataSpring 中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做 SpringDataRedis,官网地址: https://spring.io/projects/spring-data-redis

  • 提供了对不同Redis客户端的整合(Lettuce和Jedis)
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模块
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于Redis的JDKCollection实现

(一)RedisTemplate

RedisTemplate将不同的数据类型操作API封装到不同类型中。

API 返回值类型 说明
redisTemplate.opsForValue() ValueOperations 操作String类型数据
redisTemplate.opsForHash() HashOperations 操作Hash类型数据
redisTemplate.opsForList() ListOperations 操作List类型数据
redisTemplate.opsForSet() SetOperations 操作Set类型数据
redisTemplate.opsForZSet() ZSetOperations 操作SortedSet类型数据
redisTemplate 通用命令

(二)RedisTemplate的基本使用

1、引入依赖

<!--Redis依赖-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<!--连接池依赖-->
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-pool2</artifactId>
</dependency>

2、配置redis

spring:
	redis:
		host: 192.168.92.131
		port: 6379
		password: 123321
		lettuce:
			pool:
				max-active: 8 #最大连接数
				max-idle: 8 #最大空闲连接
				min-idle: 0 #最小空闲连接
				max-wait: 100 #连接等待时间

3、注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

4、使用RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

public void operateString(){
	// 插入一条string类型的数据,存储的格式是Java序列化的格式
	redisTemplate.opsForValue().set("name", "李四");
	// 读取一条string类型数据
	Object name = redisTemplate.opsForValue().get("name");
	System.out.println("name = " + name);
}

5、优化RedisTemplate存储序列化的现象

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

}

缺点: JSON序列化时会将calss的类型写入json结果中,存入Redis中,带来额外的内存。

为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key 和 value,当需要存储Java对象时,手动完成序列化和反序列化。

Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式,省去自定义RedisTemplate的过程。**
(PS:不如直接用alibaba开源的fastjson,减少学习成本,但要注意的是 在JSON插件的排行中 ,jackson-databind > gson > fastjson,这就说明了问题,fastjson 专注于性能,但安全性不足,gson是保证了安全性,如果可以,在项目中应该使用gson)**文章来源地址https://www.toymoban.com/news/detail-612077.html

@Autowired
private StringRedisTemplate stringRedisTemplate;

//JSON工具
private static final ObjectMapper mapper = new ObjectMapper();

@Test
void testStringTemplate() throws JsonProcessingException {
	//准备对象
	User user = new User("zain", 23);
	//手动序列化
	String json = mapper.writeValueAsString(user);
	//写入一条数据
	stringRedisTemplate.opsForValue().set("jedis:user:2", json);
	
	// 读取数据
	String val = stringRedisTemplate.opsForValue().get("jedis:user:2");
	// 反序列化
	User user1 = mapper.readValue(val, User.class);
}

到了这里,关于Redis学习路线(3)——Redis的Java客户端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Redis】Spring/SpringBoot 操作 Redis Java客户端

    1.Jedis 2.Lettuce(主流) -Spring Data Redis 1.添加Redis 驱动依赖 2.设置Redis 连接信息 3.根据Redis API 操作Redis

    2024年02月13日
    浏览(37)
  • Redis的Java客户端-Jedis

    在 Redis官网 中提供了各种语言的客户端,地址: https://redis.io/docs/clients/ 其中Java客户端也包含很多: 标记为 ❤ 的就是推荐使用的java客户端,包括: Jedis和Lettuce:这两个主要是提供了Redis命令对应的API,方便我们操作Redis,而SpringDataRedis是对这两种做了抽象和封装。 Redisso

    2024年02月19日
    浏览(31)
  • Redis-Java客户端-Jedis

    目录 01.导入依赖 02.进行测试连接 03.使用JedisPool 04.修改测试的代码         新建一个mevan工程,在pom文件下导入相应的依赖,相依的依赖可以去官网查找 spring官网:Spring Data Redis         在test目录下,创建一个测试类JedisTest 这里可能回报密码的错误, 可能需要去设置

    2024年02月14日
    浏览(27)
  • 【Redis】2、Redis 的 Java 客户端(Jedis 和 SpringDataRedis)

    Jedis 的使用:https://redis.io/docs/clients/java/ 🌼 Jedis 实例是线程不安全的 🌼 多线程环境 下需要基于连接池来使用 🌼 这里使用的连接池技术是 Jedis 提供的 🍀 JedisPool :Redis 连接池 🍀 JedisPoolConfig :Redis 连接池的配置 🍃 SpringData 是 Spring 中数据操作的模块,包含对各种数据库

    2024年02月11日
    浏览(27)
  • 基础Redis-Java客户端操作介绍

    Jedis 以Redis命令作为方法名称,学习成本低,简单实用。但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用 letture Lettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。 Redisson Redisson是一

    2024年02月05日
    浏览(40)
  • ⑩【Redis Java客户端】:Jedis、SpringDataRedis、StringRedisTemplate

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 引入依赖 : 测试Java客户端操作Redis : 测试代码: 测试结果: ⚪—操作String类型—⚪ ⚪—操作hash类型—⚪

    2024年02月05日
    浏览(36)
  • 【实践篇】Redis最强Java客户端(一)之Redisson入门介绍

    1.1.1 起源和历史 Redisson 最初由 GitHub 用户 “mrniko” 创建,并在 Apache 2.0 许可证下发布。它的目标是提供一组强大的工具和 API,帮助开发人员在分布式环境中处理数据,并解决并发和一致性的问题。 Redisson 是一款在 Redis 的基础上实现的 Java 驻内存数据网格(In-Memory Data Grid)

    2024年02月09日
    浏览(28)
  • 【实践篇】Redis最强Java客户端(四)之Ression分布式集合使用指南

    前两章我们了解了《【实践篇】Redis最强Java客户端(一)之Redisson入门介绍》和《【实践篇】Redis最强Java客户端(二)之Redisson基础概念》 本章第四章主要介绍Ression分布式集合使用指南。 上一章《Redisson 7种分布式锁使用指南》回顾。 本章我们介绍了在Redisson中实现的各种分布式集

    2024年02月09日
    浏览(34)
  • 【实践篇】Redis最强Java客户端(三)之Redisson 7种分布式锁使用指南

    前两章我们了解了《【实践篇】Redis最强Java客户端(一)之Redisson入门介绍》和《【实践篇】Redis最强Java客户端(二)之Redisson基础概念》本章第三章主要介绍Redisson的七种分布式锁,分别是简单锁、公平锁、可重入锁、红锁、读写锁、信号量和闭锁。下面是每种锁的基本概念、使用

    2024年02月09日
    浏览(40)
  • Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)

    欢迎小伙伴交流学习,这是第一篇(Redis快速入门之初始Redis–NoSql+安装redis+客户端+常用命令),后续持续更新 Redis是一种键值型的NoSql数据库,这里有两个: 键值型 NoSql 其中 键值型 ,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以

    2024年02月20日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包