当前位置: 首页 > news >正文

Java使用Redis的详细教程

Redis是一个基于内存的key-value结构数据库,即非关系型数据库,具有高性能、丰富的数据类型、持久化、高可用性和分布式等特点。在Java项目中,Redis通常用于缓存、分布式锁、计数器、消息队列和排行榜等场景。以下是在Java中使用Redis的详细教程:

一、Redis的安装与启动

  1. 下载与安装

    • 可以从Redis的官方网站或其他可信的下载源获取Redis的安装包。
    • 按照安装包的说明进行安装,通常包括解压、编译(如果需要)和配置等步骤。
  2. 启动Redis服务端

    • 在安装目录下找到redis-server.exe文件,并运行它。可以指定配置文件来启动Redis服务,例如:redis-server.exe redis.windows.conf
  3. 启动Redis客户端

    • 在安装目录下找到redis-cli.exe文件,并运行它。默认情况下,它会连接到本地的Redis服务(即6379端口)。
    • 可以使用keys *命令来测试Redis服务是否启动正确。

二、Java操作Redis的常用客户端

在Java中操作Redis,常用的客户端有Jedis、Lettuce和Spring Data Redis等。以下是这些客户端的简要介绍和使用示例:

  1. Jedis

    • Jedis是Redis官方推荐的Java客户端,封装了Redis的底层通信协议,提供了丰富的API来操作Redis。
    • 使用示例:
      Jedis jedis = new Jedis("localhost", 6379);  
      jedis.set("key", "value");  
      String value = jedis.get("key");  
      System.out.println("Value is " + value);  
      jedis.close();
  2. Lettuce

    • Lettuce是一个基于Netty的异步非阻塞Redis客户端,提供了高性能的Redis操作。
    • 使用示例:
      RedisURI redisUri = RedisURI.builder()  .withHost("127.0.0.1")  .withPort(6379)  .withPassword("yourpassword")  .withTimeout(Duration.of(10, ChronoUnit.SECONDS))  .build();  
      RedisClient redisClient = RedisClient.create(redisUri);  
      StatefulRedisConnection<String, String> connection = redisClient.connect();  
      RedisCommands<String, String> commands = connection.sync();  
      commands.set("username", "xmr");  
      String value = commands.get("username");  
      System.out.println("Value is " + value);  
      connection.close();  
      redisClient.shutdown();

  3. Spring Data Redis

    • Spring Data Redis是Spring框架提供的一个对Redis的抽象层,简化了Redis的操作,并提供了与Spring框架的无缝集成。
    • 使用示例(在Spring Boot项目中):
      • pom.xml文件中添加Spring Data Redis的依赖:
        <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-redis</artifactId>  
        </dependency>
      • application.propertiesapplication.yml文件中配置Redis的连接信息:
        spring.redis.host=localhost  
        spring.redis.port=6379  
        spring.redis.password=yourpassword
      • 编写配置类,创建RedisTemplate对象:
        @Configuration  
        public class RedisConfiguration {  @Bean  public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {  RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();  redisTemplate.setConnectionFactory(redisConnectionFactory);  redisTemplate.setKeySerializer(new StringRedisSerializer());  redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());  return redisTemplate;  }  
        }
      • 在业务代码中使用RedisTemplate来操作Redis:
        @Autowired  
        private RedisTemplate<String, Object> redisTemplate;  public void setValue(String key, Object value) {  redisTemplate.opsForValue().set(key, value);  
        }  public Object getValue(String key) {  return redisTemplate.opsForValue().get(key);  
        }

三、Redis常用数据类型与命令

