Spring Data Redis应用场景

揭秘Spring Data Redis在后端领域的神奇之处 在后端开发的“武器库”中,Redis是一把“瑞士军刀”——它能做缓存、消息队列、分布式锁、计数器,几乎无所不能。但直接使用Jedis或Lettuce操作Redis,就像用瑞士军刀的“ raw blade ”(裸刀)切菜:锋利但容易伤手(连接泄漏、序列化乱码、异常未处理)。Spring Data Redis的出现,就像给这把瑞士军刀套上了“智能刀鞘”:它帮你管理连接池、处理序列化、封装常用操作,甚至用JPA风格的Repository让你“零Redis命令”操作数据。本文将从核心概念技术原理实际应用。 阅读详情

---------------------------Spring Data Redis-------------------
一、spring data redis介绍?

1、什么是spring data?
    spring data是用于简化数据库访问的开源框架,主要包括:redis、jdbc、elasticsearch
2、什么是spring data redis?
    spring data redis是spring data下的一个子模块,作用:简化redis操作
3、为什么用RedisTemplate而不用jedis?
    springboot2.x后redisTemplate默认底层是lettuce(netty(nio)),大并发下lettuce效果更高
    RedisTemplate可以设置通用的序列化器
4、spring data redis的启动器
    spring-boot-starter-data-redis

二、spring data redis入门

1、pom.xml
    spring-boot-starter-web
    spring-boot-starter-data-redis
    spring-boot-starter-test
2、application.yml
    spring:
      redis:
        cluster:
          nodes:
            - 192.168.204.132:7001
            - 192.168.204.132:7002
            - 192.168.204.132:7003
            - 192.168.204.132:7004
            - 192.168.204.132:7005
            - 192.168.204.132:7006
        jedis:
          pool:
            max-active: 20 #连接池最大连接数
            max-idle: 10 #连接池中的最大空闲连接
            min-idle: 5 # 连接池中的最小空闲连接

``
在这里插入图片描述

3、config(配置)

package com.powershop.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory){
	RedisTemplate redisTemplate = new RedisTemplate();
	redisTemplate.setConnectionFactory(factory);

	//设置通用序列器
	redisTemplate.setKeySerializer(new StringRedisSerializer());
	redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

	redisTemplate.setHashKeySerializer(new StringRedisSerializer());
	redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

	return redisTemplate;
    }

}

在这里插入图片描述
4、封装RedisTempLate

package com.powershop.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

//封装redistemplate
@Component
public class RedisClient {

    @Autowired
    private RedisTemplate redisTemplate;


    /**
     * 指定缓存失效时间
     * @param key 键
     * @param time 时间(秒)
     * @return
     */
    public boolean expire(String key,long time){
	try {
	    if(time>0){
		redisTemplate.expire(key, time, TimeUnit.SECONDS);
	    }
	    return true;
	} catch (Exception e) {
	    e.printStackTrace();
	    return false;
	}
    }

    /**
     * 根据key 获取过期时间
     * @param key 键 不能为null
     * @return 时间(秒) 返回0代表为永久有效
     */
    public long ttl(String key){
	return redisTemplate.getExpire(key,TimeUnit.SECONDS);
    }

    /**
     * 判断key是否存在
     * @param key 键
     * @return true 存在 false不存在
     */
    public Boolean exists(String key){
	return redisTemplate.hasKey(key);
    }

    //============================String=============================
    /**
     * 普通缓存获取
     * @param key 键
     * @return 值
     */
    public Object get(String key){
	return key==null?null:redisTemplate.opsForValue().get(key);
    }

    /**
     * 普通缓存放入
     * @param key 键
     * @param value 值
     * @return true成功 false失败
     */
    public boolean set(String key,Object value) {
	try {
	    redisTemplate.opsForValue().set(key, value);
	    return true;
	} catch (Exception e) {
	    e.printStackTrace();
	    return false;
	}
    }

    /**
     * 删除缓存
     * @param key 可以传一个值 或多个
     */
    public Boolean del(String key){
	return redisTemplate.delete(key);
    }

