Redis 笔记
Redis 简介redis是以key-value形式存储和传统的关系型数据库不一样不一定遵循传统数据库的一些基本要求。redis是非关系型的分布式的开源的水平可拓展的优点:对数据高并发读写(直接是内存中进行读写的)对海量数据的高效率存储和访问对数据的可拓展性和高可用性单线程操作,每个操作都是原子操作,没有并发相关问题缺点:无法做太复杂的关系数据库模型关系型数据库和非关系型数据库的区别比较项关系型数据库非关系型数据库数据模型表格结构多个表之间有关联灵活模型文档、键值、图等查询能力SQL标准强一致性多样化查询语法事务支持强事务弱事务或有限支持适用场景数据结构稳定高扩展需求、灵活模式或特殊数据结构数据类型及常用命令String 字符串命令说明setkey value存入或修改键值对getkey根据键取出值incrkey自增decrkey自减delkey根据键删除值setexkey timeout value存入或修改键值对并设置过期时间ttlkey查询 key 的过期时间-1为无过期时间-2为已失效setnxkey value存入键值对如果已存在则不做操作incrbykey num将当前的值增加 numdecrbykey num将当前的值减少 nummsetk1 v1 k2 v2 …批量存入或修改键值对mgetk1 k2 …批量获取键值对appendkey value尾部追加值setrangekey index value在当前字符串的指定位置增加Hash 表命令说明hsetkey hashkey hashvalue设置一个 hash 对象的键值对hgetkey hashkey根据 hash 对象的键获取值hexistskey hashkey判断这个 hash 对象是否有这个键hdelkey hashkey根据 hashkey 删除某个 hash 键值对hincrbykey hashkey递增 hash 的值hlenkey获取 hash 对象 key 的数量hkeyskey获取 hash 对象的所有的键hvalskey获取 hash 对象的所有的值hgetallkey获取 hash 对象的所有数据hsetnxkey hashkey hashvalue存入一个 hash 对象的键值对如果有则不做操作List 列表命令用法rpush/lpushkey value往列表右/左边添加数据lrangekey start end范围显示列表数据,全显示则设置0 -1lpop/rpopkey弹出列表最左/右边的数据llenkey获取列表长度linsertkey before/after refVal value参考值之前/后插入数据lsetkey index value根据索引修改数据lremkey count value在列表中按照个数删除数据ltrimkey start end范围截取列表lindexkey index根据索引获取列表数据Set 无序集合命令用法saddkey value往 set 集合中添加元素smemberskey列出 set 集合中的元素sremkey value删除 set 集合中的元素spopkey count随机弹出集合中的元素sdiffkey1 key2返回 key1 中特有元素(差集)sinterkey1 key2返回两个 set 集合的交集sunionkey1 key2返回两个 set 集合的并集sdiffstore/sinterstore/sunionstorevar k1 k2取交集/并集/差集后将返回值放到另一个 set 里smovekey1 key2 value把 key1 中的某元素移入 key2 中scardkey返回set集合中元素个数sismemberkey value判断集合是否包含某个值srandmemberkey count随机获取 set 集合中元素zSet 集合命令用法zaddkey score value存入分数和名称zincrbykey score column偏移名称对应的分数zrangekey start end按照分数升序输出名称zrevrangekey start end按照分数降序输出名称zrankkey name升序返回排名zrevrankkey name降序返回排名zcardkey返回元素个数zrangebyscorekey min max [withscores]按照分数范围升序输出名称zrevrangebyscorekey max min [withscores]按照分数范围降序输出名称zremkey name删除名称和分数zremrangebyscorekey min max [withscores]根据分数范围删除元素zremrangebyrankkey start end根据排名删除元素zcountkey min max按照分数范围统计个数事务命令用法multi开启事务exec提交事务discard取消事物其他高级命令命令用法keysname查询所有的 key 名可以用 * 模糊查询existskey查询是否存在 keyexpirekey设置某个 key 的过期时间persistkey取消 key 的过期时间flushdb/flushall清空当前库/清空所有库selectnumber选择库0~15movekey index将 key 移动到第 index 个数据库randomkey随机返回数据库中的keyrenamekey newkey重命名dbsize查看数据库的key数量**info **获取数据库信息**config get **实时传储收到的请求(返回相关的配置信息)**config get * **返回所有配置理论部分选择数据类型的原则如果确定使用redis, 此时需要考虑使用哪个数据类型如果要排序选用zset如果数据是多个且允许重复选用list如果数据是多个且不允许重复选用set剩下的使用string如果是对象类型也可使用hash有些公司约定: 所有的redis的key跟value都使用字符串如果使用排序就用zset因为这样可以避免泛型的使用方便转换字符串Key 的设计key的设计唯一性可读性灵活性时效性持久化机制RDB默认方式。将内存中以快照的方式写入到二进制文件中.默认为dump.rdb。可以配置设置自动做快照持久化方式。我们可以配置 redis 在 n 秒内如果超过 m 个 key 就修改自动做快照。执行 save 命令或 flushdb/flushalll 命令时会直接触发 RDBsave 900 1 #900秒内如果超过1个Key被修改则发起快照保存 save 300 10 save 60 10000AOFaof比快照方式有更好的持久化性是由于在使用aof时redis会将每一个收到的写命令都通过write函数追加到命令中当redis重新启动时会重新执行文件中保存的写命令来在内存中重建这个数据库的内容.这个文件在bin目录下appendonly.aofappendonly yes //启动aof持久化方式有三种修改方式 #appendfsync always//收到命令就立即写到磁盘,效率最慢.但是能保证完全的持久化 #appendfsync everysec//每秒写入磁盘一次,在性能和持久化方面做了很好的折中 #appendfsync no //完全以依赖os 性能最好,持久化没保证总结RDB 性能好但是易丢失数据AOF 性能差但是不易丢失数据内存淘汰机制常见的内存淘汰机制分为四大类1. LRULRU是Least recently used最近最少使用的意思简单的理解就是从数据库中删除最近最少访问的数据该算法认为你长期不用的数据那么被再次访问的概率也就很小了淘汰的数据为最长时间没有被使用仅与时间相关。2. LFULFU是Least Frequently Used最不经常使用的意思简单的理解就是淘汰一段时间内使用次数最少的数据这个与频次和时间相关。3. TTLRedis中有的数据是设置了过期时间的而设置了过期时间的这部分数据就是该算法要解决的对象。如果你快过期了不好意思我内存现在不够了反正你也要退休了提前送你一程把你干掉吧。4. 随机淘汰生死有命富贵在天是否被干掉全凭天意了。Key 删除策略Redis中大家会对存入的数据设置过期时间那么这些数据如果过期了Redis是怎么样把他们消灭掉的呢我们一起来探讨一下。下面介绍三种清除策略惰性删除当访问Key时才去判断它是否过期如果过期直接干掉。这种方式对CPU很友好但是一个key如果长期不用一直存在内存里会造成内存浪费。定时删除设置键的过期时间的同时创建一个定时器当到达过期时间点立即执行对Key的删除操作这种方式最不友好。定期删除隔一段时间对数据进行一次检查删除里面的过期Key至于要删除多少过期Key检查多少数据则由算法决定。举个例子方便大家理解Redis每秒随机取100个数据进行过期检查删除检查数据中所有已经过期的Key如果过期的Key占比大于总数的25%也就是超过25个再重复上述检查操作。集成 Java 应用Jedis导入依赖dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactId/dependency基本操作// 创建Jedis连接池JedisPoolpoolnewJedisPool(localhost,6379);// 从连接池中获取Jedis对象Jedisjedispool.getResource();jedis.auth(123456);// 密码// TODO: 执行逻辑System.out.println(jedis);// 关闭资源销毁连接池jedis.close();pool.destroy();细节配置GenericObjectPoolConfigconfignewGenericObjectPoolConfig();//最大连接数, 默认8个config.setMaxTotal(100);//最大空闲连接数, 默认8个config.setMaxIdle(20);//获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1config.setMaxWaitMillis(-1);//在获取连接的时候检查有效性, 默认falseconfig.setTestOnBorrow(true);JedisPoolpoolnewJedisPool(config,192.168.122.128,6379,5000,wolfcode);Jedisjpool.getResource();Stringnamej.get(name);System.out.println(name);j.close();pool.close();pool.destroy();之后调用的方法名同以上命令名集成 SpringBoot导入依赖!-- SpringBoot 父类 --parentartifactIdspring-boot-starter-parent/artifactIdgroupIdorg.springframework.boot/groupIdversion2.3.3.RELEASE/version/parent!-- SpringBoot 集成 redis --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!-- SpringBoot 测试 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependencyapplication.ymlspring:redis:host:127.0.0.1port:6379password:基本操作AutowiredprivateStringRedisTemplateredisTemplate;TestpublicvoidtestRedisTemplate(){// 操作stringredisTemplate.opsForValue().set(name,LTT);// 操作hashredisTemplate.opsForHash().put(user,name,LTT);// 操作listredisTemplate.opsForList().leftPush(hobby,唱);// 操作setredisTemplate.opsForSet().add(颜色,红,黄,蓝);// 操作zsetredisTemplate.opsForZSet().add(名单,小明,100);}