Redis支持多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)等。以下是这些数据类型的常用命令:

  1. 字符串(String)

    • SET key value:设置指定key的值。
    • GET key:获取指定key的值。
    • SETEX key seconds value:设置指定key的值,并将key的过期时间设为seconds秒。
    • SETNX key value:只有在key不存在时设置key的值。
  2. 哈希(Hash)

    • HSET key field value:将哈希表key中的字段field的值设为value。
    • HGET key field:获取存储在哈希表中指定字段的值。
    • HDEL key field:删除存储在哈希表中的指定字段。
    • HKEYS key:获取哈希表中所有字段。
    • HVALS key:获取哈希表中所有值。
  3. 列表(List)

    • LPUSH key value1 [value2]:将一个或多个值插入列表头部(左侧)。
    • LRANGE key start stop:获取列表指定范围内的元素。
    • RPOP key:移除并获取列表最后一个元素。
    • LLEN key:获取列表长度。
  4. 集合(Set)

    • SADD key member1 [member2]:向集合添加一个或多个成员。
    • SMEMBERS key:返回集合中的所有成员。
    • SCARD key:获取集合的成员数。
    • SINTER key1 [key2]:返回给定所有集合的交集。
    • SUNION key1 [key2]:返回所有给定集合的并集。
    • SREM key member1 [member2]:删除集合中的一个或多个成员。
  5. 有序集合(Sorted Set)

    • ZADD key score1 member1 [score2 member2]:向有序集合添加一个或多个成员。
    • ZRANGE key start stop [WITHSCORES]:通过索引区间返回有序集合中指定区间内的成员。
    • ZINCRBY key increment member:有序集合中对指定成员的分数加上增量increment。
    • ZREM key member [member...]:移除有序集合中的一个或多个成员。

四、高级特性

  1. 持久化

    • RDB(Redis Database Backup):将Redis数据库的状态以快照的形式保存到磁盘上。
    • AOF(Append Only File):将Redis执行的所有写命令记录到一个追加日志文件中。
  2. 主从复制

    • 将一个Redis服务器设置为主服务器,其他Redis服务器设置为从服务器。从服务器会定期向主服务器发送同步请求,主服务器将数据同步到从服务器。
  3. Sentinel

    • Redis Sentinel是Redis的高可用解决方案之一。它可以监控Redis主从服务器的状态,当主服务器出现故障时,自动将从服务器提升为主服务器,实现故障自动切换。

通过以上教程,您可以在Java项目中顺利地使用Redis来存储和操作数据。同时,Redis的丰富特性和高级功能也将为您的项目带来更多的便利和性能提升。

相关文章:

Java使用Redis的详细教程

Redis是一个基于内存的key-value结构数据库&#xff0c;即非关系型数据库&#xff0c;具有高性能、丰富的数据类型、持久化、高可用性和分布式等特点。在Java项目中&#xff0c;Redis通常用于缓存、分布式锁、计数器、消息队列和排行榜等场景。以下是在Java中使用Redis的详细教…...

严重 Zimbra RCE 漏洞遭大规模利用(CVE-2024-45519)

攻击者正在积极利用 CVE-2024-45519&#xff0c;这是一个严重的 Zimbra 漏洞&#xff0c;该漏洞允许他们在易受攻击的安装上执行任意命令。 Proofpoint 的威胁研究人员表示&#xff0c;攻击始于 9 月 28 日&#xff0c;几周前&#xff0c;Zimbra 开发人员发布了针对 CVE-2024-…...

php函数积累

对称函数 isset 判断数组arr中是否存在键key 返回值true/false isset(name,$arr) unset 删除数组中的键 需存在key不然抛出异常 unset($arr[name]) json_encode 数据转json格式 json_encode($arr) 一般形式 指定字符编码形式 json_decode json格式转原有数据格式 json_d…...

前端项目场景相关的面试题,包含验证码、图片存储、登录鉴权、动态路由、组件划分等项目场景实际的面试题

项目场景面试题 如何防止短信验证码被刷 问题场景 添加倒计时和图片滑动验证&#xff0c;避免不必要的资源浪费 发送短信验证码需要费用发送短信消耗服务器资源 公司的图片、视频、文件资源如何存储的 传统模式 分开存储到数据服务器&#xff0c;托管服务器到云端 缺点&…...

uniapp 上了原生的 echarts 图表插件了 兼容性还行

插件地址&#xff1a;echarts - DCloud 插件市场 兼容性这块儿不知道后期会不会支持其他浏览器 H5 的话建议可以用原生的不用这个插件...

共享单车轨迹数据分析:以厦门市共享单车数据为例(八)

副标题&#xff1a;基于POI数据的站点综合评价——以厦门市为例&#xff08;三&#xff09; 什么是优劣解距离法&#xff08;TOPSIS&#xff09;&#xff1f; 优劣解距离法&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff0c;简称TOPSI…...

sentinel原理源码分析系列(二)-动态规则和transport

本文是sentinel原理源码分析系列第二篇&#xff0c;分析两个组件&#xff0c;动态配置和transport 动态规则 Sentinel提供动态规则机制&#xff0c;依赖配置中心&#xff0c;如nacos&#xff0c;zookeeper&#xff0c;组件支持动态配置&#xff0c;模板类型为规则&#xff0c;支…...

