news 2026/4/24 11:30:56

【Redis-day01】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Redis-day01】

《Redis-day01》

0. 今日总结

  1. 了解了NoSQL以及Redis的优势
  2. 复习了Redis的基础命令
  3. 了解了SpringDataRedis的配置和使用
  4. 分别实现了自动和手动序列化及反序列化

1. 初识Redis

1.1 认识NoSQL

1.2 认识Redis

Redis诞生于2009年全称是Remote Dictionaryserver,远程词典服务器,是一个基于内存的键值型NoSQL数据库。

  • 特征
    1. 键值(key-value)型,value支持多种不同数据结构,功能丰富
    2. 单线程,每个命令具备原子性
    3. 低延迟,速度快(基于内存、10多路复用、良好的编码)
    4. 支持数据持久化
    5. 支持主从集群、分片集群
    6. 支持多语言客户端

1.3 安装Redis

在苍穹外卖已经安装过

2. Redis数据类型

2.1 五种常用数据类型

Redis是key-value结构的数据

  • key的数据类型
    1. 字符串String
  • value的数据类
    1. 字符串String
    2. 哈希hash
    3. 列表list
    4. 集合set
    5. 有序集合 sorted set / zset

2.2 各种数据类型特点

  1. 字符串String:普通字符串
  2. 哈希hash:散列,类似于java中的HashMap结构
  3. 列表list:按照插入顺序排序,可以用重复元素,类似于Java中的LinkedList
  4. 集合set:无须集合,没有重复元素,类似于Java中的HashSet
  5. 有序集合 sorted set / zset:集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

3. Redis常用命令

3.1 字符串操作命令

  1. SET key value:设置指定key的值
  2. GET key:获取指定key 的值
  3. SETEX key seconds value:设置指定key的值,并将key的过期时间设为seconds秒
  4. SETNX key value:只有在key不存在时设置key的值

3.2 哈希操作命令

  1. HSET key field value:将哈希表key中的字段field的值设为value
  2. HGET key field:获取存储在哈希表中指定字段的值
  3. HDEL key field:删除存储在哈希表中的指定字段
  4. HKEYS key:获取哈希表中的所有字段
  5. HVALS key:获取哈希表中的所有值

3.3 列表操作命令

  1. LPUSH key value1 [value2]:将一个或多个值插入到列表头部,类似于队列

    类似于栈

  2. LRANGE key start stop:获取列表指定范围内的元素

  3. RPOP key:一处并获取列表最后一个元素

    Pop最先插入的元素

  4. LLEN key:获取列表长度

3.4 集合操作命令

  1. SADD key member1 [member2]:向集合添加一个或多个成员
  2. SMEMBERS key:返回集合中的所有成员
  3. SCARD key:获取集合的成员数
  4. SINTER key1 [key2]:返回给定所有集合的交集
  5. SUNION key1 [key2]:返回所有给定集合的并集
  6. SREM key member1 [member2]:删除集合中一个或多个成员

3.5 有序集合操作命令

  1. ZADD key score1 member1 [score2 member2]:向有序集合添加一个或多个成员
  2. ZRANGE key start stop [WITHSCORES]:通过索引区间返回有序集合中指定区间内的成员
  3. ZINCRBY key increment member:有序集合中对指定成员的分数加上增量 increment
  4. ZREM key member [member ...]:移除有序集合中的一个或多个成员

3.6 通用命令

通用命令是指部分数据类型,都可以使用的命令

  1. KEYS pattern:查找所有符合给定模式(pattern)的key
  2. EXISTS key:检查给定 key 是否存在
  3. TYPE key:返回 key 所储存的值的类型
  4. DEL key:该命令用于在 key 存在时删除 key

4. 在Java中操作Redis

4.1 Redis的Java客户端

  1. Jedis

  2. Lettuce

  3. Spring Data Redis

    Spring Data Redis是Spring的一部分,对Redis底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。

4.2 Spring Data Redis使用方式

4.2.1 基本方法

