Redis在java项目中的缓存应用

Redis-使用java代码操作Redis Redis 提供了基于 SETNX(set if not exists)命令和 Lua 脚本等方法,可以实现分布式系统中的实时锁定机制,用于协调多个节点的操作。通过将会话数据存储在 Redis 中,可以实现负载均衡、容错和扩展性,同时保证会话数据的快速访问。Redis 支持数据的持久化,可以将内存中的数据定期保存到磁盘上,以保证数据的安全性。Redis 提供了基于 Lua 脚本的原子操作,可以实现分布式锁和限流,保证在分布式环境下的数据一致性和流量控制。存储基本不会变化的数据,然后这些数据又被多个表使用。 阅读详情

前言

在当前大数据时代,信息量、数据量日益膨胀;一些存储系统的数据库也不断优化,去适应这个大数据的需求;当我们的客户端某个系统发送请求频繁读取大量数据的时候,单单是:客户端–>请求/响应–>数据库;这种模式是远远不能满足用户需求的;因为这种模式频繁请求涉及很多的IO流访问,成本量太高;就从系统处理器上面来说,当用户发送指令给PC系统时,其处理器执行该指令很快很快(在内存中);接着从IO流访问数据库开始就变得很慢很慢(远远跟不上处理器的执行速度了,导致处理效率非常低);如果我们将用户需要的数据提前缓冲到计算机内存中(相当于处理器的处理响应结果可以直接在内存中拿到,不需要再操作多余的IO流);读取数据响应就非常快了,就可以大幅度提高效率,节省时间。但是Redis的内存管理成本也是比较高的,如果Redis配置不当,占用的过多的内存是会带来很大的性能影响的;因此需要合理的配置好Redis的参数,控制和节约内存。
常用的配置优化:
1.将redis.conf文件中vm-enabled为no(关闭虚拟内存功能);
2.设置好redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。
Redis的应用

一、Redis在java项目中的应用

1.前提条件(我自己涉及需要到的jar包,可以不用)
1.1 导入redis包
在这里插入图片描述
可以自行百度下载,也可以点此链接下载redies包
1.2 导入json包(也可以不使用json,本人在项目中使用到了就导进来)
在这里插入图片描述
自行百度下载或点这里json包
1.3 需要已经安装部署好Redis服务端,可以参考:配置redis

2.java代码实现
2.0 RedisUtil.java类和main方法

public class RedisUtil{
	//获取redis连接方法
	private static JedisCluster redis=null;
	private static JedisCluster getRedisConnection(){
		if(redis==null){
			createPool();
		}
		return redis;
	}
	/**
	 * @param args
	 * 测试main
	 */
	public static void main(String[] args) {
		JedisCluster redis=RedisUtil.getRedisConnection();//调用获取redis连接的方法
		RedisUtil.setValue("key_1", "value_1");//设置key_1=value_1
		RedisUtil.setValue("key_1_1", "value_1_1");//设置key_1=value_1
		System.out.println(RedisUtil.getValue("key_1","key_1_1"));//获取子key的值
		System.out.println(RedisUtil.getAllValue("key_1"));	//获取key的所有值
		JSONObject jsonobj=new JSONObject();//创建json对象
		jsonobj.put("ObjI_Button", "ADD,QUERY,UPDATE");
		jsonobj.put("Objl_Factory", "WH");
		jsonobj.put("Objl_Repair_depart", "1,2");
		JSONArray jsonArr=new JSONArray();//创建json数组
		jsonArr.add(jsonobj);
		RedisUtil.setValue("key_2", "key_2_1",jsonArr.toString());//存key值
		RedisUtil.delKey("key_1", "key_1_1");//删除子key
	}
	}