ubuntu切换源方式记录(清华源、中科大源、阿里源)

文章目录 前言一、中科大源二、清华源三、阿里源 前言 记录ubunut切换各个源的方式。 备注&#xff1a;更换源之后使用sudo apt-get update更新索引。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、中科大源 地址&#xff1a;https://mirrors.u…...

【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充

序言&#xff1a; 本文详细讲解了关于ArkTs语言中的泛型&#xff0c;其中包含泛型函数、泛型接口、泛型约束、泛型类及其中参数的使用方法&#xff0c;补充了一部分接口相关的知识&#xff0c;包括接口的继承和具体实现&#xff0c;也写到了一些边边角角的小知识&#xff0c;剩…...

2024年09月CCF-GESP编程能力等级认证C++编程一级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制…...

基于多维统计分析与GMM聚类的食品营养特征研究

1.项目背景 在当今社会&#xff0c;随着人们对健康和营养的日益关注&#xff0c;深入了解食品的营养成分及其对人体的影响变得越来越重要&#xff0c;本研究采用了多维度的分析方法&#xff0c;包括营养成分比较分析、统计检验、营养密度分析和高斯混合模型&#xff08;GMM&am…...

SkyWalking 告警功能

SkyWalking 告警功能是在 6.x 版本新增的,其核心由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中。 告警规则 告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件。Webhook(网络钩子):定义当警告触发时,哪些服务终端需要被告知。常用告警规则 …...

国内旅游:现状与未来趋势分析

在当今社会快速发展的背景下&#xff0c;国内旅游更是呈现出蓬勃的发展态势。中国&#xff0c;这片拥有悠久历史、灿烂文化和壮丽山河的广袤土地&#xff0c;为国内旅游的兴起与发展提供了得天独厚的条件。 本报告将借助 DataEase 强大的数据可视化分析能力&#xff0c;深入剖…...

西电25考研 VS 24考研专业课大纲变动汇总

01专业课变动 西安电子科技大学专业课学长看到953网络安全基础综合变为 893网络安全基础综合&#xff0c;这是因为工科要求都必须是8开头的专业课&#xff0c;里面参考课本还是没变的&#xff0c;无非就是变了一个名字 对于其他变动专业课也是同理的 02专业课考纲内容变化 对于…...

【Linux】进程管理:状态与优先级调度的深度分析

✨ 山海自有归期&#xff0c;风雨自有相逢 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1…...

同轴电缆笔记

同轴电缆笔记 射频同轴电缆的阻抗标准为什么是50Ω或75Ω呢&#xff1f; 在PCB设计中&#xff0c;在合理的范围内&#xff0c;传输线阻抗的具体数值并不重要。只要控制好整条传输线的阻抗&#xff0c;不要出现阻抗不连续的情况就好了。设计中的其他因素往往决定了我们用什么样…...

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL74

异步复位同步释放 描述 题目描述&#xff1a; 请使用异步复位同步释放来将输入数据a存储到寄存器中&#xff0c;并画图说明异步复位同步释放的机制原理 信号示意图&#xff1a; clk为时钟 rst_n为低电平复位 d信号输入 dout信号输出 波形示意图&#xff1a; 输入描…...

在Linux系统安装Nginx

注意&#xff1a;Nginx端口号是80(云服务器要放行) 我的是基于yum源安装 安装yum源(下面这4步就好了) YUM源 1、将源文件备份 cd /etc/yum.repos.d/ && mkdir backup && mv *repo backup/ 2、下载阿里源文件 curl -o /etc/yum.repos.d/CentOS-Base.repo ht…...

C初阶(六)--- static 来喽

前言&#xff1a;C语言中有许多关键字&#xff08;关键字是预先保留的标识符&#xff0c;具有特殊意义&#xff0c;不能用作变量 名、函数名等普通标识符。&#xff09; 比如&#xff1a;前面在变量与常量那一节提到的extern 就是一个关键字&#xff0c;应该还记得e…...

Git版本控制工具--关于命令

Git版本控制工具 学习前言 在项目开发中&#xff0c;总是需要多个人同时对一个项目进行修改&#xff0c;如何高效快速地进行修改&#xff0c;且控制各自修改的版本不会和他人的进行重叠&#xff0c;这就需要用到Git分布式版本控制器了 作用 解决了一致性&#xff0c;并发性…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...