4.2.2 操作步骤

  1. 导入Spring Data Redis的 mavan坐标

    在sky-server的pom.xml文件中导入mavan坐标

  2. 配置Redis数据源

    在.yml中配置host port等数据,实际数据存放在dev.yml文件中

  3. 编写配置类,创建RedisTemplate对象

  4. 通过RedisTemplate对象操作Redis

    @TestpublicvoidtestRedisTemplate(){System.out.println(redisTemplate);//通过opsForXXX方法获得五种操作对象ValueOperationsvalueOperations=redisTemplate.opsForValue();HashOperationshashOperations=redisTemplate.opsForHash();SetOperationssetOperations=redisTemplate.opsForSet();ListOperationslistOperations=redisTemplate.opsForList();ZSetOperationszSetOperations=redisTemplate.opsForZSet();}/** * 操作字符串类型的数据 */@TestpublicvoidtestString(){//set get setex setnxredisTemplate.opsForValue().set("city","北京");Stringcity=(String)redisTemplate.opsForValue().get("city");System.out.println(city);redisTemplate.opsForValue().set("code","1234",3,TimeUnit.MINUTES);redisTemplate.opsForValue().setIfAbsent("lock","1");redisTemplate.opsForValue().setIfAbsent("lock","2");}/** * 操作哈希类型的数据 */@TestpublicvoidtestHash(){//hset hget hdel hkeys hvalsHashOperationshashOperations=redisTemplate.opsForHash();//给key = 100的hash插入两个值hashOperations.put("100","name","tom");hashOperations.put("100","age","20");//获得key=100的hash的name字段的值Stringname=(String)hashOperations.get("100","name");System.out.println(name);Setkeys=hashOperations.keys("100");System.out.println(keys);Listvalues=hashOperations.values("100");System.out.println(values);hashOperations.delete("100","age");}/** * 操作列表类型的数据 */@TestpublicvoidtestList(){//lpush lrange rpop llenListOperationslistOperations=redisTemplate.opsForList();listOperations.leftPushAll("mylist","a","b","c");listOperations.leftPush("mylist","d");Listmylist=listOperations.range("mylist",0,-1);System.out.println(mylist);Longsize=listOperations.size("mylist");System.out.println(size);}/** * 操作集合类型的数据 */@TestpublicvoidtestSet(){//sadd smembers scard sinter sunion sremSetOperationssetOperations=redisTemplate.opsForSet();setOperations.add("set1","a","b","c","d");setOperations.add("set2","a","b","x","y");Setmembers=setOperations.members("set1");System.out.println(members);Longsize=setOperations.size("set1");System.out.println(size);Setintersect=setOperations.intersect("set1","set2");System.out.println(intersect);Setunion=setOperations.union("set1","set2");System.out.println(union);setOperations.remove("set1","a","b");}/** * 操作有序集合类型的数据 */@TestpublicvoidtestZset(){//zadd zrange zincrby zremZSetOperationszSetOperations=redisTemplate.opsForZSet();zSetOperations.add("zset1","a",10);zSetOperations.add("zset1","b",12);zSetOperations.add("zset1","c",9);Setzset1=zSetOperations.range("zset1",0,-1);System.out.println(zset1);zSetOperations.incrementScore("zset1","c",10);zSetOperations.remove("zset1","a","b");}/** * 通用命令操作 */@TestpublicvoidtestCommon(){//keys exists type delSetkeys=redisTemplate.keys("*");System.out.println(keys);Booleanname=redisTemplate.hasKey("name");Booleanset1=redisTemplate.hasKey("set1");for(Objectkey:keys){DataTypetype=redisTemplate.type(key);System.out.println(type.name());}redisTemplate.delete("mylist");}

4.2.3 手动序列化反序列化

4.3 Spring Cache

4.3.1 Spring Cache介绍

Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。

Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache

  • Caffeine

  • Redis

  • 常用注解

4.3.2 Spring Cache入门案例

  • 分别演示了上述四种常用注解的使用方式和作用

    实现机制(拿@Cacheable举例):

    1. 执行到对应方法时,被代理对象拦截,转而执行代理方法
      1. 从redis中查询,如果查询成功就退出方法
      2. 执行方法体getById
      3. 将数据存到redis

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:18:26

济南市发明专利申请流程

目前,在正常情况下,授予或拒绝一项发明专利需要两到三年的时间. 一些朋友开始抱怨,为什么申请发明专利要花这么长时间? 结合发明专利申请和审查流程,来谈谈发明专利的审查周期和专利价值.发明专利从申请开始需要经过以下流程:(1)专利撰写申请前的检索:这是判断专利是否具有创造…

作者头像 李华
网站建设 2026/4/23 17:29:11

数学建模优秀论文算法-LSTM算法

LSTM算法入门教程:从原理到应用的完整指南 1. 背景溯源:为什么需要LSTM? 在LSTM出现之前,循环神经网络(RNN)是处理序列数据(如文本、时间序列、语音)的主流模型。RNN的核心思想是“带…

作者头像 李华
网站建设 2026/4/20 9:28:32

洛谷 P5788 【模板】单调栈

题目背景 模板题&#xff0c;无背景。 2019.12.12 更新数据&#xff0c;放宽时限&#xff0c;现在不再卡常了。 题目描述 给出项数为 n 的整数数列 a1…n​。 定义函数 f(i) 代表数列中第 i 个元素之后第一个大于 ai​ 的元素的下标&#xff0c;即 f(i)mini<j≤n,aj​>ai…

作者头像 李华
网站建设 2026/4/23 23:16:13

终成国际人事服务外包业务介绍

终成国际的人事服务外包&#xff0c;旨在将企业非核心、事务性的人力资源工作委托给专业服务商&#xff0c;让企业人力资源部门能够专注于更具战略价值的核心工作。其服务内容覆盖员工从入职到离职的全生命周期管理&#xff0c;具体包括&#xff1a; 1、全面的劳动关系管理&…

作者头像 李华
网站建设 2026/4/23 18:13:41

Yolov8-pose关键点检测:注意力魔改 | 新颖的卷积轴向注意力和谱空间注意力助力涨点,适用高分辨率场景,2025.12

💡💡💡本文改进内容: 卷积轴向注意力模块:与标准轴向注意力不同,CAAM在沿高度和宽度方向进行方向性注意力之前,加入了卷积投影。这减少了冗余和计算开销,产生了一种适合高分辨率场景的、具有上下文感知且高效的表征。 谱空间注意力模块:该模块联合重新加权光谱通道…

作者头像 李华
网站建设 2026/4/23 16:43:25

数据要素流通场景匿名化技术效果评估方法论探讨

在数据要素市场化配置深入推进的背景下&#xff0c;匿名化技术成为平衡数据隐私保护与流通价值释放的核心支撑。通过去除、替换或加密数据中的个人标识信息&#xff0c;匿名化技术让数据在 “不可识别具体个体” 的前提下实现跨主体、跨场景流通。然而&#xff0c;当前匿名化效…

作者头像 李华