分布式缓存Redis之Java客户端

2023-10-26

写在前面

  本学习教程所有示例代码见GitHub:https://github.com/selfconzrr/Redis_Learning

  目前Redis的Java客户端主要有两种:Jedis、Redission,个人感觉Jedis用的广泛一些,而且博主现在开发用的也是Jedis。

Jedis与Redisson对比

概况对比

  Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性,但是在集群模式下,Redisson为单个Redis集合类型提供了自动分片的功能,支持分布式对象,分布式集合,分布式锁Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

编程模型

  Jedis中的方法调用是比较底层的Redis的API,即Jedis中的Java方法基本和Redis的API保持着一致,了解Redis的API,也就能熟练的使用Jedis。而Redisson中的方法则是进行比较高的抽象,每个方法调用可能进行了一个或多个Redis方法调用。

  如下分别为Jedis和Redisson操作的简单示例:

  Jedis设置key-value与set操作:

Jedis jedis =;
jedis.set("key", "value");
List<String> values = jedis.mget("key", "key2", "key3");

  Redisson操作map:

Redisson redisson = …
RMap map = redisson.getMap("my-map"); // implement java.util.Map
map.put("key", "value");
map.containsKey("key");
map.get("key");
可伸缩性

  Jedis使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis

  Redisson使用非阻塞的I/O和基于Netty框架的事件驱动的通信层,其方法调用是异步的。Redisson的API是线程安全的,所以可以操作单个Redisson连接来完成各种操作

数据结构

  Jedis仅支持基本的数据类型如:String、Hash、List、Set、Sorted Set。
  详解见博客:http://blog.csdn.net/u011489043/article/details/78720722

  Redisson不仅提供了一系列的分布式 Java常用对象,基本可以与Java的基本数据结构通用,还提供了许多分布式服务,其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service)。

  在分布式开发中,Redisson可提供更便捷的方法。

第三方框架整合
  • Redisson提供了和Spring框架的各项特性类似的,以Spring XML的命名空间的方式配置RedissonClient实例和它所支持的所有对象和服务;
  • Redisson完整的实现了Spring框架里的缓存机制;
  • Redisson在Redis的基础上实现了Java缓存标准规范;
  • Redisson为Apache Tomcat集群提供了基于Redis的非黏性会话管理功能。该功能支持Apache Tomcat的6、7和8版;
  • Redisson还提供了Spring Session会话管理器的实现。

关于Redission

  Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。【Redis官方推荐】

  Redisson在基于NIO的Netty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类,使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

适用场景 :分布式应用,分布式缓存,分布式回话管理,分布式服务(任务,延迟任务,执行器),分布式redis客户端。

  • 引入依赖包
<dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson</artifactId>
  <version>3.3.2</version>
</dependency>
  • 程序化配置方法