    /**
     * 递增
     * @param key 键
     * @param delta 要增加几(大于0)
     * @return
     */
    public long incr(String key, long delta){
	if(delta<0){
	    throw new RuntimeException("递增因子必须大于0");
	}
	return redisTemplate.opsForValue().increment(key, delta);
    }

    /**
     * 递减
     * @param key 键
     * @param delta 要减少几(小于0)
     * @return
     */
    public long decr(String key, long delta){
	if(delta<0){
	    throw new RuntimeException("递减因子必须大于0");
	}
	return redisTemplate.opsForValue().decrement(key, -delta);
    }

    //================================hash=================================
    /**
     * HashGet
     * @param key 键 不能为null
     * @param item 项 不能为null
     * @return 值
     */
    public Object hget(String key,String item){
	return redisTemplate.opsForHash().get(key, item);
    }

    /**
     * 向一张hash表中放入数据,如果不存在将创建
     * @param key 键
     * @param item 项
     * @param value 值
     * @return true 成功 false失败
     */
    public boolean hset(String key,String item,Object value) {
	try {
	    redisTemplate.opsForHash().put(key, item, value);
	    return true;
	} catch (Exception e) {
	    e.printStackTrace();
	    return false;
	}
    }

    /**
     * 删除hash表中的值
     * @param key 键 不能为null
     * @param item 项 可以使多个 不能为null
     */
    public void hdel(String key, Object... item){
	redisTemplate.opsForHash().delete(key,item);
    }

    //============================set=============================
    /**
     * 根据key获取Set中的所有值
     * @param key 键
     * @return
     */
    public Set<Object> smembers(String key){
	try {
	    return redisTemplate.opsForSet().members(key);
	} catch (Exception e) {
	    e.printStackTrace();
	    return null;
	}
    }

    /**
     * 将数据放入set缓存
     * @param key 键
     * @param values 值 可以是多个
     * @return 成功个数
     */
    public long sadd(String key, Object...values) {
	try {
	    return redisTemplate.opsForSet().add(key, values);
	} catch (Exception e) {
	    e.printStackTrace();
	    return 0;
	}
    }


    /**
     * 移除值为value的
     * @param key 键
     * @param values 值 可以是多个
     * @return 移除的个数
     */
    public long srem(String key, Object ...values) {
	try {
	    Long count = redisTemplate.opsForSet().remove(key, values);
	    return count;
	} catch (Exception e) {
	    e.printStackTrace();
	    return 0;
	}
    }
    //===============================list=================================

    /**
     * 获取list缓存的内容
     * @param key 键
     * @param start 开始
     * @param end 结束  0 到 -1代表所有值
     * @return
     */
    public List<Object> lrange(String key, long start, long end){
	try {
	    return redisTemplate.opsForList().range(key, start, end);
	} catch (Exception e) {
	    e.printStackTrace();
	    return null;
	}
    }

    /**
     * 将list放入缓存
     * @param key 键
     * @param value 值
     * @return
     */
    public boolean rpush(String key, Object value) {
	try {
	    redisTemplate.opsForList().rightPush(key, value);
	    return true;
	} catch (Exception e) {
	    e.printStackTrace();
	    return false;
	}
    }

    /**
     * 将list放入缓存
     * @param key 键
     * @param value 值
     * @return
     */
    public boolean lpush(String key, List<Object> value) {
	try {
	    redisTemplate.opsForList().rightPushAll(key, value);
	    return true;
	} catch (Exception e) {
	    e.printStackTrace();
	    return false;
	}
    }

    /**
     * 移除N个值为value
     * @param key 键
     * @param count 移除多少个
     * @param value 值
     * @return 移除的个数
     */
    public long lrem(String key,long count,Object value) {
	try {
	    Long remove = redisTemplate.opsForList().remove(key, count, value);
	    return remove;
	} catch (Exception e) {
	    e.printStackTrace();
	    return 0;
	}
    }
}