相关新闻

EverythingToolbar终极指南:Windows任务栏文件搜索神器快速上手教程

EverythingToolbar终极指南:Windows任务栏文件搜索神器快速上手教程

EverythingToolbar终极指南:Windows任务栏文件搜索神器快速上手教程 【免费下载链接】EverythingToolbar Everything integration for the Windows taskbar. 项目地址: https://gitcode.com/gh_mirrors/eve/EverythingToolbar EverythingToolbar是一款革命性…

2026/10/11 5:21:25 阅读更多 →
告别重复劳动:5步掌握Pulover‘s Macro Creator自动化工具

告别重复劳动:5步掌握Pulover‘s Macro Creator自动化工具

告别重复劳动:5步掌握Pulovers Macro Creator自动化工具 【免费下载链接】PuloversMacroCreator Automation Utility - Recorder & Script Generator 项目地址: https://gitcode.com/gh_mirrors/pu/PuloversMacroCreator 每天在Windows电脑前重复点击、输…

2026/10/10 21:25:55 阅读更多 →
SpringBoot构建汽车电商平台的技术实践

SpringBoot构建汽车电商平台的技术实践

1. 项目概述:汽车电商平台的SpringBoot实现方案去年帮朋友公司重构汽车销售系统时,我选择了SpringBootMyBatis技术栈。这个基于JavaWeb的汽车商城管理系统,本质上是一个集车辆展示、在线交易、订单管理于一体的垂直领域电商平台。相比通用电商…