2.1创建redis链接
(1)IOUtil.java类:操作IO工具类,主要用于读取Redis配置文件的参数

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
public class IOUtil {
/*
 * IO流利用Properties类(持久化的属性集)读取文件的key=value值
 *1.创建Properties类对象
 *2.加载属性文件 
 *@param--key:需要取value对应的key值
 *@param--path:文件路径
 *@return key的属性值
 * */
public static String getPropertyByName(String key,String path){
	Properties properties=new Properties();//创建properties类对象
	InputStream input=null;//输入流
	try {
	    input=new FileInputStream(path);//输入流读取文件
		properties.load(new InputStreamReader(input, "utf-8"));//加载属性文件
		return properties.getProperty(key);//获取key的属性值
	}catch (IOException e) {
		e.printStackTrace();
		return e.getMessage();
	}finally{
		if(input!=null){
			try {
				input.close();//关闭输入流
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}	
}
}

(2)createPool.java类:创建redis连接池,主要用于读取配置文件并获取host地址和端口,配置redis客户端的服务参数

	/*
	 * 创建redis连接
	 * 1.读取配置文件
	 * 2.获取HOST地址和端口port
	 * 3.redis客户端服务配置
	 * @param 全局变量:JedisCluster redis
	 * */
	private static void createPool(){
		//获取本地文件key对应的value值,文件名:Config/test.properties,格式:key=value;
		String maxToal=IOUtil.getPropertyByName("pool.size","Config/test.properties");
		//格式:redis.cluster.address=192.168.0.1:10001;192.168.0.2:10002;192.168.0.3:10003;可以设置多个集群,ip+port
		String addressList=IOUtil.getPropertyByName("redis.cluster.address","Config/test.properties");
		//保存addressList里面的HOST地址和端口port
		Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
		for(String address:addressList.split(";")){
			jedisClusterNodes.add(
					new HostAndPort( address.split(":")[0] , Integer.parseInt(address.split(":")[1]) ) );
		}
		//redis客户端服务配置
		JedisPoolConfig config = new JedisPoolConfig();
		//设置获取连接时最大的等待时间,超时就抛异常;小于0:阻塞不确定的时间,默认-1
		config.setMaxWaitMillis(20*1000);
		//设置最大连接数,默认是8个
		config.setMaxTotal(Integer.parseInt(maxToal));
		//获取redis连接,参数:address:port、config
		redis = new JedisCluster(jedisClusterNodes,config);//redis为全局变量,redis不为null就已经是创建了,不必重复创建
	}

2.2 操作redis数据库常用一般方法

       //1.获取key/subkey对应的value值
	public static String getValue(String key,String subKey){
		JedisCluster jd=RedisUtil.getRedisConnection();
		String reStr= jd.hget(key, subKey);
		return reStr;
	}
	public static String getValue(String key){
		JedisCluster jd=RedisUtil.getRedisConnection();
		String reStr=jd.get(key);
		return reStr;
	}
	//2.获取key/subkey调用的次数
	public static Long getIncr(String key){
		JedisCluster jd=RedisUtil.getRedisConnection();
		return jd.incr(key);
	}
	public static Long getIncr(String key,String subKey){
		JedisCluster jd=RedisUtil.getRedisConnection();
		return jd.hincrBy(key, subKey,1);
	}
	//3.获取key对应value值调用的次数
	public static Long getIncr(String key,String subKey,long value){
		JedisCluster jd=RedisUtil.getRedisConnection();
		return jd.hincrBy(key, subKey,value);
	}
	//4.设置保存key/subkey-value值
	public static void setValue(String key,String value){
		JedisCluster jd=RedisUtil.getRedisConnection();
		jd.set(key, value);
	}
	public static void setValue(String key,String subKey,String value){
		JedisCluster jd=RedisUtil.getRedisConnection();
		jd.hset(key,subKey, value);
	}
	//5.设置key的生存时间,过时就自动删除
	public static void expire(String key, int seconds){
		JedisCluster jd=RedisUtil.getRedisConnection();
		jd.expire(key, seconds);
	}
	//6.直接删除key/subkey
	public static void delKey(String key){
		JedisCluster jd=RedisUtil.getRedisConnection();
		jd.del(key);
	}
	public static void delKey(String key,String subKey){
		JedisCluster jd=RedisUtil.getRedisConnection();
		jd.hdel(key, subKey);
	}
	//7.获取key所对应的key-value键值对,存map
	public static Map<String,String> getAllValue(String key){
		JedisCluster jd=RedisUtil.getRedisConnection();
		Map<String,String> reStr=jd.hgetAll(key);
		return reStr;
	}
	//8.判断key/subkey是否存在
	public static boolean keyIsExists(String key){
		JedisCluster jd=RedisUtil.getRedisConnection();
		return jd.exists(key);
	}
	public static boolean keyIsExists(String key,String subKey){
		JedisCluster jd=RedisUtil.getRedisConnection();
		return jd.hexists(key, subKey);
	}
Java面试题缓存技术总结:Redis高频考点汇总 前言 Java面试指导专栏有之前的20节扩展到了40节,因为感觉很多知识点和小伙伴分享 此外也想通过该专栏帮助更多人了解面试细节、谈薪细节、多维度分析总结下该方面的技能。 “~~社长”一个粉丝好友,粉丝团成员,谢谢对专栏进度监督,自然也感谢监督的同时不忘给5星好评,由于刚更新完企业登录相关的课程,该专栏的更新稍微延后了一点,抱歉了 网友评论 开始正常更新我们的专栏吧... 更新... 阅读详情

相关推荐

Java 中使用 Redis 的几种方式优缺点对比

Redis 是一个高性能的键值对存储系统,广泛用于缓存、消息队列、分布式锁等场景。在 Java 开发中,集成 Redis 是提升应用性能和扩展性的常用方式。随着 Redis 客户端和技术栈的不断发展,开发者可以通过多种方式在 Java 中使用 Redis。本文将详细介绍几种常见的 Redis 集成方式,分析其优缺点,帮助开发者选择适合自己项目的实现方式。

fudaihb的博客 1758

Redis快速入门及在Java中使用Redis

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql(NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。 )数据库。

程序猿追的博客 4万+

在ubuntu上安装FastSufer【本机安装】

其实说是安装,只需要将文件下载并解压即可。推荐教程注意版本:在下面这个网址根据你的操作系统找到最新的版本安装。比如我的操作系统为Ubuntu 20.04.5,因此我安装ubuntu20-7.4.1的freesurfer打开~/.bashrc在~/.bashrc文件中添加以下三行关闭~/.bashrc更新~/.bashrc安装tcsh注意每次进入终端使用freesurfer时需要输入FREESURFER_HOME路径根据freesurfer的文件夹所在位置自己修改。

Xingwen_future的博客 2008

Java中使用Redis(即学即用)

一、为什么需要用Redis? Redis(Remote Dictionary Server),一个基于内存的高性能key-value数据库。针对关系型数据库性能瓶颈来设计的,处理关系型数据库不擅长做的业务场景。Redis 多用于项目的高速缓存,可以让项目性能更好。 Redis的应用场景 二、安装Redis 1、下面提供其中一个版本的Redis: 链接:https://pan.baidu.com/s/1Z3QRpdMzUyPh8ODZJDgGEA 提取码:j8vl 复制这段内容后打开百度...

心有谦谦结 9568

MMI分束器仿真优化:用Lumerical FDTD实现95%耦合效率的实战技巧

本文详细介绍了使用Lumerical FDTD软件对MMI分束器进行仿真优化的实战技巧。通过构建高保真模型、精确配置光源与边界条件,并重点优化波导结构与taper设计,系统性地将器件的耦合效率提升至95%以上。文章还分享了利用参数扫描、varFDTD加速等高级方法,帮助硅光芯片设计工程师高效实现高性能MMI分束器设计。

rainy的博客 772

Winform零基础从入门到精通(3)——WinForm基础语法与事件机制详解

通过系统学习基础语法与事件机制,结合实际问题调试,可以快速掌握WinForm开发的核心技能。遇到问题时,优先检查事件绑定和异常处理,逐步培养代码规范意识。​安全转换字符串为数值,避免输入错误导致的崩溃。验证输入(如仅允许数字)​)传递事件相关数据。◦ 事件参数类型:​。

WangMing_X的博客 1492

Redis在Java中的应用

Redis在Java中的应用主要依赖于如Jedis、Lettuce、Spring Data Redis和Redisson等库和框架。开发者可以根据具体需求选择合适的工具,让Redis的操作更加高效和简洁。在分布式架构、缓存、会话存储、消息队列等多个场景中,Redis与Java结合使用,都能够发挥出较高的性能和灵活性。Spring Data Redis中提供了一个高度封装的类RedisTemplate,针对Jedis客户端中大量的API进行归类封装,将同一类型的操作封装为operation接口。

m0_74057690的博客 1477

SAP ABAP 获取采购订单未清数量/在途库存的 6 种方式

这篇文章我总结了获取采购订单未清数量/在途库存的 6 种方式,每种方式的优劣势和适用场景有所不同。读者请结合自身需要选择。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 2656

【干货】Redis在Java开发中的基本使用和巧妙用法

本文介绍了Redis在Java中的巧妙用法,包括基本数据类型和Jedis API的基本用法,以及高级用法如连接池、事务和发布/订阅模式等。同时,还介绍了使用Spring Data Redis的方法,使得在Spring应用程序中使用Redis变得更加容易。这些方法可以帮助Java开发人员更好地使用Redis实现高效、可靠的缓存。参考资料Redis官网:https://redis.io/Jedis GitHub仓库:https://github.com/redis/jedis。

Dark_orange的博客 2830

大数据在电力行业的应用案例解析-【电力技术】(九)大数据在电力储能运维中的深度应用(含故障预测代码)

大数据技术为电力储能运维提供了“精准化、智能化、高效化”的解决方案,破解了传统运维的核心痛点,实现了储能系统从“被动抢修”到“主动运维”的转型,为新型电力系统建设提供了重要支撑。当前,随着储能产业的快速发展,大数据与储能运维的融合将更加深入,未来将结合人工智能、物联网、区块链等技术,实现储能运维的全流程智能化——从设备故障的提前预警,到寿命的精准预测,再到运维策略的自动优化、调度协同的实时响应,进一步提升储能系统的安全性、经济性与可靠性。

getusushu的博客 87

100天精通Python(可视化篇)——第89天:Bokeh库绘图可视化基础入门(参数说明+案例实战)

专栏导读 一、Bokeh是什么? 二、安装与导入 三、Bokeh接口介绍 四、创建图表 五、添加自定义渲染器 切换主题 添加图例 图例位置 图例方向 图例背景和边界 图例文本的外观 行列布局 网格布局

努力让自己发光,对的人才能迎着光而来 1万+

Redis实战:Redis在Java中的基本使用

本片将介绍 Redis 在 Java 中的基本使用

栗筝i的博客 1万+

[SaaS] 阿里妈妈-万相营造

有controlnet的介入,我们是默认controlnet会介入,在inapinting时会把带有商品的画布做一点扩充,然后走inapinting和controlnet,其实也做了一点outpainting的工作。基于阿里妈妈营销平台,提供从图文到视频再到落地页的素材级智能化创意支持,是您营销创意数字资产累积和升值的阵地,最大化提升营销的效率和效果。目前看来抠图基本都是sam了,现在weshop也是,都有一个预扣好的主体,但是一点进去也会重新sam。atomovideo->图生视频。

liguandong 523

从Shop-Type缓存实战解析Redis List结构在Java项目中的典型应用

本文以高并发项目中的店铺类型列表缓存为实战案例,深入解析了Redis List数据结构在Java项目中的典型应用。通过StringRedisTemplate和JSONUtil工具,详细阐述了如何实现高效的缓存查询、批量写入与缓存预热,并探讨了List结构在此场景下的优势、潜在问题及生产环境的一致性保障策略,为处理高频访问、低频变更的有序列表数据提供了可复用的解决方案。

alice7model的博客 410

【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)