Config config = new Config();
config. useSingleServer().setAddress("127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);
  • 文件方式配置
Config config = Config.fromJSON(new File("config-file.json"));
  • Spring方式
<redisson:client>
          <redisson:single-server address=127.0.0.1:6379" />
</redisson:client>

------至所有正在努力奋斗的程序猿们!加油!!
有码走遍天下 无码寸步难行
1024 - 梦想,永不止步!
爱编程 不爱Bug
爱加班 不爱黑眼圈
固执 但不偏执
疯狂 但不疯癫
生活里的菜鸟
工作中的大神
身怀宝藏,一心憧憬星辰大海
追求极致,目标始于高山之巅
一群怀揣好奇,梦想改变世界的孩子
一群追日逐浪,正在改变世界的极客
你们用最美的语言,诠释着科技的力量
你们用极速的创新,引领着时代的变迁

——乐于分享,共同进步,欢迎补充
——Any comments greatly appreciated
——诚心欢迎各位交流讨论!QQ:1138517609
——CSDN:https://blog.csdn.net/u011489043
——简书:https://www.jianshu.com/u/4968682d58d1
——GitHub:https://github.com/selfconzrr

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式缓存Redis之Java客户端 的相关文章

  • 如果另一个键中的计数器低于零,则从集合中原子删除一个项目?

    雷迪斯2 0 3 在我的 Redis DB 中 我有一组项目 每个项目都有一个与其关联的计数器 MULTI SADD items set foo INCRBY items foo 10000 EXEC 新项目会以随机间隔添加到集合中 当用户
  • Caffeine Expiry 中如何设置多个过期标准?

    我正在使用 Caffeine v2 8 5 我想创建一个具有可变到期时间的缓存 基于 值的创建 更新以及 该值的最后一次访问 读取 无论先发生什么都应该触发该条目的删除 缓存将成为三层值解析的一部分 The key is present i
  • 如何测试我的 Redis 缓存是否正常工作?

    我已经安装了 django redis cache 和 redis py 我遵循了 Django 的缓存文档 据我所知 以下设置就是我所需要的 但我如何判断它是否正常工作 设置 py CACHES default BACKEND redis
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • redis - 使用哈希

    我正在使用 redis 为我的 Web 应用程序实现社交流和通知系统 我是 redis 的新手 我对哈希值及其效率有一些疑问 我读过这篇很棒的文章Instagram 帖子 http instagram engineering tumblr
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • Amazon Elasticache Redis 集群 - 无法获取端点

    我需要获取 Amazon Elasticache 中 Redis 集群的终端节点 以下代码适用于 Memcached 集群 但不适用于 Redis import com amazonaws auth AWSCredentials impor
  • Spring Redis删除不删除key

    我正在尝试删除一个 Redis 键 但由于某种原因它没有删除 但也没有抛出异常 这是我要删除的代码 import com example service CustomerService import com example model Cu
  • Spring Redis 排序键

    我在 Redis Spring Data Redis 中有以下键 localhost gt Keys 1 id 1 Name C5796 Site DRG1 2 id 2 Name CX1XE Site DG1 3 id 3 Name C5
  • 如何配置Lettuce Redis集群异步连接池

    我正在配置我的生菜重新分配池 当我按照官方文档配置时 连接池无法正常初始化 无法获取连接 官方文档指出 RedisClusterClient clusterClient RedisClusterClient create RedisURI
  • 将文件传递给活动作业/后台作业

    我通过标准文件输入接收请求参数中的文件 def create file params file upload Upload create file file filename img png end 但是 对于大型上传 我想在后台作业中执行
  • 为什么单个 Redis 实例不是线程安全的?

    https github com xetorthio jedis wiki Getting started https github com xetorthio jedis wiki Getting started 在多线程环境中使用Jed
  • Web API 缓存 - 如何使用分布式缓存实现失效

    我有一个 API 目前不使用任何缓存 我确实有一个正在使用的中间件 它可以生成缓存标头 Cache Control Expires ETag Last Modified 使用https github com KevinDockx HttpC
  • 批量将Dictionary中的数据设置到Redis中

    我正在使用 StackExchange Redis DB 插入键值对字典Batch如下 private static StackExchange Redis IDatabase database public void SetAll
  • 如何通过ARM模板输出返回Redis的primaryKey?

    我正在尝试借助下面列出的 ARM 模板来部署 Redis 然后返回其主密钥 Azure 门户中 Redis 的 访问密钥 gt 主 下可用的秘密字符串 但是 我从管道 AzureResourceManagerTemplateDeployme
  • Redis 是否使用用户名进行身份验证?

    我已经在我的环境中设置了Redis 并且只看到了通过密码授权的部分 有没有办法也设置用户名 还是只能通过密码验证 Redis 6 上有 ACL 这些都有一个用户名 查看https redis io topics acl https redi
  • 检查 Redis 列表中是否已存在某个值

    我想知道是否有办法检查 redis 列表中是否已存在某个键 我无法使用集合 因为我不想强制唯一性 但我确实希望能够检查字符串是否确实存在 Thanks 您的选择如下 Using LREM如果发现则更换它 维护一个单独的SET与您的LIST

随机推荐

  • 狙击涨停板-通达信,同花顺,金字塔,TB等指标公式量化开发安装及使用教程...

    原文链接 http tecdat cn p 7260 选股结果 如果您有任何疑问 请在下面发表评论 大数据部落 中国专业的第三方数据服务提供商 提供定制化的一站式数据挖掘和统计分析咨询服务 统计分析和数据挖掘咨询服务 y0 cn terad
  • Spring 快速入门的一个程序:HelloSpring

    Spring 快速入门的一个程序 HelloSpring 1 新建一个Maven项目 建好之后有以下文件 2 pom xml中注入依赖项 然后刷新Maven 会自动下载依赖包
  • C# 获取本机连接的所有 串口设备名称 与 串口号

    代码 class Program static void Main string args GetComList private static void GetComList try using ManagementObjectSearch
  • vscode添加自定义的用户代码片段

    在vscode中添加代码片段 选择 新建全局代码片段文件 然后输入文件名 随便输入 然后会生成文件 安装文件中的Example就可以添加代码片段 里面各个字段的含义 Print to console 代码片段的名称 不同代码片段需要不同 在
  • 中断请求级

    返回 上一页 下一页 中断请求级 Windows NT为每个硬件中断和少数软件事件赋予了一个优先级 即中断请求级 interrupt request level IRQL IRQL为单CPU上的活动提供了同步方法 它基于下面规则 一旦某CP
  • PADS Logic BOM Output

    Dim fn As String Sub Main fn ActiveDocument If fn Then fn Untitled End If tempFile DefaultFilePath temp txt Open tempFil
  • markdown中图片靠左对齐或靠右对齐

    第一次在markdown中写博客 发现插入图片默认是居中显示的 一开始我是按下面这种方式插入图片的 当图片无法显示的时候 显示的文字 图片URL 然后图片默认居中显示 然后就一通百度 有的说可以这样写 div align left 这里写图
  • java unreachable code不可达代码

    例子 static int test int testval int target 1 if testval gt target System out println 1 return 1 下边是永远不会达到的代码 所以编译器提示错误 un
  • 【Docker】配置容器的hosts来实现域名指定服务

    需求 在使用docker chrome进行selenium自动化测试的时候 希望客户端能够通过某种形式 让我们的case跑到测试环境取 这时候有两个方式 1 给浏览器使用代理 这里不讲 前面有个文章已经说过了 2 修改执行的selenium
  • pyqt_点击button("添加")弹出新的页面

    目标 通过点击主窗口中的button弹出另一个窗口页面 首先需要注意的是 两个窗口不能是同一类型 否则会崩溃 并保存为名称不同的ui文件 并使用UIC工具转成 py文件 因此在目前文件夹中既有mainwindow又有dialog窗体形式的界
  • openstack-keystone入门

    作用 身份验证 令牌发放和校验 服务列表 用户权限定义 不适合新手看 想到哪儿写到哪儿 写一些关于自己在看书学习的过程中对一些知识的理解 Service决定每个Role能干什么事情 而每个User可以给他分配多个Role 进而具备了多服务的
  • 【yolo】yolo的txt标签转VOC格式的xml标签

    脚本介绍 1 可以为原图提供自动标注的功能 例如 需要标注10000 的数据 可以人工标注1000 然后训练yolo模型 再用detect py用模型对剩下来的原图进行推理 推理中保存txt格式的推理结果 然后可以采用本代码 对剩下来的原图
  • 【Linux】基本指令(三)

    目录 一 head指令 二 tail指令 三 date指令 3 1显示时间 3 2时间戳 四 cal指令 五 find指令 六 grep指令 七 zip unzip指令 一 head指令 head英文意思是头部 顾名思义 head就是显示文
  • 刷脸支付重磅来袭是业界的口碑代表

    近两年来 刷脸支付发展如火如荼 宁波 长沙等多个城市相继开展线下刷脸支付试点 建设银在其网点的ATM机推出刷脸取款 光大银也将人脸识别应用于账户登陆 转账 线上融资等场景 支付宝 财付通等第三方支付公司也争相推出刷脸支付设备 随着移动支付的
  • [Event] Linux con Japan 2015

    日本每年都举办一次LinuxCon 下面是今年的 Event 及对应的 ppt http events linuxfoundation jp events linuxcon japan 粗粗看了一下 竟然还有这么一个主题 How China
  • C程序设计的抽象思维-递归过程-砝码称重

    问题 在狄更斯时代 商人们用砝码和天平来称量商品的重量 假设你仅仅有几个砝码 就仅仅能精确地称出一定的重量 比如 假定仅仅有两个砝码 各自是1kg和3kg 仅仅用1kg的砝码能够称出1kg重量的商品 仅仅用3kg的砝码能够称出3kg重量的商
  • 关于typescript的数据类型的那一些事~

    以下介绍typeScript的几种数据类型 分别是Boolean number string array object any 1 ts中boolean的使用 var boolean Boolean boolean true console
  • 金蝶客户端显示服务器不是有效的,金蝶 服务器不是有效的 请重新设置

    金蝶 服务器不是有效的 请重新设置 内容精选 换一换 Web服务端证书用于客户端浏览器和Web服务器之间的通讯 实现数据信息在客户端和Web服务器之间的加密传输 可以防止数据信息的泄露 为提高安全性 建议替换成自己的证书 并及时更新证书 保
  • 利用Petalinux定制Linux系统(ZYNQ)

    目录 一 创建vivado硬件平台 二 创建Petalinux工程 三 配置Linux内核 四 设置根文件系统 五 配置设备树文件 六 编译petalinux工程 七 制作SD卡启动文件 八 开发板启动设置 九 打开串口上位机 进入 Lin
  • 分布式缓存Redis之Java客户端

    写在前面 本学习教程所有示例代码见GitHub https github com selfconzrr Redis Learning 目前Redis的Java客户端主要有两种 Jedis Redission 个人感觉Jedis用的广泛一些