redis与spring的整合一般分为spring-data-redis整合和jedis整合,先看看两者的区别
1、引用的依赖不同:
spring-data-redis使用的依赖如下:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.9.RELEASE</version> </dependency>
jedis使用的依赖如下:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> <type>jar</type> <scope>compile</scope> </dependency>
2、管理jedis实例方式、操作redis服务的不同:
spring-data-redis:
通过org.springframework.data.redis.connection.jedis.JedisConnectionFactory来管理,即通过工厂类管理,然后通过配置的模版bean,操作redis服务,代码段中充斥大量与业务无关的模版片段代码,代码冗余,不易维护,比如像下面的代码:
protected RedisTemplate<Serializable, Serializable> redisTemplate; public void saveUser(User user) { redisTemplate.execute(new RedisCallback<Object>() { @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<User>() { @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); String name = redisTemplate.getStringSerializer().deserialize(value); User user = new User(); user.setName(name); user.setId(id); return user; } return null; } }); }
RedisTemplate介绍
spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api。在RedisTemplate中提供了几个常用的接口方法的使用,分别是:
private ValueOperationsb56561a2c0bc639cf0044c0859afb88f valueOps;private ListOperationsb56561a2c0bc639cf0044c0859afb88f listOps;private SetOperationsb56561a2c0bc639cf0044c0859afb88f setOps;private ZSetOperationsb56561a2c0bc639cf0044c0859afb88f zSetOps;
RedisTemplate中定义了对5种数据结构操作
redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set StringRedisTemplate与RedisTemplate
两者的关系是StringRedisTemplate继承RedisTemplate。
两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
jedis方式:
通过redis.clients.jedis.JedisPool来管理,即通过池来管理,通过池对象获取jedis实例,然后通过jedis实例直接操作redis服务,剔除了与业务无关的冗余代码,如下面的代码片段:
private JedisPool jedisPool; public String save(String key,String val) { Jedis jedis = jedisPool.getResource(); return jedis.set(key, val); }
从工厂类到池的方式变化,就相当于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(多一次ping的开销)。
jmxEnabled:是否开启jmx监控,可用于监控;默认值:true;使用建议:建议开启,但应用本身也要开启
2、空闲资源监测
空闲Jedis对象检测,下面四个参数组合来完成,testWhileIdle是该功能的开关。
testWhileIdle:是否开启空闲资源监测;默认值:false;使用建议:true
timeBetweenEvictionRunsMillis:空闲资源的检测周期(单位为毫秒);默认值:-1:不检测;使用建议:建议设置,周期自行选择,也可以默认也可以使用下面JedisPoolConfig中的配置
minEvictableIdleTimeMillis:资源池中资源最小空闲时间(单位为毫秒),达到此值后空闲资源将被移除;默认值:1000 60 30 = 30分钟;使用建议:可根据自身业务决定,大部分默认值即可,也可以考虑使用下面JeidsPoolConfig中的配置
numTestsPerEvictionRun:做空闲资源检测时,每次的采样数;默认值:3;使用建议:可根据自身应用连接数进行微调,如果设置为-1,就是对所有连接做空闲监测
更多Redis相关知识,请访问Redis使用教程栏目!
以上是redis与jedis的区别是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了在REDIS中实施身份验证和授权,重点是实现身份验证,使用ACL以及确保REDIS的最佳实践。它还涵盖了管理用户权限和工具以增强重新安全性。

本文讨论了在Redis群集中选择碎片键,并强调了它们对性能,可伸缩性和数据分布的影响。关键问题包括确保均匀数据分配,与访问模式保持一致以及避免常见错误l

本文讨论了在REDIS中实施和管理缓存无效的策略,包括基于时间的到期,事件驱动的方法和版本控制。它还涵盖了缓存到期的最佳实践和监视和自动的工具

本文讨论了使用REDIS进行工作队列和背景处理,详细的设置,作业定义和执行。它涵盖了原子运营和工作优先级等最佳实践,并解释了REDIS如何提高处理效率。

文章讨论了使用Redis CLI,Redis Insight和Datadog和Prometheus等工具等工具进行监视REDIS群集的性能和健康。

本文讨论了在Web应用程序中使用REDIS进行会话管理,详细介绍设置,诸如可伸缩性和性能以及安全措施之类的好处。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。