随着打印技术的快速发展,镭射打印技术也开始得到越来越广泛的应用。这种技术可以被用于在木材、塑料、皮革、织物等各种材料上进行图形打印,并且通常比传统机器更快、更准确和更灵活。

嵌入式技术开发 7198

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Redis】使用java代码操作Redis,以及在实际应用的场景

1.1在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java。如下图:关于如何使用window安装Redis,我已在上一篇博客中详细介绍了!使用我们的Java开发工具去连接到 redis 服务。

m0_73647713的博客 4237

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

使用Redis优化Java应用的性能——高效的缓存实践

Redis是一个开源的键值存储系统,它支持多种类型的数据结构如字符串、哈希、列表、集合、有序集合等。Redis的所有数据都存放在内存中,从而提供快速的读写速度,是构建高性能、可扩展Web应用的理想选择。Redis提供了一个高性能的解决方案,适用于各种需要快速响应和高并发的应用场景。通过合理使用Redis,Java应用可以显著提高性能和用户满意度。

youmashengyue的博客 755

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Redis-使用java代码操作Redis->java连接上redis,java操作redis的常见类型数据存储,redis中的项目应用

计数器和限流:使用 Redis 的计数器功能统计页面访问次数、API 调用次数等,还可以结合 Redis 的过期时间和持久化特性实现限流功能,控制请求的频率和并发量。数据缓存:使用 Redis 作为缓存,将热门或频繁访问的数据存储在 Redis 中,减少对底层数据存储系统(如数据库)的访问压力,提高系统的读取性能。分布式锁:使用 Redis 的原子操作和过期时间特性,实现分布式锁功能,保证在分布式系统中的临界资源互斥访问,避免并发问题。将存储的数据转换成json串,进行存储。3.redis中的项目应用。