2026/10/11 19:41:24 阅读更多 →

最新新闻

Kotlin继承与接口代理:by关键字及super冲突解决实战

Kotlin继承与接口代理:by关键字及super冲突解决实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:27:35 阅读更多 →
嵌入式老兵转机器人:简历为何总被刷?

嵌入式老兵转机器人:简历为何总被刷?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:27:35 阅读更多 →
纯CSS图片手风琴效果:零JS高性能悬停交互方案

纯CSS图片手风琴效果:零JS高性能悬停交互方案

1. 项目概述:这不是炫技,是解决真实交互痛点的轻量方案“CSS图片手风琴效果(鼠标悬停)”——这八个字背后,藏着前端日常中一个高频却常被低估的需求:如何在不加载额外JS库、不触发页面重排、不牺牲首屏性能…

2026/10/14 3:27:35 阅读更多 →
打卡信奥刷题(3626)用C++实现信奥题 P11849 [TOIP 2023] 裁员风暴

打卡信奥刷题(3626)用C++实现信奥题 P11849 [TOIP 2023] 裁员风暴

P11849 [TOIP 2023] 裁员风暴 题目描述 孙执行官任职于美味蛋糕股份有限公司,由于今年财报未达预期,股东寄了公开信呼吁公司削减成本,孙执行官决定让公司部分伙伴"走自己的路"。 孙执行官列出 nnn 个公司目标,并请员工们…

2026/10/14 3:27:35 阅读更多 →
DeepSeek    LeetCode 319. 灯泡开关 Java实现

DeepSeek LeetCode 319. 灯泡开关 Java实现

思路: 第 i 个灯泡最终是否亮,取决于它被切换了多少次。 第 i 个灯泡会在它的每个约数轮次被切换,所以切换次数等于 i 的约数个数。 只有完全平方数的约数个数是奇数,因此最终亮着的灯泡编号都是完全平方数。 所以答案就是 1 ~ n …

2026/10/14 3:27:35 阅读更多 →
Burp suite learning

Burp suite learning

今天学习怎样使用burp suite 进行抓包操作。这是简易的流程:当你安装了burp suite 并且完成了JAVA环境搭建和证书的申请后,启动burp,并且将浏览器的代理调成burp,开启拦截。这样一来,浏览器所运行的包都会被你拦截。这引发出两个问…

2026/10/14 3:26:35 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →