redisson和jedis区别_redisson和redis区别

redisson和jedis区别_redisson和redis区别Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和Zset(有序集合)。redis与spring的整合一般分为spring-data-redis整合和jedis整合,先看看两者的区别1、引用的依赖不同:spring-data-redis使用的依赖如下: <dependency> <groupId>org.springframework..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

 

redis与spring的整合一般分为spring-data-redis整合和jedis整合,先看看两者的区别

1、引用的依赖不同:

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


Jetbrains全家桶1年46,售后保障稳定

  1. <dependency>

  2. <groupId>org.springframework.data</groupId>

  3. <artifactId>spring-data-redis</artifactId>

  4. <version>1.8.9.RELEASE</version>

  5. </dependency>

jedis使用的依赖如下:


  1. <dependency>

  2. <groupId>redis.clients</groupId>

  3. <artifactId>jedis</artifactId>

  4. <version>2.9.0</version>

  5. <type>jar</type>

  6. <scope>compile</scope>

  7. </dependency>

2、管理jedis实例方式、操作redis服务的不同:

spring-data-redis:

    通过org.springframework.data.redis.connection.jedis.JedisConnectionFactory来管理,即通过工厂类管理,然后通过配置的模版bean,操作redis服务,代码段中充斥大量与业务无关的模版片段代码,代码冗余,不易维护,比如像下面的代码:


  1. protected RedisTemplate<Serializable, Serializable> redisTemplate;

  2. public void saveUser(User user) {

  3. redisTemplate.execute(new RedisCallback<Object>() {

  4. @Override

  5. public Object doInRedis(RedisConnection connection) throws DataAccessException {

  6. connection.set(redisTemplate.getStringSerializer().serialize("user.uid." + user.getId()),

  7. redisTemplate.getStringSerializer().serialize(user.getName()));

  8. return null;

  9. }

  10. });

  11. }

  12. public User getUser(long id) {

  13. return redisTemplate.execute(new RedisCallback<User>() {

  14. @Override

  15. public User doInRedis(RedisConnection connection) throws DataAccessException {

  16. byte[] key = redisTemplate.getStringSerializer().serialize("user.uid." + id);

  17. if (connection.exists(key)) {

  18. byte[] value = connection.get(key);

  19. String name = redisTemplate.getStringSerializer().deserialize(value);

  20. User user = new User();

  21. user.setName(name);

  22. user.setId(id);

  23. return user;

  24. }

  25. return null;

  26. }

  27. });

  28. }

RedisTemplate介绍

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

  • private ValueOperations<K, V> valueOps;
  • private ListOperations<K, V> listOps;
  • private SetOperations<K, V> setOps;
  • private ZSetOperations<K, V> zSetOps;

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


  1. redisTemplate.opsForValue();//操作字符串

  2. redisTemplate.opsForHash();//操作hash

  3. redisTemplate.opsForList();//操作list

  4. redisTemplate.opsForSet();//操作set

  5. redisTemplate.opsForZSet();//操作有序set

  6. 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服务,剔除了与业务无关的冗余代码,如下面的代码片段:


  1. private JedisPool jedisPool;

  2. public String save(String key,String val) {

  3. Jedis jedis = jedisPool.getResource();

  4. return jedis.set(key, val);

  5. }

从工厂类到池的方式变化,就相当于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,就是对所有连接做空闲监测

但是本文与spring集成并未直接采用JedisPool,而是采用了ShardedJedisPool,为什么呢?
因为ShardedJedisPool可以通过一致性哈希实现分布式存储。

shared一致性哈希采用以下方案:
1、Redis服务器节点划分:将每台服务器节点采用hash算法划分为160个虚拟节点(可以配置划分权重)
2、将划分虚拟节点采用TreeMap存储
3、对每个Redis服务器的物理连接采用LinkedHashMap存储
4、对Key or KeyTag 采用同样的hash算法,然后从TreeMap获取大于等于键hash值得节点,取最邻近节点存储;当key的hash值大于虚拟节点hash值得最大值时,存入第一个虚拟节点sharded采用的hash算法:MD5 和 MurmurHash两种;默认采用64位的MurmurHash算法;

总结:

spring-data-redis与spring的整合,更像mybatis与spring整合,通过工厂,创建实例,再操作实例。而jedis,更像spring与MySQL结合,通过操作连接池,获取实例操作数据库

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234689.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JMeter安装与接口测试入门[通俗易懂]

    JMeter安装与接口测试入门[通俗易懂]安装环境配置1、JDK版本:JDK1.8及以上;2、操作系统:JMeter可以在当前任何一个已经部署了Java的操作系统上运行,Unix(Solaris,Linux,etc)、Windows(98,NT,2000,XP,WIN7)、OpenVMSAlpha7.3+JDK安装与配置1、jdk安装:在官网下载jdk1.8版本压缩包,解压到指定文件夹即可。2、环境变量配置1)右键点击…

  • 华为交换机关闭网口_华为交换机关闭端口号[通俗易懂]

    华为交换机关闭网口_华为交换机关闭端口号[通俗易懂]华为交换机为VLAN使用中某端口的关闭(在线等啊!!!!急)这里交换机是通过动作来保护非法接入,比如:当一台交换机端口进行mac绑定后,则只允许该mac的PC上网,如果发现其他的mac出现在这个端口上,交换机会认为这个端口被非法接入了,这时就会执行了设置好的一个安全保护动作。默认的这个动作是shutdown,你很可能就是端口被自动shutdown了华为交换机关闭135端口答:通过displayv…

  • gateway网关的作用_gateway网关限流

    gateway网关的作用_gateway网关限流Gateway服务网关SpringCloudGateway是SpringCloud的一个全新项目,该项目是基于Spring5.0,SpringBoot2.0和ProjectReactor等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。为什么需要网关Gateway网关是我们服务的守门神,所有微服务的统一入口。网关的核心功能特性: 请求路由 权限控制 限流 架构图:权限控制

    2022年10月11日
  • 图像质量评价方法PSNR+SSIM&&评估指标SROCC,PLCC

    图像质量评价方法PSNR+SSIM&&评估指标SROCC,PLCCupdate:2018-04-07今天发现ssim的计算里面有高斯模糊,为了快速计算,先对每个小块进行计算,然后计算所有块的平均值。可以参考源代码实现,而且代码实现有近似的在里面!matlab中中图

  • 我的世界服务器指令大全电脑版_我的世界服务器专用指令

    我的世界服务器指令大全电脑版_我的世界服务器专用指令要成为一个合格的服主,熟悉我的世界服务器指令是必须的,服务器内指令的各种功能不仅是OP需要使用,还有部分是玩家也需要知道的,下面就看看小编为大家准备的我的世界服务器指令大全吧。【大全】我的世界服务器指令大全:首先/manuaddxxgm?如果要使用这个命令,需要自己先有权限在控制台输入manuaddxxadmin然后添加sethome权限manselect世界名字(默认world)输入m…

  • win7下php7.1运行getenv(‘REMOTE_ADDR’)fastcgi停止运行

    win7下php7.1运行getenv(‘REMOTE_ADDR’)fastcgi停止运行

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号