weixin_73471776的博客 575

redis缓存实际应用

redis缓存实际应用 小编这里的Redis安装的话是直接安装在小编电脑上的虚拟机上的,所以需要ip进行连接。 接下来小编就直接开始操作了,Redis应用分一下几个步骤 1.创建maven项目,导入所需要的依赖,小编这里就直接展示Redis的依赖了 <dependency> <groupId>redis.clients</gro...

what_where的博客 351

【Redis】Java连接redis进行数据访问及项目的实例应用场景

打开开发工具( IDEA ) ,在需要连接Redis的项目中,找到 pom.xml 配置文件导入依赖在pom.xml 配置文件中导入以下依赖 :打开本地的Redis【windows连接】,如果是连接虚拟机的Redis RedisDesktopManager数据库只需要打开虚拟机并且连接,开发工具即可连接,如果不知道的可以看我博客 :【Redis】的简介和安装配置(Linux和windows)及操作命令。

SAME_LOVE的博客 2325

Java与Redis的集成

当将Java与Redis集成,Redis中的项目应用是现代软件开发的关键组成部分。本文深入探讨了如何将Java与Redis集成,以及如何应用Redis来解决常见挑战,如缓存、会话管理、排行榜和消息队列。如果您是Java开发者或对高性能数据存储感兴趣,这篇文章将为您提供实用的见解和示例。立即阅读,探索Java与Redis的集成之道,发现Redis的无限可能性。

