七天玩转Redis | 打卡第5天 Java操作Redis
在实际使用中,往往不会在命令窗口中执行命令的这种方法,通常是借助工具类对Redis进行操作。Java中可以使用的用来进行Redis操作的有三种:Jedis、RedisTemplate、StringRedisTemplate。
Jedis
使用时需要导入jar包。
<!-- 使用时导入jar包 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
public static void main(String[] args) throws InterruptedException {
// 新建Jedis类对象
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 测试Redis连接
System.out.println("redis连接测试:" + jedis.ping());
System.out.println("判断某个键是否存在:" + jedis.exists("mykey"));
// 获取所有键,并输出
Set<String> keys = jedis.keys("*");
System.out.println(keys);
System.out.println("删除键" + jedis.del("mykey"));
/**
* String类型
*/
// 设置一个键值对
jedis.set("mykey1", "myValue1");
jedis.set("mykey2", "myValue2");
jedis.set("mykey3", "myValue3");
// 根据索引获取一个数据的值
System.out.println("得到的数值为:" + jedis.get("mykey2"));
System.out.println("获取多个键值对:" + jedis.mget("mykey1", "mykey2", "mykey3"));
System.out.println("获取mykey1的数据的长度:" + jedis.strlen("mykey1"));
System.out.println("返回key中字符串值的子串:" + jedis.getrange("mykey2", 1, 5));
System.out.println("字符串追加:" + jedis.append("mykey3", "hello"));
System.out.println("获取到mykey3的值:" + jedis.get("mykey3"));
/**
* Hash类型
*/
// 设置一个Hash数据
Map<String, String> valueMap = new HashMap<>();
valueMap.put("name", "huixiaoyuan");
valueMap.put("sex", "男");
valueMap.put("age", "3");
System.out.println("设置一个Hash数据" + jedis.hmset("myHash", valueMap));
System.out.println("获取指定哈希表中所有的字段和值:" + jedis.hgetAll("myHash"));
System.out.println("获取存储在哈希表中指定字段的值:" + jedis.hget("myHash", "name"));
System.out.println("删除一个或多个哈希表字段:" + jedis.hdel("myHash", "sex"));
System.out.println("获取哈希表中字段的数量:" + jedis.hlen("myHash"));
/**
* List类型
*/
System.out.println("将一个或多个元素插入列表表头:" + jedis.lpush("myList", "l1", "l2", "l3"));
System.out.println("将一个或多个元素插入列表尾部:" + jedis.rpush("myList", "l4"));
System.out.println("获取列表长度:" + jedis.llen("myList"));
System.out.println("通过索引获取列表中的元素:" + jedis.lindex("myList", 2));
System.out.println("移除并获取列表第一个元素:" + jedis.lpop("myList"));
System.out.println("移除并获取列表最后一个元素:" + jedis.rpop("myList"));
/**
* Hash类型
*/
System.out.println("设置一个Hash数据" + jedis.hmset("myHash", valueMap));
System.out.println("获取指定哈希表中所有的字段和值:" + jedis.hgetAll("myHash"));
System.out.println("获取存储在哈希表中指定字段的值:" + jedis.hget("myHash", "name"));
System.out.println("删除一个或多个哈希表字段:" + jedis.hdel("myHash", "sex"));
System.out.println("获取哈希表中字段的数量:" + jedis.hlen("myHash"));
/**
* Set类型
*/
System.out.println("向集合中添加一个或多个成员:" + jedis.sadd("mySet","s1","s2","s3"));
System.out.println("向集合中添加一个或多个成员:" + jedis.sadd("mySet2","s3","s4","s5"));
System.out.println("获取集合中成员的个数:" + jedis.scard("mySet"));
System.out.println("返回第一个集合与其他集合之间的差异:" + jedis.sdiff("mySet","mySet2"));
System.out.println("返回集合中的所有元素:" + jedis.smembers("mySet"));
/**
*ZSet类型
*/
System.out.println("向有序集合中添加一个或多个成员:" + jedis.zadd("myZset",1,"m1"));
System.out.println("向有序集合中添加一个或多个成员:" + jedis.zadd("myZset",2,"m2"));
System.out.println("向有序集合中添加一个或多个成员:" + jedis.zadd("myZset",3,"m3"));
System.out.println("获取有序集合的成员数:" + jedis.zcard("myZset"));
System.out.println("计算有序集合中指定区间分数的成员数:" + jedis.zcount("myZset",0,2));
System.out.println("移除有序集合中的一个或多个元素:" + jedis.zrem("myZset","m2"));
}
RedisTemplate
RedisTempate类也是在Java中操作Redis的常用类,与Jedis区别如下:
- Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。
- SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring系列框架进行搭配使用。
所以Jedis一般可以用于没有使用spring系列框架的场景,而RedisTempate则多用于企业利用框架的实际开发中。
RedisTemplate的使用
redisTemplate.opsForValue(); 对应String类型操作
redisTemplate.opsForHash(); 对应Hash类型操作
redisTemplate.opsForList(); 对应List类型操作
redisTemplate.opsForSet(); 对应Set类型操作
redisTemplate.opsForZSet(); 对应ZSet类型操作
StringRedisTemplate
与RedisTemplate的区别:
- StringRedisTemplate继承自RedisTemplate。
- 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
- SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
- StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
- RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
最佳实践
当你的redis数据库里面本来存的就是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。
但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。
在操作上,StringRedisTemplate和RedisTemplate是一样的。
总结
- Jedis适合在没有spring系列框架的普通Java工程中使用
- RedisTemplate适合在多种数据类型的项目,且希望自动进行数据转换的情况下使用
- StringRedisTemplate适合在只有字符串处理的情况下使用
在实际使用中,可根据项目实际情况,选择更适合的工具进行开发。
相关推荐
Java+SSM+MySQL+微信小程序构建英语学习激励系统:从毕业设计到工程实践
在Java Web开发领域,SSM(Spring+SpringMVC+MyBatis)框架组合因其清晰的MVC分层架构和对核心编程思想(如IoC、AOP、ORM)的完整实践,依然是理解企业级应用开发的经典选择。其原理在于通过Spring的IoC容器管理对象生命周期,利用AOP处理横切关注点如事务管理,MyBatis则提供了灵活的SQL映射能力,实现对数据库的精准操作。这种技术栈的价值在于能够构建结构清晰、易于维护的中小型项目,尤其适合需要复杂业务逻辑和数据统计的场景,例如在线教育、用户激励系统等应用。本文聚
【信息科学与工程学】【广告科学】第四十四篇 广告平台投放和广告计费类算法01
全行业的中国企业广告投放模型总表。行业分类依据《国民经济行业分类》(GB/T 4754—2017)的门类/大类 ,产品层参考"主营产品统计代码"行业—产品映射 ,平台算法以巨量引擎、腾讯广告等官方文档为硬支撑 ,合规部分严格对齐《互联网广告管理办法》以及2026年市场监管部门最新合规提示 。编号类型(门类)行业(大类)企业及产品内容列表投放模型投放平台投放人群欲望激发维度面向人群模式(地域/文化/年龄/角色)001A 农林牧渔01 农业北大荒/中粮:五常大米、面粉、食用油、杂粮品牌曝光 + 电商转化双轨(C
YOLO26算法工业车间与城市道路安全标识及交通标志目标检测+训练好的模型+260张数据集+pyqt可视化界面.zip
附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[安全标识(safety), 交通标志(traffic)] · 训练集:240 张 · 验证集:10 张 · 测试集:10 张 · 总计:260 张 该数据集精准聚焦于工业生产环境与城市道路交通场景,旨在为高危作业区域的安全警示系统及道路通行管理提供可靠视觉识别支持。通过采集真实工作现场与道路环境中的关键标识,该数据集有效支撑了对人员行为规范提示与交通状态预警的自动化感知需求,具备显著的工程实用价值与行业落地潜力。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 67 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.7278** mAP50-95 | 0.6630 Precision | 0.7294 Recall | 0.7273 train/box_loss | 0.7483 train/cls_loss | 0.6857 val/box_loss | 0.6823 val/cls_loss | 1.8035 【训练过程分析】 67 轮训练后 mAP50 为 0.7278,模型基本收敛但还有提升余地。Loss 曲线下降正常,后期趋于平缓。mAP50-95 为 0.6630,定位精度尚可。 【模型性能评估】 Precision 0.7294、Recall 0.7273,精度高于召回,存在一定漏检。多类检测中,不同类别性能可能有差异,需关注... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。
技术转移机构如何基于数据提升项目撮合精准度?.docx
技术转移机构如何基于数据提升项目撮合精准度?
IEEE基于高频信号注入法的PMSM零低速无位置控制永磁同步电机仿真,有参考文献
内容概要:本文围绕基于高频信号注入法的永磁同步电机(PMSM)在零低速工况下的无位置传感器控制技术开展系统性仿真研究,重点聚焦旋转高频信号注入法的应用。通过Matlab/Simulink平台构建完整的控制系统仿真模型,深入分析了高频电压信号注入后电机凸极效应引起的响应电流特征,进而设计并实现了基于信号调制与解调、滤波处理及位置估计算法的位置观测器。研究有效解决了传统机械式位置传感器在极低速或零速运行时难以精确检测转子位置的问题,提升了系统可靠性与鲁棒性。全文涵盖信号注入策略、高频响应信号处理流程、转子位置估算原理、误差补偿机制以及仿真验证等关键技术环节,并配有详实的参考文献,具备较强的理论深度与工程实践价值。; 适合人群:从事电机驱动控制、电力电子与电力传动、自动化及相关领域的科研人员、高校研究生,以及具备一定Matlab/Simulink仿真能力和电机控制理论基础的工程技术人员。; 使用场景及目标:①用于永磁同步电机无传感器控制算法的教学演示与科研仿真;②为低速高精度伺服系统、新能源汽车电驱动系统等应用场景提供位置估计算法的设计与优化思路;③支撑高水平学术论文的复现、改进与创新性控制策略的开发验证。; 阅读建议:建议结合文中所述Simulink仿真模型与配套Matlab代码进行动手实践,重点掌握高频信号注入方式的选择、高频响应信号的提取与解调过程、位置误差提取及PI跟踪观测器的设计细节,同时应查阅所列参考文献以深化对高频注入法物理机理与数学建模的理解。


