Redis使用String类型中遇到的问题

Redis的string类型使用 以若依岗位代码为例一:首先从redis中查询岗位信息,如果查询到了则直接返回。二:如果redis中没有数据,则直接从数据库中查询。查询后放到redis并返回这是一个简单的添加缓存功能。 阅读详情

redis在springboot项目整合中用到的依赖配置,这个大家都知道。

	 <!-- redis-->
	 <dependency>
	     <groupId>org.springframework.boot</groupId>
	     <artifactId>spring-boot-starter-data-redis</artifactId>
	 </dependency>

配置了RedisConfig,这一点大家也都清楚,网上有很多版本,各有不同吧。

package com.zcf.common.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.EnableCaching;
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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @Description Redis基础配置
 * @Author zcf
 * @Date 2020/9/27
 **/
@Configuration
@EnableCaching
public class RedisConfig {
    private static final Logger LOG = LoggerFactory.getLogger(RedisConfig.class);

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory) {
        LOG.info("加载了!!!!!!redisTemplate");
        RedisTemplate<String,Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        // JSON序列化配置
        Jackson2JsonRedisSerializer jsonRedisSerializer= new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jsonRedisSerializer.setObjectMapper(objectMapper);

        // String的序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        // key采用String序列化方式
        template.setKeySerializer(stringRedisSerializer);
        // value采用String序列化方式
        template.setValueSerializer(stringRedisSerializer);

        // hash的key采用String序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        // hash的value采用jackson序列化方式
        template.setHashValueSerializer(jsonRedisSerializer);

        template.afterPropertiesSet();
        return template;
    }

}

这里我目前只是测试了redis的string类型,其他类型的等我遇到了在记录,整理了一个redis的工具类

package com.zcf.utils;

import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.concurrent.TimeUnit;

/**
 * @Description redis的工具类
 * @Author zcf
 * @Date 2022/9/27
 **/
@Component
public class RedisUtil {
    private static final Logger LOG = LoggerFactory.getLogger(RedisUtil.class);

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 缓存基本的对象,Integer、String、实体类等
     * @param key
     * @param value
     */
    public void set(String key, Object value) {
        String jsonValue = JSON.toJSONString(value);
//        LOG.info("缓存数据:{}",jsonValue);
        redisTemplate.opsForValue().set(key, jsonValue);
    }

    /**
     * 缓存基本的对象,Integer、String、实体类等,有过期时间
     * @param key
     * @param value
     * @param time
     */
    public void set(String key, Object value, long time) {
        String jsonValue = JSON.toJSONString(value);
//        LOG.info("缓存数据:{}",jsonValue);
        redisTemplate.opsForValue().set(key, jsonValue, time, TimeUnit.SECONDS);  //TimeUnit.SECONDS指定类型为秒
    }

    /**
     * 设置有效时间
     * @param key Redis键
     * @param timeout 超时时间
     * @return true=设置成功;false=设置失败
     */
    public boolean expire(String key, long timeout){
        return expire(key, timeout, TimeUnit.SECONDS);
    }

    /**
     * 设置有效时间
     * @param key
     * @param timeout
     * @param unit
     * @return
     */
    public boolean expire(String key, long timeout, TimeUnit unit){
        return redisTemplate.expire(key, timeout, unit);
    }

    /**
     * 获取数据
     * @param key
     * @return
     */
    public String get(String key) {
        Object object = redisTemplate.opsForValue().get(key);
//        LOG.info("获取数据:{}",object);
        return (String)object;
    }

    /**
     * 删除数据
     * @param key
     * @return
     */
    public Boolean del(String key) {
        return redisTemplate.delete(key);
    }

    /**
     * 判断key是否存在
     * @param key
     * @return
     */
    public boolean hasKey(String key){
        return redisTemplate.hasKey(key);
    }
    
}

string是redis最基本的类型,一个key对应一个value。在序列化的时候,遇到过各种问题,我对set和get时的value做了调整。当然,网上也有其他的方法。我只是说明一下自己的解决办法。存对象时,在存之前用JSON转化了一下,取数据时,在通过JSON转换一下。

  • 存数据

在这里插入图片描述
在这里插入图片描述

  • 取数据