``
5、application.yml (提供服务者方)
在这里插入图片描述

   redis:
    cluster:
      nodes:
	- 192.168.126.135:7001
	- 192.168.126.135:7002
	- 192.168.126.135:7003
	- 192.168.126.135:7004
	- 192.168.126.135:7005
	- 192.168.126.135:7006
    jedis:
      pool:
	max-active: 20 #连接池最大连接数
	max-idle: 10 #连接池中的最大空闲连接
	min-idle: 5 # 连接池中的最小空闲连接
#配置缓存首页商品分类的 key
   PROTAL_CATRESULT_KEY: PROTAL_CATRESULT_KEY
后端领域如何高效使用 Spring Data Redis 在当今的后端系统中,“快"是用户体验的生命线。想象一下,当你打开购物App查看商品详情时,如果页面加载需要3秒,你可能会直接关闭App——而这3秒中,有2.5秒可能都耗在数据库查询上。Redis 就像超市里的"快速取货区”,把常用商品(热点数据)放在最容易拿到的地方,让用户无需跑到仓库(数据库)就能快速获取。但 Redis 本身只是个"仓库",如何高效管理这个仓库?如何避免"拿错货"(数据不一致)、“货架坍塌”(缓存雪崩)、“仓库拥堵”(连接池耗尽)等问题? 阅读详情

相关推荐

Spring Data Redis序列化策略实战指南

在计算机科学中,序列化(Serialization)是将对象状态转换为可保存或传输的格式的过程。反序列化(Deserialization)是序列化的逆过程,即将这个格式再转换回原来可以识别的对象的过程。简单地说,序列化是把对象转化为字节流以便存储在文件中或通过网络传输到另一个计算机环境,反序列化则把字节流转回对象。序列化对于分布式系统而言,是至关重要的一个环节,它能够实现跨网络的数据传输和存储,也是实现远程服务调用、缓存、持久化等功能的基础。

weixin_35307279的博客 781

spring data系列之Spring data redis

Spring data redis简介: Redis是一个基于内存的数据结构存储系统,它可以用作数据库或者缓存。它支持多种类型的数据结构,这些数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和Zset(有序集合)。 SpringData Redis的作用是通过一段简单的配置即可访问redis服务,它的底层是对java提供的redis开发包(比如jedis等)进行了高度封装,主要提供了如下功能: 连接池自动管理,提供了...

zhangbingfa90的博客 2447

Docker “docker login“ 失败? 登录阿里云镜像仓库仓库 unauthorized: authentication required

文章目录听说你 login fail?来,让我们解决一下!登录,撒花 听说你 login fail? 美滋滋的在服务器上安装完成Docker应用,开始配置阿里云镜像加速?然后被阿里云官方文档蹂躏?别急别急,让我来拯救你。 我们先来看看 阿里云官方文档 Docker镜像基本操作: 好家伙,emmm… 上来直接就Login Succeeded,这不简直so easy?我们也来照着操作操作: docker@default-online:~$ docker login registry.cn-hangzhou.a

zhuzicc的博客 1万+

spring boot 集成redis版本说明

spring boot 集成redis版本说明 官网文档:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/ 当前版本是2.0.3(目前官网的当前版本也是2.0.3 {2018-06-25}) 1.5.X版本redis依赖如下: &lt;dependency&gt; &lt;gro...

tuonioooo 7204

XCP_Basic 移植步骤

XCP_Basic 移植步骤

ggzzc的博客 2316

halcon C++编程 第4讲 HObject/HImage Mat相互转换(tcy)

