redis整合spring

Spring Boot 整合 Redis 使用教程 作为开发者,相信大家都知道 Redis 的重要性。Redis 是使用 C 语言开发的一个高性能键值对数据库,是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。Redis 以超高的性能、完美的文档、简洁的源码著称,国内外很多大型互联网公司都在用,比如说阿里、腾讯、GitHub、Stack Overflow 等等。当然了,中小型公司也都在用。 阅读详情

一、代码编写

package cn.sp.component;

public interface JedisClient {
	public String set(String key,String value);
	public String get(String key);
	public Long hset(String key,String item,String value);
	public String hget(String key,String item);
	//删除
	public Long del(String key);
	
	
}

package cn.sp.component.imp;

import org.springframework.beans.factory.annotation.Autowired;

import cn.sp.component.JedisClient;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisClientImpl implements JedisClient {
	@Autowired
	private JedisPool jedisPool;
	
	@Override
	public String set(String key, String value) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.set(key, value);
		jedis.close();
		return result;
	}
	@Override
	public String get(String key) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.get(key);
		jedis.close();
		return result;
	}
	@Override
	public Long hset(String key, String item, String value) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.hset(key, item, value);
		jedis.close();
		return result;
	}
	@Override
	public String hget(String key, String item) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.hget(key, item);
		jedis.close();
		return result;
	}

	@Override
	public Long del(String key) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.del(key);
		jedis.close();
		return result;
	}

}
@Resource
	private JedisClient jedisClient;
	
	
	@RequestMapping(value="index")
	public String index(@RequestParam(value="page",required=false)String page,@RequestParam(value="typeId",required=false)String typeId,
			@RequestParam(value="releaseDateStr",required=false)String releaseDateStr,ModelMap m,HttpServletRequest request){
		Gson gson = new Gson();
		if (StringUtils.isBlank(page)) {
			page = "1";
		}
		Map<String, Object> map = new HashMap<String,Object>();
		
		PageBean pageBean = new PageBean(Integer.parseInt(page),10);
		map.put("size", pageBean.getPageSize());
		map.put("start", pageBean.getStart());
		map.put("typeId", typeId);
		map.put("releaseDateStr", releaseDateStr);
		
		//先从缓存中取数据
		String json2 = jedisClient.hget(Constant.REDIS_LIST, page);
		Type type = new TypeToken<ArrayList<Blog>>(){}.getType();
		List<Blog> bloglist2 = gson.fromJson(json2, type);
		if(bloglist2 != null &&  bloglist2.size() > 0 &&  StringUtil.isEmpty(typeId) && StringUtil.isEmpty(releaseDateStr)){//搜索条件为空时
			m.put("blogList", bloglist2);
			
		}else{
			
			List<Blog> blogList = blogService.list(map);
			//使用jsoup抓取图片
			for (Blog blog : blogList) {
				String content = blog.getContent();
				Document doc = Jsoup.parse(content);
				Elements jpgs = doc.select("img[src$=.jpg]");
				List<String> imageList = blog.getImageList();
				for(int i=0 ; i<jpgs.size() ; i++){
					Element jpg = jpgs.get(i);
					
					imageList.add(jpg.toString());
					if (i == 2) {
						//最多三个图
						break;
					}
				}
					
			}
			
			//将blogList加入缓存,当搜索条件为空时
			if(StringUtil.isEmpty(typeId) && StringUtil.isEmpty(releaseDateStr)){
				String json = gson.toJson(blogList);
				jedisClient.hset(Constant.REDIS_LIST, page, json);
			}
			
			m.put("blogList", blogList);
		}
		
		
		//先判断有无
		String result = jedisClient.hget(Constant.REDIS_KEY, page);
		if(StringUtil.isNotEmpty(result)){
			m.put("pageCode", result);
		}else{
			//跳转的url
			String url =request.getContextPath()+"/index.html";
			
			//总记录数
			Long totalNum = blogService.getTotal(map);
			
			StringBuffer param = new StringBuffer();
			//分页条件回显
			if (StringUtils.isNotBlank(typeId)) {
				param.append("typeId="+typeId+"&");
			}
			
			if (StringUtils.isNotBlank(releaseDateStr)) {
				param.append("releaseDateStr="+releaseDateStr);
			}
			
			//生成分页html
			String pageCode = PageUtil.genPagination(url, totalNum, Integer.parseInt(page), 10, param.toString());
			//放入redis缓存,以当前页没 item
			jedisClient.hset(Constant.REDIS_KEY, page, pageCode);
			m.put("pageCode", pageCode);
		}
		
		
		m.put("mainPage", "/front/common/list.jsp");
		
		m.put("title", "开源博客系统");
		return "index";
	}

谷歌的gson就是强大。这里把分页数据和分页html代码放进了redis缓存中。

二、applicationContext.xml

2.1单机版

