redis和jedis有什么区别

分类:编程技术 时间:2024-02-20 15:15 浏览:0 评论:0
0
redis和jedis有什么区别?这个问题可能是我们日常学习或者工作中经常遇到的问题。希望你能从这个问题中得到很多收获。下面是小编为大家带来的参考内容,一起来看看吧!

redis与spring的集成一般分为spring-data-redis集成和jedis集成。我们先来看看两者的区别

1.引用依赖不同:

spring-data-redis使用的依赖如下:

  org.springframework.data spring -data-redis 1.8.9.RELEASE 

jedis使用的依赖有如下:

 redis.clients jedis 2.9.0 <类型>jar <范围>编译

2。如何管理jedis实例和操作redis服务的区别:

spring-data-redis:

通过org.springframework.data.redis.connection.jedis.JedisConnectionFactory进行管理,即就是通过工厂类管理,然后通过配置的模板bean来操作redis服务。代码段中充斥着大量与业务无关的模板片段代码。代码冗余且难以维护。例如,如下代码:

protected RedisTemplate redisTemplate; public void saveUser(User user) { redisTemplate.execute(new RedisCallback() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { connection.set(redisTemplate.getStringSerializer().serialize("user.uid.") + user.getId()), redisTemplate.getStringSerializer().serialize(user.getName())); return null; } } );} public User getUser(long id) { return redisTemplate.execute(new RedisCallback() { @Override public User doInRedis(RedisConnection connection) throws DataAccessException { byte[] key = redisTemplate.getStringSerializer().serialize(" user.uid." ) + id); if (connection.exists(key)) { byte[] value = connection.get(key); 字符串名称 = redisTemplate.getStringSerializer().deserialize(value); 用户 user = new User(); user. setName(name); user.setId(id); return user; } return null; } });}

RedisTemplate简介

Spring封装了RedisTemplate对象来执行各种操作在redis上,它支持所有redis原生API。 RedisTemplate提供了几种常用的接口方法的使用,分别是:

private ValueOperations valueOps;私有 ListOperations listOps; private SetOperations setOps ;private ZSetOperations zSetOps;

RedisTemplate 定义了 5 种数据结构操作

redisTemplate .opsForValue() ;//操作字符串 redisTemplate.opsForHash();//操作 hashredisTemplate.opsForList();//操作 listredisTemplate.opsForSet();//操作 setredisTemplate.opsForZSet();//操作有序 setStringRedisTemplate 和 RedisTemplate

两者的关系是StringRedisTemplate继承了RedisTemplate。
两者之间的数据不通用;也就是说StringRedisTemplate只能管理StringRedisTemplate中的数据,RedisTemplate也只能管理RedisTemplate中的数据。
SDR默认采用两种序列化策略,一种是String序列化策略,一种是JDK序列化策略。
StringRedisTemplate默认使用String序列化策略,保存的key和value​​使用此策略进行序列化和保存。

RedisTemplate默认使用JDK序列化策略,保存的键和值都是使用该策略序列化保存的。

杰迪斯方法:

通过redis.clients.jedis.JedisPool进行管理,即通过pool进行管理,通过pool对象获取jedis实例,然后通过jedis实例直接操作redis服务。与业务无关的冗余代码已被消除,例如以下代码片段:

private JedisPool jedisPool;public String save(String key ,String val) { Jedis jedis = jedisPool.getResource();return jedis.set(key, val);}

工厂类到pool的变化相当于mybatis连接mysql的变化。代码变的更简洁,更容易维护。 Jedis使用apache commons-pool2来管理Jedis资源池,所以定义JedisPool时一个非常重要的参数就是资源池GenericObjectPoolConfig。使用方法如下,其中有很多参数用于资源管理和使用。

参数说明

JedisPool确保资源在可控范围内,并提供线程安全,但合理的GenericObjectPoolConfig配置可以保护使用Redis的应用程序,下面将对一些重要参数进行解释和建议:

在当前环境下,Jedis连接是资源,JedisPool管理Jedis连接。

1.资源设置及使用

maxTotal:资源池最大连接数;默认值:8 设置建议见下一节
maxIdle:资源池允许的最大空闲连接数;默认值:8;使用建议:设置建议见下一节
minIdle:资源池保证最小空闲连接数;默认值:0;使用建议:设置建议见下一节
blockWhenExhausted:当资源池耗尽时,调用者是否应该等待。仅有的true时,maxWaitMillis以下才会生效;默认值:true;使用建议:建议使用默认值
maxWaitMillis:当资源池连接耗尽时,调用者的最大等待时间(单位毫秒) -1:表示永不超时;使用建议:不建议使用默认值
testOnBorrow:从资源池借用连接时是否进行连接有效性检测(ping),无效连接将被移除;默认值: false;使用建议:业务量较大时,建议设置为false(多ping一次的费用)。
testOnReturn:将连接返回到资源池时是否进行连接有效性检测(ping),无效连接将被移除;默认值: false;使用建议:当业务量较大时,建议设置为false(多1个ping的费用)。
jmxEnabled:是否启用jmx监控,可用于监控;默认值:true;使用建议:建议启用,但应用程序本身也必须启用

2.空闲资源监控

空闲Jedis对象检测是通过以下四个参数组合完成的。 testWhileIdle就是这个函数的开关。

testWhileIdle:是否开启空闲资源监控;默认值:假;使用建议:true
timeBetweenEvictionRunsMillis:空闲资源检测周期(单位:毫秒);默认值:-1:不检测;使用建议:推荐设置,选择自己的周期,也可以使用默认或者使用下面JedisPoolConfig中的配置
minEvictableIdleTimeMillis:资源池中资源的最小空闲时间(单位:毫秒),达到该值后,空闲资源将被移除;默认值:1000 60 30 = 30 分钟;使用建议:您可以根据自己的业务来决定,m大部分默认值就足够了,也可以考虑使用下面JeidsPoolConfig中的配置
numTestsPerEvictionRun:在做空闲资源检测时,每次的样本数;默认值:3;使用建议:可以根据自己应用的连接数进行微调。如果设置为-1,则会对所有连接进行空闲监控

感谢您的阅读!看完上面的内容,你是不是对redis和jedis的区别有了一个大概的了解了呢?希望文章的内容对大家有所帮助。如果您想了解更多相关文章,请关注行业资讯频道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > redis和jedis有什么区别

用户评论