在这里插入图片描述
在这里插入图片描述
后期,我对其他类型在实际过程中遇到的问题在做记录吧。

【Redis缓存数据库】Redis使用String类型及BitMap类型的操作 通过上篇文章,已经在VMWare的虚拟机上的CentOS环境下,安装了Redis,接下来就是实际应用Redis的场景,这里当前主要以String类型、BitMap类型的相关操作进行实践。 阅读详情

相关推荐

【redis】Redis中一个String类型引发的惨案

我们在Redis存储结构里介绍过Redis的Hash类型的两种底层实现结构,分别是压缩列表和哈希表。Hash 类型设置了用压缩列表保存数据时的两个阈值,一旦超过了阈值,Hash 类型就会用哈希表来保存数据了。

九师兄 384

漫话Redis源码之一百一十六

static int b_unpack (lua_State *L) { Header h; const char *fmt = luaL_checkstring(L, 1); size_t ld; const char *data = luaL_checklstring(L, 2, &ld); size_t pos = luaL_optinteger(L, 3, 1); luaL_argcheck(L, pos > 0, 3, "offset must be...

认知 行动 坚持 1911

Immich vs Nextcloud照片管理实测:自建私有云相册到底选哪个?

本文深度评测了Immich与Nextcloud在私有云相册管理中的表现,涵盖核心功能、性能基准、本土化实践及进阶功能。Immich凭借微服务架构和AI优化在照片管理、移动端体验上表现优异,而Nextcloud则强在生态整合。文章还提供了Docker部署优化和国内网络适配方案,帮助用户根据需求选择最佳方案。

seed的博客 331

导包错误,提示with root cause

Stacktrace:] with root cause java.lang.NoClassDefFoundError: com/google/common/collect/Multiset$Entry jsp编辑过程中,给map 的entry导入了错误的包,提示com/google/common/collect/Multiset$Entry, 修改代码后,发现为导包错误。。

u010006687的博客 1万+

【CUT&TAG分析-加了spike in的样品】

使用 Bowtie2 或 Subread (subjunc) 来构建大肠杆菌的索引。bowtie2比对时设置参数–local, 局部比对。

weixin_57975238的博客 1400

Windows应急响应实战:灰鸽子木马检测与清除全流程解析

远程控制木马(RAT)是一种基于客户端/服务器(C/S)架构的恶意软件,攻击者通过它能够远程操控受害主机,实现屏幕监控、文件窃取、键盘记录等操作,对个人隐私与企业数据安全构成严重威胁。其技术原理通常涉及进程注入、网络通信、持久化机制等核心环节,在应急响应中具有极高的分析价值。掌握此类木马的检测与清除方法,是Windows系统安全防护与事件处置的基本功。本文以经典的灰鸽子木马为例,结合进程分析、网络排查、注册表检查等实战技术,系统讲解从行为识别、痕迹取证到彻底清除的完整操作流程,并涵盖Rootkit对抗、无文

weixin_30521161的博客 415

redis的String类型,对象存取问题

问题描述:我们在做一个电商相关项目时,把每个商品的相关数据做到了缓存(redis),然后每次去取商品信息时,先判断缓存中是否有该数据,如果有,就取该缓存数据。 存入:使用String类型,把整个键值存入key中,value值为该对象 取:get该键值,得到的对象,进行序列化。 问题所在:在get时,报错, runtime异常:Unexpected exception while proce...

Liuyooer的博客 4327

【电路设计】带阻滤波器实战:从理论到Twin-T陷波电路实现

本文详细介绍了带阻滤波器的原理与Twin-T陷波电路的实战应用,从基础概念到工程实现全面解析。通过具体案例展示如何设计高Q值滤波器,解决电源噪声等实际问题,并分享PCB布局和元件选型的实用技巧,助力工程师提升电路设计能力。

gg901的博客 1022

redis取string类型值问题

取数据类型为string的redis值 得使用getObject, getString类型会在值中带有 "" 导致判断时会有问题

qq_31459039的博客 1962

STM32F407编译下载全流程:从CubeMX到HEX烧录

嵌入式固件开发中,编译与下载是连接代码与硬件的关键闭环。其本质是将高级语言描述的逻辑,经交叉编译(ARM GCC)、链接(ELF生成)、格式转换(HEX/BIN)后,通过调试接口(SWD/UART)写入MCU Flash存储器的过程。该流程涉及工具链协同、二进制格式特性(如Intel HEX的地址映射与无元数据设计)、启动模式(System Memory Bootloader)、Flash选项字节(RDP/WRP)等底层机制,直接决定固件可运行性与安全性。典型应用场景包括STM32F407开发板调试、量产固

weixin_28840811的博客 260

机器视觉最全面试题总结

空洞卷积(Atrous Convolution)也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样a. 是普通的卷积过程(dilation rate = 1),卷积后的感受野为3b. 是dilation rate = 2的空洞卷积,卷积后的感受野为5。

@bangbang的博客 9212

redis命令之string类型get命令用法详情

Stirng字符串 GET命令 命令:get key 获取和该key相关联的value 返回情况说明: 1.若不存在该key,返回nil 2.若存在,此时又包括了两种情况: a.该key对应的value值为String类型,则返回对应的value b.该key对应的value值不是String类型,则返回报错信息: (error) ERR Operation against a key holding the wrong kind of value 127.0.0.1:6379>

张步云的专栏 1589

工商银行软件开发中心数据安全监测溯源防护体系建设成果及展望

结合业界先进溯源理念和我行管理要求,依托大数据、分布式搜索分析引擎等技术,构建PB级海量数据加工分析和小时级快速核验、检索、溯源手段(如图6所示),支撑6种客户敏感信息关键要素的单一或组合溯源,形成行之有效的数据安全溯源流程,配套落地自动化快速泄露样本真实性核验和灵活高效的溯源能力,通过数据相关属性的自动化分析,实现追踪泄露源头、明确泄露路径的目标,为有效应对数据安全事件,降低和消除风险与不良影响,开展事后追责处置工作提供体系化解决方案。提高数据排查的自动化程度和排查效率,降低人工成本。

银行信息系统应用架构详解 226

Redis - String内存开销问题以及基本/扩展数据类型的使用

中类型保存值的时候,有两个选择:可见,它本身并不傻,如果在类型中,存储的值是一个整数,它会自动进行编码。而保存的数据中若包含了字符,即采用简单动态字符串结构体来保存。,即。低版本的结构如图(版本以下): 总共有三个部分:对于的类型而言,还涉及到结构。该结构体主要用于记录一些元数据记录(最后一次的访问时间,被引用的次数等等)包含了8个字节大小的元数据和8个字节大小的指针,共16字节。同时该结构体还指向实际的数据。如图: 意思就是,每当往中插入一个类型的键值对后,就会构建出对于的结构(若是字符类型),以及一

Zong_0915的博客 1476

[PCIE5.0] 4.2.3.2 Encoding of Presets

• 发射器预设:发射器预设值用4位二进制编码,表示不同的预设设置(P0 到 P10),这些设置定义了信号的传输特性。• 接收器预设提示:接收器预设提示是通过3位二进制编码告诉接收器建议的增益值,用于调整接收器的灵敏度(适用于8.0 GT/s数据速率)。

系统固件工程师 575

android 蓝牙通讯demo

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

Redis支持数据类型详解

Redis支持多种数据类型:**string(字符串),hash(哈希),list(列表),set(集合)、zset(sorted set 有序集合)**、HyperLogLog (基数统计)、streams(流)、geospatial(地理空间)、bitmaps(位图)。 这里我们只列举了五大常用数据类型。

qq_63068858的博客 1507

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

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

Redis 数据结构 - Redis 的数据存储及 String 类型的实现

redis 作为 k-v 数据存储,因查找和操作的时间复杂度都是 O (1) 和丰富的数据类型及数据结构的优化,了解了这些数据类型和结构更有利于我们平时对于 redis 的使用。下一期将对其它常用数据类型 List、Hash、Set、Sorted Set 所使用的 ZipList、QuickList、SkipList 做进一步介绍,对于文章中不清晰不准确的地方欢迎大家一起讨论交流。

Candyz7的博客 713

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

关于Redis-存Long取Integer类型转换错误的问题;String对象被转义的问题

背景 最近遇到了两个Redis相关的问题,趁着清明假期,梳理整理。 1.存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误。 2.String对象的反序列化问题,直接在Redis服务器上新增一个key-value,而后在代码中get(key)时,报反序列化失败。 关于Long类型转换错误 Redis的配置如下 Redis中序列化相关的配置,我这里采用的是G...

anhe1364的博客 2807

Redis Redis的数据结构 - 通用命令 - String类型命令 - Hash类型命令

我们能通过官方网站提供的文档来了解我们需要使用的redis数据类型。当我们使用TTL查看到剩余时间为-1的时候,他表示的就是永久有效。我们可以通过拼接key的结构实现多层级结构。使用KEYS命令查看所有的key。因此,我们需要使用到Hash类型。

lpfstudy的博客 1255

Redis中一个String类型引发的惨案

Redis中一个String类型引发的惨案 曾经看到这么一个案例,有一个团队需要开发一个图片存储系统,要求这个系统能快速记录图片ID和图片存储对象ID,同时还需要能够根据图片的ID快速找到图片存储对象ID。我们假设用10位数来表示图片ID和图片存储对象ID,例如图片的ID为1101021043,它所对应的图片存储对象的ID为2301010051,可以看到图片ID和图片存储ID正好是一一对应的,是典型的key-value形式,所以首先会想到直接使用String类型来保存数据。把图片ID和图片存储ID分别作为.

老男孩的架构路 156

Redis数据类型之String

一String类型 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型。 存储数据的格式:一个存储空间保存一个数据。 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用(但是仍是字符串)。 二 指令 --添加单个字符串-- set key v1 get key del key --多值操作-- mset k1 v1 k2 v2 mget k1 v1 --数值操作-- strlen k1 返回k1长度 append key value 追加信息到原始信.

qq_30003943的博客 225

Redis:string类型带来的空间消耗过大的问题

案例:使用Redis的string类型保存图像ID和图片存储对象 ID,图像ID为Key、图片存储对象ID为Value。两者均为10位纯数字。保存1亿对键值消耗空间6.4GB,平均1个键值对消耗64字节。 问题:按理来说8个字节可以表示2的64次方-1,超过了10位数字,案例中键值对加起来消耗16字节也就罢了,为什么消耗了64字节? 回答:除了记录实际数据,String 类型还需要额外的内存空间记录数据长度、空间使用等信息,这些信息也叫作元数据。当实际保存的数据较小时,元数据的空间开销就显得比较大了。 .

tdt008的博客 1085

Redis之String数据结构底层原理

1:不同类型的存储 对于不同的对象,Redis会使用不同的类型来存储。对于同一种类型type会有不同的存储形式encoding。 对于string类型的字符串,其底层编码方式共有三种,分别为int、embstr和raw。 int:当存储的字符串全是数字时,此时使用int方式来存储; embstr:当存储的字符串长度小于44个字符时,此时使用embstr方式来存储; raw:当存储的字符串长度大于44个字符时,此时使用raw方式来存储; 使用object encoding key可以查看key对应

chongfa2008的博客 2609

Redis redis五种数据类型和使用场景

一、redis基本基本介绍 1、 redis解决分布式环境下缓存不同步 让缓存集中处理(大家使用同一个缓存服务),我们需要一个类似于MYSQL这样可以通过服务来提供第三方的缓存工具(缓存服务器);流行的第三方缓存服务器:memcache/redis 2、REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统(...

m0_38068812的博客 8745

redis中数据类型的使用,并发问题,list重复插入问题,redis使用实例-简单消息队列和排名统计

redis 5种数据类型的正确使用 redis支持5中数据类型,即string,list,hash,set,sortedset。但是什么时候应该用哪种数据类型呢?以string和list的为例来说明 其实并不是简单的java中的list对应redis中的list,java中的string对应redis的string list可以存到string中,取出来后可以强转为list redis中lis...

进化的深山猿 1万+

【面试场景题-Redis中String类型和map类型的区别】

今天在面试中碰到一个场景题:在 Redis 中存储 100 万用户数据时,使用和的主要区别是什么?

F_windy的博客 1157
上一篇: Spring Boot 学习记录笔记【 五 】之前端Vue
下一篇: Vue3的权限控制
perfei焓
博客等级 码龄8年 32粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值