<!-- jedis配置 -->
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
    	<constructor-arg name="host" value="192.168.75.129"></constructor-arg>
    	<constructor-arg name="port" value="6379" ></constructor-arg>
    </bean>
    <bean id="jedisClient" class="cn.sp.component.imp.JedisClientImpl"></bean>

结果使用ab压力测试结果,不加缓存的情况1000次请求10个并发,共需要16s,加缓存后大概只要5s的时间。

刷新缓存的话,只需要删除对应的key即可。

2.2集群版配置

<!-- 配置redis客户端集群版 -->
	<!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
		<constructor-arg>
			<set>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7001"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7002"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7003"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7004"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7005"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7006"/>
				</bean>
			</set>
		</constructor-arg>
	</bean>
	<bean id="jedisClientCluster" class="com.taotao.rest.component.impl.JedisClientCluster"/> -->


Vue3 + EventSource 实战:手把手教你打造实时AI聊天悬浮窗(附完整代码) 本文详细介绍了如何使用Vue3和EventSource技术构建一个实时AI聊天悬浮窗。文章从产品化视角出发,重点讲解了流式数据接收与渲染、悬浮窗UI交互的工程化实现、性能优化及高级功能,并提供了完整的代码示例,帮助开发者快速集成功能完整的AI问答系统。 阅读详情

相关推荐

攻防世界-Reverse-Game

攻防世界,game,逆向

wuh2333的博客 775

springmvc mybatis 分页 控制层及sql语句 oracle mysql easyui

