把redis用在Java项目
1. Java连接redis
Java连接redis的方式是通过jedis,连接redis需要遵循jedis协议。
1.1 引入依赖
<!--引入java连接redis的驱动--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version></dependency>
1.2 编写代码
import redis.clients.jedis.Jedis;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class Test01 {public static void main(String[] args) {//连接redis的信息 默认连接本地的redis 端口号6379. 所有关于redis操作的功能都在该类中Jedis jedis=new Jedis("192.168.111.188",6379);//关于key的命令Set<String> keys = jedis.keys("*");System.out.println("所有的key:"+keys);long del = jedis.del("k1", "k2", "k3");System.out.println("删除key的个数:"+del);boolean k4 = jedis.exists("k4");System.out.println("判断指定的k4是否存在:"+k4);long k5 = jedis.expire("k5", 10);//关于字符串类型的命令:String set = jedis.set("k1", "v1");System.out.println("存入k1的值:"+set);String k1 = jedis.get("k1");System.out.println("获取指定key的值:"+k1);long k2 = jedis.setnx("k2", "110");System.out.println("如果k2不存在,则设置k2的值:"+k2);long k21 = jedis.incr("k2");System.out.println("k2的值加1:"+k21);long k22 = jedis.decr("k2");System.out.println("k2的值减1:"+k22);String setex = jedis.setex("k3", 100, "v3");System.out.println("k3的值:"+setex);//关于hash类型的命令:long hset = jedis.hset("k4", "k41", "v41");System.out.println("存入k4的键值对:"+hset);Map<String,String> map=new HashMap<>();map.put("name","张三");map.put("age","18");long k51 = jedis.hset("k5", map);System.out.println("存入k5的键值对:"+k51);String hget = jedis.hget("k5", "name");System.out.println("获取k5的name的值:"+hget);Map<String, String> k52 = jedis.hgetAll("k5");System.out.println("获取k5的所有键值对:"+k52);}
}
2. java连接redis集群模式
适合SSM项目。
public static void main(String[] args) {Set<HostAndPort> nodes=new HashSet<>();nodes.add(new HostAndPort("192.168.111.188",7001));nodes.add(new HostAndPort("192.168.111.188",7002));nodes.add(new HostAndPort("192.168.111.188",7003));nodes.add(new HostAndPort("192.168.111.188",7004));nodes.add(new HostAndPort("192.168.111.188",7005));nodes.add(new HostAndPort("192.168.111.188",7006));JedisCluster jedisCluster=new JedisCluster(nodes);jedisCluster.set("k5","666");System.out.println(jedisCluster.get("k5"));}
3. springboot整合redis
通过starter启动依赖,包含自动装配类,完成相应的装配功能。
3.1 引入依赖
<!--引入了redis整合springboot 的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
3.2 修改配置文件
#redis 配置
#你所连接的reids的地址
spring.redis.host=192.168.111.188
#端口号
spring.redis.port=6379
#连接的几号数据库
spring.redis.database=1
#用于控制 Jedis 连接池的一个属性。它定义了连接池中可以同时活动的最大连接数。
spring.redis.jedis.pool.max-active=100
#用于设置 Jedis 连接池中最多可以有多少个空闲的 Redis 连接
spring.redis.jedis.pool.max-idle=10
#用于设置当连接池中的所有连接都在使用时,线程等待连接池返回连接的最大时间
spring.redis.jedis.pool.max-wait=10000ms
3.3 使用
springboot整合redis时封装了两个工具类:StringRedisTemplate和RedisTemplate。
StringRedisTemplate它是RedisTemplate的子类,StringRedisTemplate里面只能存放字符串的内容。
3.3.1 StringRedisTemplate
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;@SpringBootTest
class Qy174SpringbootRedisApplicationTests {@Autowiredprivate StringRedisTemplate stringRedisTemplate;//关于Hash的操作@Testpublic void testHash(){HashOperations<String, Object, Object> forHash = stringRedisTemplate.opsForHash();//存放数据 hset(key,field,value)forHash.put("user","name","ykq");Map<String,String> map=new HashMap<>();map.put("age","18");map.put("adrress","北京");forHash.putAll("user",map);//获取指定的元素 hget(key,field)Object o = forHash.get("user", "name");System.out.println("获取指定的元素:"+o);Map<Object, Object> user = forHash.entries("user");System.out.println("获取所有的元素:"+user);Set<Object> user1 = forHash.keys("user");System.out.println("获取所有的key:"+user1);List<Object> user2 = forHash.values("user");System.out.println("获取所有的value:"+user2);}//关于String的操作: 在封装的StringRedisTemplate类对应每种数据类型的操作 对应相应的类来完成@Testvoid testString() {//得到操作字符串的类对象ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();//存放数据---set(k,v)opsForValue.set("k1","v1");//存放数据--setex(k,second,v)opsForValue.set("k2","20",2,TimeUnit.MINUTES);//存放数据--setnx(k,v)Boolean aBoolean = opsForValue.setIfAbsent("k3", "v3", 2, TimeUnit.MINUTES);System.out.println("是否设置成功:"+aBoolean);//获取指定的元素String k1 = opsForValue.get("k1");System.out.println("获取指定的元素:"+k1);Long k2 = opsForValue.increment("k2", 10);System.out.println("获取指定的元素:"+k2);}//关于key的操作@Testvoid testKeys() {Set<String> keys = stringRedisTemplate.keys("*");System.out.println("所有的key:"+keys);Boolean k1 = stringRedisTemplate.delete("k1");System.out.println("是否删除指定的k1:"+k1);Boolean k11 = stringRedisTemplate.hasKey("k1");System.out.println("是否存在k1:"+k11);Boolean k12 = stringRedisTemplate.expire("k1", 10, TimeUnit.HOURS);System.out.println("是否设置过期时间:"+k12);}}
3.3.2 RedisTemplate
它属于StringRedisTemplate的父类,它的泛型默认都是Object。它可以直接存储任意类型的key和value。
@SpringBootTest
class Qy174SpringbootRedisApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test01(){//指定key的序列化方式。redisTemplate.setKeySerializer(new StringRedisSerializer());//指定value的序列化方式redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("k11","v11"); //为什么出现了乱码?1.key要不要序列化。要。默认使用的是jdk序列化方式 。System.out.println(valueOperations.get("k11"));//能否获取值。--能//org.springframework.data.redis.serializer.SerializationException: 序列化valueOperations.set("k12",new User("宋英豪",18));//把内存中的数据存入磁盘---序列化过程JSONObject k12 = (JSONObject) valueOperations.get("k12");}}
如果使用RedisTemplate每次都需要人为指定key和value的序列化。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import com.ykq.demos.web.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.util.*;
import java.util.concurrent.TimeUnit;@SpringBootTest
class Qy174SpringbootRedisApplicationTests {@Autowiredprivate RedisTemplate redisTemplate; //@Testpublic void test01(){ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("k11","v11"); //为什么出现了乱码?1.key要不要序列化。要。默认使用的是jdk序列化方式 。System.out.println(valueOperations.get("k11"));//能否获取值。--能//org.springframework.data.redis.serializer.SerializationException: 序列化valueOperations.set("k12",new User("宋英豪",18));//把内存中的数据存入磁盘---序列化过程JSONObject k12 = (JSONObject) valueOperations.get("k12");HashOperations forHash = redisTemplate.opsForHash();forHash.put("u","n","zhangsan");forHash.put("u","张三","张三杀回");}}
4. 集群模式
#集群模式
spring.redis.cluster.nodes=192.168.111.188:7006,192.168.111.188:7001,192.168.111.188:7002,192.168.111.188:7003,192.168.111.188:7004,192.168.111.188:7005
相关文章:
把redis用在Java项目
1. Java连接redis Java连接redis的方式是通过jedis,连接redis需要遵循jedis协议。 1.1 引入依赖 <!--引入java连接redis的驱动--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version&…...
GORM:优雅的Go语言ORM库
文章目录 引言GORM原理基础使用安装GORM定义模型连接数据库CRUD操作 高级使用关联事务回调 优点结论 引言 在Go语言开发中,数据库操作是不可或缺的一部分。虽然直接使用SQL语句可以灵活地与数据库交互,但随着项目规模的扩大,SQL语句的编写、…...
Golang | Leetcode Golang题解之第279题完全平方数
题目: 题解: // 判断是否为完全平方数 func isPerfectSquare(x int) bool {y : int(math.Sqrt(float64(x)))return y*y x }// 判断是否能表示为 4^k*(8m7) func checkAnswer4(x int) bool {for x%4 0 {x / 4}return x%8 7 }func numSquares(n int) i…...
Oracle系统表空间的加解密
实验环境 数据库选择的是orclpdb1,当前系统表空间未加密: SQL> show con_nameCON_NAME ------------------------------ ORCLPDB1SQL> select TABLESPACE_NAME, STATUS, ENCRYPTED from dba_tablespaces;TABLESPACE_NAME STATUS …...
pytorch backbone
1 简介 在PyTorch深度学习中,预训练backbone(骨干网络)是一个常见的做法,特别是在处理图像识别、目标检测、图像分割等任务时。预训练backbone通常是指在大型数据集(如ImageNet)上预先训练好的卷积神经网络…...
uniapp 开发app使用renderjs操作dom
需求:把页面中的对话内容另存为一张图片保存到手机相册。 解决方案:这时我们需要使用到document对象创建一个dom对象计算对话内容的宽高、位置等,再利用canvas能力将内容绘制绘制成一张图保存。 现状:总所周知,非H5端&…...
【面试题】MySQL `EXPLAIN`的`Extra`字段:深入解析查询优化的隐藏信息
MySQL EXPLAIN的Extra字段:深入解析查询优化的隐藏信息 引言 在MySQL的EXPLAIN输出中,Extra字段提供了关于查询执行计划的额外信息。这些信息对于理解查询的内部工作机制和优化查询性能至关重要。本文将详细解析Extra字段中常见的几个关键指标…...
Jenkins持续部署
开发环境任务的代码只要有更新,Jenkins会自动获取新的代码并运行 1. pycharm和git本地集成 获取到下面的 Git可执行文件路径 2. pycharm和gitee远程仓库集成 先在pycharm中安装gitee插件 在设置中找到gitee,点击添加账户,并将自己的账户添…...
橙单前端项目下载编译遇到的问题与解决
今天下载orange-admin前端项目,不过下载下来运行也出现一些问题。 1、运行出现下面一堆错误,如下: 2、对于下面这个错误 error Expected linebreaks to be LF but found CRLF linebreak-style 这就是eslint的报错了,可能是原作者…...
在android中怎么处理后端返回列表中包含图片id,如何将列表中的图片id转化成url
在 Android 中实现从包含图片 ID 的列表获取实际图片 URL 并显示图片,你可以使用以下步骤: 定义数据模型:创建一个 Java 或 Kotlin 类来表示列表中的对象。 网络请求:使用 Retrofit 或其他网络库来获取图片 URL。 异步处理:使用 AsyncTask、RxJava 或 Kotlin 协程来处理网…...
IM聊天代码
客户端 Headers inet inet.h #pragma once #include<Winsock2.h>//#pragma comment(lib,"Ws2_32.lib")class INetMediator; class INet { public:INet(){}virtual ~INet(){}//初始化网络virtual bool initNet() 0;//接收数据virtual void recvData() 0;…...
【Go - context 速览,场景与用法】
作用 context字面意思上下文,用于关联管理上下文,具体有如下几个作用 取消信号传递:可以用来传递取消信号,让一个正在执行的函数知道它应该提前终止。超时控制:可以设定一个超时时间,自动取消超过执行时间…...
Linus: vim编辑器的使用,快捷键及配置等周边知识详解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 vim的安装创建新用户 adduser 用户名Linus是个多用户的操作系统是否有创建用户的权限查看当前用户身份:whoami** 怎么创建设置密码passwdsudo提权(sudo输入的是用户…...
数仓作业延时告警-基于关键路径预推
简介 作业延时告警,通常来说有两种方式: 其一,当作业到目标时间点还没完成触发告警;这类情况,对于目标作业而言,延时已经触发了,风险相对较大;有的是监控接口延时(raw层…...
秋招复习笔记——八股文部分:网络TCP
TCP 三次握手和四次挥手 TCP 基本认识 序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。 确认应答号…...
麒麟桌面操作系统上配置Samba
原文链接:麒麟桌面操作系统上配置Samba Hello,大家好啊!今天给大家带来一篇关于在麒麟桌面操作系统上配置Samba的文章。Samba是一种免费的软件,实现了SMB/CIFS网络协议,使得Linux和Windows系统之间可以共享文件和打印机…...
【Go】探索 Go 语言的内建函数 copy
山水间歌声回荡 回荡思念的滚烫 去年的家书两行 读来又热了眼眶 云水边静沐暖阳 烟波里久违的故乡 别来无恙 你在心上 🎵 张靓颖/张杰《燕归巢》 在 Go 语言中,copy 是一个用于在切片之间复制元素的内建函数。它提供了一种简单而高…...
【React】JSX:从基础语法到高级用法的深入解析
文章目录 一、什么是 JSX?1. 基础语法2. 嵌入表达式3. 使用属性4. JSX 是表达式 二、JSX 的注意事项1. 必须包含在单个父元素内2. JSX 中的注释3. 避免注入攻击 三、JSX 的高级用法1. 条件渲染2. 列表渲染3. 内联样式4. 函数作为子组件 四、最佳实践 在 React 开发中…...
JMeter 使用
1.JMeter 是什么? JMeter 是一款广泛使用的开源性能测试工具,由 Apache 软件基金会维护。它主要用于测试 Web 应用程序的负载能力和性能,但也支持其他类型的测试,如数据库、FTP、JMS、LDAP、SOAP web services 等。 2.特点&#x…...
20240724----安装git和配置git的环境变量/如何用命令git项目到本地idea
备注参考博客: 1)可以参考博客,用git把项目git到本地 2)可以参考博客vcs没有git 3)git版本更新,覆盖安装 (一)安装git (1)官网下载的链接 https://git-scm.com/downlo…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