网上有很多相互转换程序,但并不知那个正确,本文对相互转换后的结果和原对象比较是否相同判断转换是否正确。经测试ok.本文包括转换代码及测试是否相同。 1.转换程序: /************************************ HObject转为Mat:time:2021/3/16 V1.0 *************************************/ cv::Mat HalconClass::HObjectToMat(const HalconCpp::HObject&..

tcy-阿春 4934

Spring Data Redis的基本使用和应用场景

前言 近来在项目中有用到Spring Data Redis,顺便研究了一下API,中间还是有些许坑的。由于前期有接触过Jedis和Reddison,所以对Redis的数据结构并不陌生,上手还是很快的。本文主要是记录了自己研究API的一些单元测试以及一些需要注意的点,对Redis数据结构不太清晰的小伙伴得先补充数据结构这块的知识点。下面我将分别对String、Hash、List、Set、ZSet这...

weixin_33729196的博客 235

在F1C100s上跑GBA游戏:手把手教你用Buildroot配置SDL和移植gpsp模拟器

本文详细介绍了在全志F1C100s开发板上配置Buildroot、移植SDL库和gpsp模拟器的完整流程,帮助开发者实现在ARM9平台上流畅运行GBA游戏。内容涵盖环境配置、交叉编译、常见问题解决及性能优化技巧,特别针对'段错误'和'无声音'等典型问题提供实用解决方案。

weixin_42566424的博客 398

Java中的JPabel画板类简介_spring data jpa的应用场景介绍(详细)

本篇文章给大家带来的内容是关于spring data jpa的应用场景介绍(详细) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。先说简单一下JPA概念:JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。影响:他的出现主要是为了简化现有的持久化开发工作和整合ORM...

weixin_29116603的博客 258

实战分享:如何用Jetson Nano+HM30图传搭建低空YOLOv5检测系统(附VNC避坑指南)

本文详细介绍了如何利用Jetson Nano和HM30图传搭建低空YOLOv5检测系统,重点解决了无人机应用中的硬件连接和VNC延迟优化问题。通过对比WiFi直连与图传方案的优劣,提供了网络配置、VNC优化及YOLOv5模型加速的实战技巧,帮助开发者实现高效稳定的低空目标检测系统。

weixin_29174385的博客 110

spdk + fio测试nvme 设备的性能

fio的测试对象可以是块设备、文件等,在spdk的使用过程中会unbind默认的nvme driver,所以在系统中是看不到nvme块设备的,在spdk中可以通过fio_plugin的方式,将spdk的用户态driver部分的io功能打包成一个ioengine提供给fio使用,可以综合spdk的高性能和fio提供的复杂场景。更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加。这个jobfile是spdk中提供的例子。领取,关注我持续更新哦!2.7 jobfile的例子。

lingshengxiyou的博客 1090

SpringData 作用简介

pring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库、Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持。 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。此外,它还支持基于关系型数据库的数据服务

奔跑在路上 4380

60、拓扑码:从理论到应用

本博客深入探讨了拓扑码的基本理论、构造方法及其在量子计算中的应用。重点介绍了颜色码的拓扑起源、编码量子比特的计算方法、弦算子的构造与性质、边界条件的影响、同调描述以及与统计模型相关的错误阈值分析。同时,还涵盖了拓扑码的历史发展、与其他拓扑码的关系、与凝聚态系统的联系,以及其在激发态和高维中的表现。博客展示了拓扑码在容错量子计算和未来量子信息领域的广阔前景。

o1p2q3r的博客 129

spring Data Redis 的概述及五大类型用法及应用场景

Spring Data Redis 是 Spring Data 系列技术中的一个重要分支。简单来说,它就像是一个专门用来和 Redis 数据库打交道的工具包,为开发者提供了便捷且高效的操作 Redis 的方式。在开发中,如果想使用 Redis 来存储、读取数据,借助 Spring Data Redis 就能以符合 Spring 开发习惯的方式来实现,比如通过它提供的各种模板类(像 RedisTemplate),可以很方便地执行 Redis 的各种命令,像设置键值对、获取值、操作列表、集合等数据结构。

qq_62374596的博客 972

VC中sqlite的使用

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring-data-redis介绍

spring data是用于简化数据库访问的开源框架,其主要目标是使得对数据的访问变得方便快捷,主要包括:jdbc、redis、jsp、elasticsearch只要是Java的开发,基本上都应用大型的开发环境(毕竟生态很成熟,别说所谓的其他语言好与坏),既然要开发啊Java项目,必然要有Spring开发框架,那么既然有了Spring开发框架,就需要"万物整合",自然也就包含了Redis的整合,

weixin_42486553的博客 1688

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【StringRedisTemplate】SpringBoot项目集成Redis

本文介绍了Spring Data Redis下的两种操作Redis的工具类,主要推荐StringRedisTemplate。还介绍了Redis在真实企业中的应用场景。

m0_75276797的博客 2359

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

使用spring-data-redis操作redis

http://docs.spring.io/spring-data/data-redis/docs/1.1.0.RELEASE/reference/html/ 一、maven org.springframework.data spring-data-redis 1.1.0.RELEASE

我爱逛菜园 2897

【Spring Boot】集成Redis超详细指南 Redis在Spring Boot中的应用场景

【Spring Boot】集成Redis超详细指南 Redis在Spring Boot中的应用场景。Redis作为高性能的内存数据库,在Spring Boot生态中有着广泛的应用场景。合理使用Redis可以显著提升系统性能,但同时也需要注意缓存一致性、雪崩、穿透等问题。希望本文能够帮助您在项目中更好地使用Redis

夜雨的博客 1661

redis、jedis、RedisTemplate、Spring-data-redis、spring-boot-starter-data-redis和redis desktop manager区别

redis、jedis、RedisTemplate、Spring-data-redis、spring-boot-starter-data-redis和redis desktop manager区别

GarfieldGosling的博客 2315

Spring Data Redis本质

今天花半小时补一篇技术文章纯纯是因为早上发的那篇感悟随记很多人可能会认为不是技术文章。而一般这种文章的阅读量会远高于技术文章。为了不破坏公众号的基调,今天写篇技术文章明天一早发出去。大家上班路上看到的是:这还是一个技术公众号。但是我想说的是上篇文章我是在讲技术,如果对技术的理解过于狭隘,那在工作中会很容易进入瓶颈期。咱们宏观到微观来审视一下:业务的服务在技术上需要解决4个问题:分布式、通信、存储和服务治理。在存储方面,spring家族在使用时做了封装就是spring data。

m0_46995061的博客 858

SpringBoot整合Spring-data-redis实现集中式缓存

Spring Data redis的几种序列化 从框架的角度来看,存储在Redis中的数据只是字节。虽然说Redis支持多种数据类型,但是那只是意味着存储数据的方式,而不是它所代表的内容。由我们将这些数据转化成字符串或者是其他对象。我们通过org.springframework.data.redis.serializer. RedisSerializer将自定义的对象数据和存储在Redis上

Stduent_的专栏 2567

Spring-Data-Redis使用总结

Redis Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件. 它支持多种类型的数据结构。 Redis3.0+ 版本开始支持集群 Redis支持的数据类型 字符串(strings) 散列(hashes) 列表(lists) ...

chuizheng9029的博客 185

Spring Redis Data的基本使用 入门必备!!

一、Redis简介 redis 是一款开源的 Key-Value 数据库,运行在内存中,由 ANSI C 编写。企业开发通常采用 Redis 来实现缓存。同类的产品还有 memcache 、memcached 、MongoDB 等 1.Redis数据结构 字符串类型 string 散列类型 hash 列表类型 list 有序可重复 集合类型 set 无序不可重复 有序集合类型 sortedset...

wl921的博客 283

Redis深入研究

这是前言阿里云Redis开发规范书籍:Redis开发与运维(付磊)公众号:Redis开发运维实战资源汇总阿里云Redis开发规范。

qq_40662424的博客 1291

关于redis,jedis,Spring-data-redis,这一篇文章就完了

NOSQL 什么是NOSQLNOSQL NoSQL(NoSQL=Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。 解决什么问题 web程序不再仅仅专注在功能上,同时也在追求性能; 对数据库高并发读写的需求(High performance),现在数据库并发负载非常高,往往要达到每秒上万次读写请求,关系数据库应付上万次SQL查询还勉强顶...

qq_43060870的博客 743
上一篇: springMVC的理解以及执行流程
下一篇: redis安装和启动
Tim_0508
博客等级 码龄5年 3粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值