/** * 分页条件查询用户 * @param page * @param rows * @param s_user * @param response * @return * @throws Exception */ @RequestMapping(value="/list") public String list(@RequestParam(value="page",req

JesseCary的博客 770

无人机测绘航线生成算法

JavaScript开发和测试无人机测绘航线的自动生成方法,设计可行,算法可靠

ly1302116的专栏 5235

Spring Boot整合Redis

Redis 基于内存进行存储,支持key-value的存储形式,底层是用C语言进行编写的 基于key-value形式的数据字典,结构简单,没有数据表的概念,直接用键值对形式完成数据的管理。 支持5种数据类型: 字符串 列表 集合 有序集合 哈希 搭建Redis环境 在windows上安装Redis 下载Redis https://github.com/MicrosoftArchive/redis/tags 如不能进入Github,可以到https://download.youkuaiyun.com/downl

zjojk的博客 1万+

从零搭建 AI 运维 Agent:告警自动诊断 + 修复的完整技术方案

适合读者:管理 5-50 台服务器的运维/SRE 工程师、技术负责人 技术栈:FastAPI + React + PostgreSQL + Redis + DeepSeek 关键词:AI运维、AIOps、自动化运维、智能告警、告警修复、Runbook自动化、DevOps、SRE、DeepSeek运维

weixin_38359457的博客 1640

ICC2 实战秘籍:create_workspace 命令全解析

必选项:工作区名称,这可是创建工作区的 “身份证”,必不可少。技术数据选项匹配:优先考虑用 -technology 直接加载技术文件,这是获取最新、最准确技术数据的首选路径;要是已经有合适的技术库了,那 -use_technology_lib 引用现有技术库也能快速上手。精度设置优先规则:技术文件自动配置排在第一位,能自动适配就别手动操心;要是自动配置不理想,那就显式指定 scale_factor;实在没要求,就用默认配置,但得清楚它的精度限制。

weixin_50820814的博客 1124

Spring整合Redis

本文将简要介绍如何在Spring中集成Jedis,配置连接池、数据序列化等内容,并通过封装工具类来优化Redis的使用体验。

懒惰蜗牛的博客 2758

大话西游2经典单机版V8:一键架设+GM全功能+仙玉自由修改

本文详细介绍大话西游2经典单机版V8的一键架设教程和GM全功能使用指南,包括仙玉自由修改技巧。该版本无需虚拟机,解压即玩,完美还原官服经典玩法,支持离线运行,是老玩家重温经典和新玩家体验游戏的理想选择。

weixin_27303545的博客 1131

Spring 整合 Redis

pom构建: 4.0.0 com.x.redis springredis 0.0.1-SNAPSHOT org.springframework.data spring-data-redis 1.0.2.RELEASE org.springframework spring-test 3.1.2.

天行健,君子以自强不息 18万+

稳定性仿真(stb闭环增益仿真)

stb仿真主要是测试电路的稳定性,例如运放在闭环电路中的增益和相位裕度的值,从而判别电路是否正常工作。 以下是stb仿真的过程: (1)调用iprobe器件 从analogLib中调iprobe器件,通过器件中的箭头标识确定接入电路的方法,箭头起点端连运放的输出端,箭头的终点端连在反馈环路的作用端。iprobe器件连入电路后相当于理想导线。(iprobe器件连接在反馈回路上) (2)analyses设置 勾选stb和frequency,此处的频率范围设置在0.1~1GHz,Probe Instance/T

qq_36686804的博客 3万+

【PINN物理信息网络】基于PINN物理信息网络求解瞬态薛定谔方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解瞬态薛定谔方程(python)

k8291121的博客 2723

【详解】Spring整合Redis

通过上述步骤,我们成功地在Spring Boot项目中集成了Redis,并实现了基本的数据存储和读取功能。Redis的强大之处在于其高性能和丰富的数据结构支持,这使得它成为缓存和消息队列等场景的理想选择。希望本文对大家有所帮助,如果有任何问题或建议,欢迎留言交流!以上就是关于Spring整合Redis的技术博客文章,希望能对你的学习和工作有所帮助。当然可以!Spring框架与Redis的整合在现代Web应用中非常常见,特别是在需要缓存数据以提高性能的情况下。

牛肉胡辣汤 1972

【ESP32摄像头开发实例】-视频流接入Home Assistant

在这个项目中,我们将使用ESP32-CAM板构建一个IP监控摄像头。ESP32摄像头将托管一个视频流媒体网络服务器,您可以使用网络中的任何设备进行访问。

视觉与物联智能 790

Spring和Redis整合详解

Spring和Redis整合详解 官方主页 Spring Spring Redis 概述 Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库,缓存和消息代理。 简单来说,它是一个以(key,value)的形式存储数据的数据库. 官网:https://redis.io/download 去下载对应的版本。 Spring已经为我们对Redis做了很好的封装,我们需要做的就是配置和Serc...

feiyangtianyao的专栏 7万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring整合redis

Spring整合redisRedis整合1>下载安装 Redis整合 Redis(Remote Dictionary Server)是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型,redis支持快照,依赖快照进行持久化。 1>下载安装 服务端下载 下载地址: 解压后对应机器位数运行32位或64位目录下的redis-server,直接双击即可 ...

oLengNuanZiZhi12的博客 983

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

spring boot 整合redis

1.简介spring boot提供了spring-data-redis库来整合redis的操作,并通过简单的配置信息实现与redis的整合。2.准备工作安装redis缓存数据库,安装可视化工具,推荐使用:rdm。3.redis简介REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使

深存少年梦 7133

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

spring+redis整合

本文实现spring+redis缓存服务器的整合。 1、redis安装 (1)、下载 由于本文出于测试目的,因此使用windows的redis版本。从https://github.com/ServiceStack/redis-windows下载redis,下载后解压,找到解压文件夹中的downloads中的redis-latest.zip压缩包,该压缩包就是当前支持的最新的windi

三言两语 6616

[redis]spring整合redis

两种:spring整合redis,springboot整合redis spring整合redis: 1、环境及jar包: 环境:jdk1.6;spring+springmvc+ibatis+maven;redis3.2; pom.xml: <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId&gt.

weixin_43303530的博客 2070

Redis基础二(spring整合redis)

​ 在开中某些方法查询的结果要放到缓存中(redis),下一次再调用该方法查询的时候先缓存中查找,如果缓存中有数据就直接返回,否则从关系型数据库中去查询数据。

LiuCJ_20000的博客 2677

Spring基于注解整合Redis

本文介绍了如何使用Spring注解来整合Redis,并使用缓存相关的注解来简化对Redis的操作。当方法被调用时,Spring会先检查缓存中是否存在对应的结果,如果存在,则直接返回缓存的结果;电子商务网站,我们可以使用Redis作为商品信息的缓存,以提高访问速度和减轻数据库的压力。当方法被调用时,Spring会先执行该方法,并将结果存入缓存,而不会去检查缓存中是否已存在。方法时,如果该商品信息已存在于缓存中,则直接从缓存中获取,避免了频繁地访问数据库,提升了访问速度和性能。实例,并配置了连接工厂。

牛肉胡辣汤 1422

Redis之——Spring基于注解整合Redis

在《Redis之——Spring整合Redis》一文中,向大家介绍了如何将Spring与Redis整合起来,但不是基于注解的形式,很多同学都希望能够通过注解的形式来简单的将Spring与Redis整合起来,这样,在使用的时候,只需要在相应的方法上加上注解,便可以使方法轻松的调用Redis的缓存。那么今天就来向大家介绍如何用基于注解的形式来整合Spring与Redis。另外,在之前的一篇《Memca

冰河的专栏 2万+

Spring整合Redis(windows版)

Spring整合RedisRedis环境准备一、下载windows版本的Redis二、安装Redis三、设置Redis服务四、使用Redis客户端来操作RedisSpring整合Redis一、新建applicationContext-jedis.xml文件二、新建配置类三、代码测试 Redis环境准备 一、下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows...

wxj1079099010的博客 313

[Spring]Redis+Spring整合

[Spring]Redis+Spring整合

Konaji 4418
上一篇: 服务器环境搭建【三】
下一篇: springboot-jpa报错No identifier specified for entity:
2YSP
博客等级 码龄10年 12粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值