kissship的博客 1236

redis在Java中的应用

基本数据类型:字符串(String),哈希(hash),列表(List),集合(set),有序集合。3.编写配置类 RedisConfig,创建RedisTemplate对象。做缓存使用(提高菜品查询效率,不需要每次都去数据库里面查。1.导入Spring Date Redis坐标。4.案例(以苍穹外卖为列子,设置店铺营业状态)2.配置Redis数据源。

2301_76506734的博客 58

Redis的缓存实战方案

本文介绍了Redis缓存的核心概念和使用策略。缓存作为内存中的临时数据存储区,能显著提高系统性能,但也带来数据一致性、维护成本等问题。文章详细讲解了三种缓存更新策略(内存淘汰、超时剔除、主动更新)及其适用场景,重点分析了主动更新的实现方式和注意事项。此外,针对缓存穿透问题,提出了空对象缓存和布隆过滤器两种解决方案;对于缓存雪崩和击穿问题,介绍了互斥锁和逻辑过期等应对方法,并提供了Java代码示例。文章强调了根据不同业务需求选择合适的缓存策略,以平衡性能与一致性。

xinsuiyu123的博客 840

【解决方案】Java 互联网项目中常见的 Redis 缓存应用场景

合集 - Redis(6)1.【主流技术】一文掌握 Redis 在 Java 中的 5 大基本结构应用2023-11-102.【进阶篇】使用 Redis 实现分布式缓存的全过程思考(一)02-273.【主流技术】15 分钟掌握 Redis 的安装部署和基本特性2022-07-114.【进阶篇】基于 Redis 实现分布式锁的全过程05-065.【解决方案】Java 互联网项目中常见的 Redis ...

weixin_29799209的博客 291

使用SpringCache实现添加Redis缓存

Spring Cache 是 Spring 框架提供的一套缓存抽象,它简化了在 Java 应用程序中使用缓存的过程。Spring Cache 提供了统一的缓存抽象API,使得开发者可以在不同的缓存实现之间轻松切换,而不需要修改应用程序代码。

weixin_60822173的博客 483

Java操作Redis

本文实现用Java连接并操作redis,是后续各种涉及到缓存业务文章的基础。明天将整合redis、jwt、md5加密、mybatis-plus、邮件发送、前端的实现做一套完整的登陆功能,有兴趣的架构师明天可以跟进一下~一、Redis是什么?Redis是一个开源的高性能键值对(Key-Value)数据库,也叫非关系型数据库。它以内存存储为核心,支持多种数据结构,兼具高性能、高可用性和可扩展性。

lwj123456789123的博客 1180
上一篇: Java NIO之缓存Buffer代码实例
下一篇: Java NIO之通道Channel代码实例
huahua.Dr
博客等级 码龄8年 87粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值