笔记redis
Redis
介绍
Redis(Remote Dictionary Server)是用C语言开发的一个基于内存的键值对数据库
- 所有数据都在内存中,访问速度非常快:读的速度是110000次/s,写的速度是81000次/s
- 适合存储热点数据(商品、新闻资讯)
- 存储的value类型比较丰富,也称为结构化NoSQL数据库(非关系型数据库)
安装
下载
中文网地址:https://www.redis.net.cn/
解压
目录或文件 | 作用 |
---|---|
redis-benchmark | 性能测试工具 |
redis-check-aof | AOF文件修复工具 |
redis-check-dump | RDB文件检查工具(快照持久化文件) |
redis-cli | 命令行客户端 |
redis-server | 启动redis服务器 |
redis.windows.conf | redis核心配置文件 |
修改配置
启动服务
使用
管理员身份
运行,注意:必须指定配置文件,窗口启动之后,不能关闭
测试联通性
图形客户端
数据结构
键值 <String,5种数据类型>
Redis采用的是键值对存储,键的类型只能为字符串,值支持五种数据类型
- 字符串(string):普通字符串,Redis中最简单的数据类型
- 哈希(hash):也叫散列,类似于Java中的HashMap结构
- 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
- 集合(set):无序集合,没有重复元素,类似于Java中的HashSet
- 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素
命令
String 字符串
字符串类型是Redis中最为基础的数据存储类型。
* 增加数据:set key value * 获取数据:get key * 删除数据:del key* 增加数据的时候设置过期时间:setex key 存活时间(单位是s) value * 增加的时候判断可以是否存在:setnx key value* 自增(减)操作:incr/decr key incrby/decrby key step
Hash 哈希
Hash类型极其类似于java中的Map,值里面可以存放一组组的键值对,该类型非常适合于存储对象类型的信息。
* 增加数据:hset key hkey hvalue* 获取数据(单个):hget key hkey * 获取数据(所有):hgetall key * 获取所有hkey: hkeys key * 获取所有hvalue: hvals key * 删除数据(单个): hdel key hkey * 删除数据(所有): del key
List 列表
List类型底层是一个双向字符串链表,里面的元素是
有序的,可重复的
,我们可以从链表的任何一端进行元素的增删。* 添加数据:lpush(rpush) key value * 查询数据:lrange key [开始索引 结束索引] * 列表长度:llen key * 删除数据:lpop(rpop) key* 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止:BRPOP key timeout
Set 集合
Set类型底层是一张hash表,里面的元素是无序的,不可重复的
* 添加数据:sadd key value * 查看数据:smembers key * 获取元素数量:scard key * 移除集合元素:srem key value
ZSet 有序集合
ZSet,也称sortedSet,在Set的基础上,加入了有序功能,在添加元素的时候,允许指定一个分数,它会按照这个分数排序。
* 添加数据:zadd key score value * 查询数据:zrange key [开始索引 结束索引] * 删除数据:zrem key value
通用命令
通用命令指的是不受数据类型限制的一批命令
1. 模糊查询键:keys 模糊匹配规则 2. 根据键判断记录是否存在:exists key 3. 根据键判断值类型:type key 4. 返回key的剩余生存时间:TTL key5. 选择数据库: select 库索引[从0开始] 6. 清空当前数据库: flushdb 7. 清空所有数据库: flushall
Java操作
Spring对Redis客户端进行了整合,提供了 SpringDataRedis,在SpringBoot项目中还提供了对应的starter,即spring-boot-starter-data-redis
SpringDataRedis是Spring的一部分,对Redis底层开发包进行了高度封装,提供了一个高度封装的类:RedisTemplate,用于操作各种数据类型
- ValueOperations:简单K-V操作
- SetOperations: set类型数据操作
- ZSetOperations: zset类型数据操作
- HashOperations: hash类型的数据操作
- ListOperations: list类型的数据操作
环境准备
① 在项目中添加依赖(已完成)
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
② application.yaml中添加配置
spring:redis:host: localhostport: 6379password: itheimadatabase: 0 # 操作的是0号数据库
③ 提供配置类
package com.sky.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.cache.annotation.CachingConfigurerSupport;
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.RedisSerializer;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;// Redis配置类
@Configuration
public class RedisConfig extends CachingConfigurerSupport {@Bean@SuppressWarnings("all")public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {//原生RedisTemplateRedisTemplate<String, Object> template = new RedisTemplate<String, Object>();template.setConnectionFactory(factory);//json序列化Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = getJackson2JsonRedisSerializer();// -------- 设置key value 序列化方式 --------// key采用String的序列化方式template.setKeySerializer(RedisSerializer.string());// hash的key也采用String的序列化方式template.setHashKeySerializer(RedisSerializer.string());// value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);// hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}private Jackson2JsonRedisSerializer getJackson2JsonRedisSerializer() {Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();//设置ObjectMapper访问权限om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);//记录序列化之后的数据类型,方便反序列化om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);//LocalDatetime序列化,默认不兼容jdk8日期序列化JavaTimeModule timeModule = new JavaTimeModule();timeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));timeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));timeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));timeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));//关闭默认的日期格式化方式,默认UTC日期格式 yyyy-MM-dd’T’HH:mm:ss.SSSom.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);om.registerModule(timeModule);jackson2JsonRedisSerializer.setObjectMapper(om);return jackson2JsonRedisSerializer;}
}
④ 提供测试类
package com.sky.test;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;}
String
@Testpublic void testString() {//0 获取操作简单kv子对象ValueOperations ops = redisTemplate.opsForValue();//1. 增加ops.set("1001", "zhangsan");//2. 获取System.out.println(ops.get("1001"));//3. 创建的时候设置有效时间 setexops.set("1002", "李四", 300, TimeUnit.SECONDS);//4. 添加的时候判断是否有值(没有值的时候再添加) setnxSystem.out.println(ops.setIfAbsent("1003", "王五"));//trueSystem.out.println(ops.setIfAbsent("1003", "王五"));//false//5. 删除 delredisTemplate.delete("1003");//6. 保存对象Dept dept = new Dept(1,"开发部", LocalDateTime.now(),LocalDateTime.now());ops.set("dept:1", dept);System.out.println(ops.get("dept:1"));}
Hash
//哈希@Testpublic void testHash(){//获取当前数据类型对应的操作对象HashOperations ops = redisTemplate.opsForHash();//1. 新增 hset 2001 name zhangsanops.put("2001","name","zhangsan");HashMap<Object, Object> map = new HashMap<>();map.put("name","李四");map.put("age",18);map.put("password",123456);ops.putAll("2002",map);Dept dept = new Dept(1, "开发部", LocalDateTime.now(), LocalDateTime.now());ops.putAll("2003", BeanUtil.beanToMap(dept));//2. 获取//hget 2002 nameSystem.out.println(ops.get("2002", "name"));//hgetall 2002System.out.println(ops.entries("2002"));Map m = ops.entries("2003");System.out.println(BeanUtil.mapToBean(m, Dept.class, true));//hkeys 2002System.out.println(ops.keys("2002"));//hvals 2002System.out.println(ops.values("2002"));//3. 删除//hdel 2002 nameops.delete("2002","name","password");}
List
//操作列表类型数据@Testpublic void testList() {//0. 获取操作具体类型对象ListOperations ops = redisTemplate.opsForList();//1. 添加数据ops.leftPush("3001", "张三"); //lpush 3001 张三ops.leftPushAll("3001", "李四", "王五"); //lpush 3001 李四 王五//2. 查询长度System.out.println(ops.size("3001"));//llen 3001//3. 查询数据List list = ops.range("3001", 0, -1); //lrange 3001 0 -1for (Object o : list) {System.out.println(o);}//4. 删除ops.rightPop("3001"); //rpop 2001redisTemplate.delete("3001");//del 3001}
Set
//操作集合类型数据@Testpublic void testSet() {//0. 获取操作具体类型对象SetOperations ops = redisTemplate.opsForSet();//1. 添加数据 ops.add("4001", "张三", "李四", "王五"); //sadd 4001 张三 李四 王五//2. 查询Set members = ops.members("4001"); //smembers 4001for (Object member : members) {System.out.println(member);}//3. 长度System.out.println(ops.size("4001")); //scard 4001//4. 移除ops.remove("4001", "张三", "李四"); //srem 4001 张三 李四 }
ZSet
//操作有效集合类型数据@Testpublic void testZSet() {//0. 获取操作具体类型对象ZSetOperations ops = redisTemplate.opsForZSet();//1. 添加数据 zadd 5001 10 张三ops.add("5001", "张三", 10);ops.add("5001", "李四", 30);ops.add("5001", "王五", 20);//2. 查询 zrange 5001 0 -1Set set = ops.range("5001", 0, -1);for (Object o : set) {System.out.println(o);}//3. 长度 zcard 5001System.out.println(ops.size("5001"));//4. 移除 zrem 5001 张三ops.remove("5001", "张三", "李四");}
通用
//测试通用@Testpublic void testCommon() {//键模糊查询 keys *Set keys = redisTemplate.keys("*");for (Object key : keys) {System.out.println(key);}//判断键是否存在 exists 5001System.out.println(redisTemplate.hasKey("5001"));//trueSystem.out.println(redisTemplate.hasKey("6001"));//false//判断键类型 type 5001System.out.println(redisTemplate.type("5001"));//zset//存活时间 ttl 5001System.out.println(redisTemplate.getExpire("5001"));// -1}
案例
将前面做的项目中的部门信息缓存到redis中
package com.itheima.controller;import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.itheima.anno.LogAnno;
import com.itheima.pojo.Dept;
import com.itheima.service.DeptService;
import com.itheima.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
public class DeptController {@Autowiredprivate DeptService deptService;@Autowiredprivate RedisTemplate<String,String> redisTemplate;//查询列表@GetMapping("/depts")public Result findAll() {//线程Redis中查询String listJsonFromRedis = redisTemplate.opsForValue().get("DEPT_LIST");List<Dept> deptList = null;if (StrUtil.isNotEmpty(listJsonFromRedis)){deptList = JSONUtil.toList(listJsonFromRedis, D ept.class);}else{deptList = deptService.findAll();//保存到redisredisTemplate.opsForValue().set("DEPT_LIST",JSONUtil.toJsonStr(deptList));}return Result.success(deptList);}//新增@LogAnno(methodDesc = "新增部门")@PostMapping("/depts")public Result save(@RequestBody Dept dept) {deptService.save(dept);//清空缓存中的数据列表redisTemplate.delete("DEPT_LIST");return Result.success();}//删除@LogAnno(methodDesc = "删除部门")@DeleteMapping("/depts/{id}")public Result deleteById(@PathVariable("id") Integer id) {//清空缓存中的数据列表redisTemplate.delete("DEPT_LIST");deptService.deleteById(id);return Result.success();}
}
- redis命令 Java操作 工具提示完成操作
新增部门")
@PostMapping(“/depts”)
public Result save(@RequestBody Dept dept) {
deptService.save(dept);
//清空缓存中的数据列表redisTemplate.delete("DEPT_LIST");return Result.success();
}//删除
@LogAnno(methodDesc = "删除部门")
@DeleteMapping("/depts/{id}")
public Result deleteById(@PathVariable("id") Integer id) {//清空缓存中的数据列表redisTemplate.delete("DEPT_LIST");deptService.deleteById(id);return Result.success();
}
}
>1. redis命令 Java操作 工具提示完成操作
>2. 部门数据的缓存
相关文章:

笔记redis
Redis 介绍 Redis(Remote Dictionary Server)是用C语言开发的一个基于内存的键值对数据库 所有数据都在内存中,访问速度非常快:读的速度是110000次/s,写的速度是81000次/s适合存储热点数据(商品、新闻资…...
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱接入 🌟 手机短信与邮箱短信验证码的应用场景 在现代应用中,短信和邮箱验证码是用户验证和安全管理的关键组成部分。它们广泛应用于注册、登录、找回密码等场景…...
RAID 方案比较
RAID(Redundant Array of Independent Disks)技术用于将多个磁盘驱动器组合成一个逻辑单元,以提高性能、可靠性或两者兼顾。以下是常见 RAID 级别的比较: RAID 0(条带化) 磁盘数量:最少 2 块可…...

零成本搭建个人 APP 和小程序后台
前言 前面也说了,通过 GitHub PagesGitHub Actions 只是解决了动态数据展示,但是要零成本得完成将用户信息存储下来,并实现数据交互呢? 我开始是想用云文档,种种原因,我还是希望有个自己能二次修改的后台…...

LCP 633 平方数之和 [leetcode - 8]
最近是在研究双指针啊,leetcode刷的题都是这方面的。都记录在最近的文章里,大家有兴趣可以去我主页看看 LCP633 平方数之和 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 b2 c 。 示例 1: 输入&…...
c语言试题及答案
1. 一个C程序的组成部分可以是( )。 A) 一个主函数和一至若干个其他函数 B) 一至若干个主函数 C) 一个主程序和一至若干个其他函数 D) 一个主程序和一至若干个子程序 2. 一个C程序的执行是从( )。 (A)本程序的main函数开始,到main函数结束 (B)本程序文件的第一个函…...

python实现链表
什么是链表 链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域item和指向下一个节点的指针next。通过节点之间的相互连接最终串联成一个链表。 python实现一个简单链表 我们可以用python实现一个超级简单的链表 class node:# 初始化数据def __init_…...

Linux Shell 编程基础入门(一)
😀前言 本篇博文是关于自动化工具Shell 编程的基本介绍,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…...

大白话讲微服务的灾难性雪崩效应
讲在前面,为什么微服务需要有熔断等策略呢?今天我们用大白话来讲讲微服务的灾难性雪崩效应,熔断策略就是解决雪崩效应的有效解决方案。 什么是灾难性雪崩效应? 假设我们有两个访问量比较大的服务A和B,这两个服务分别依…...

配置 K3s 访问私有镜像仓库
1.修改 K3s 配置文件 1)对于较新的 K3s 版本,你可以通过编辑 K3s 的配置文件来指定镜像仓库。编辑 /etc/rancher/k3s/config.yaml 文件(如果不存在则需要创建),添加或修改以下配置: # /etc/rancher/k3s/config.yaml …...

数学建模之数据分析【七】:对Pandas DataFrame 进行切片
文章目录 一、切片简介二、创建Pandas数据框三、使用iloc进行切片3.1 对行进行切片3.2 对列进行切片3.3 Dataframe选中特定单元格 四、使用loc创建切片4.1 使用Python对Dataframe中的行进行切片4.2 指定单元格 五、在Python中使用布尔条件六、结论 对 Pandas DataFrames 进行切…...
删除 Docker 容器的日志文件
删除 Docker 容器的日志文件可以帮助释放磁盘空间。以下是步骤: 1、查找日志文件路径: Docker 容器的日志通常存储在 /var/lib/docker/containers/<container_id>/ 目录下。日志文件通常名为 container_id-json.log。 通过以下命令找到日志文件的位置: docker ins…...

DevOps入门(上)
1: DevOps概念 DevOps: Development 和 Operations 的组合 DevOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使…...
基于Python的网易民谣歌词数据分析的设计与实现
基于Python的网易民谣歌词数据分析的设计与实现 Design and Implementation of Data Analysis for NetEase Folk Song Lyrics Based on Python 完整下载链接:基于Python的网易民谣歌词数据分析的设计与实现 文章目录 基于Python的网易民谣歌词数据分析的设计与实现摘要第一章…...
趋动科技联合云轴科技推出GPU云原生超融合解决方案
近日,趋动科技VirtAITech携手云轴科技ZStack推出GPU云原生超融合联合解决方案,提供全面、可扩展的云原生GPU存算一体化解决方案。 该方案基于云原生超融合及GPU资源池化技术,使得GPU资源管理变得更加简便易用,能够帮助企业用户在…...

Dooring智图,一款开箱即用的图片海报编辑器
嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践,也陆陆续续设计并开发了多款可视化搭建产品,比如: Nocode/Doc,可视化 零代码打造下一代文件编辑器爆肝1000小时, Dooring零代码搭建平台3.5正式上线可视化…...

苹果macbook电脑怎么玩《黑神话:悟空》游戏教程来了
火爆全网《黑神话:悟空》是一款基于中国神话故事《西游记》改编的动作角色扮演游戏,它在PC平台上的系统要求已经公布,但目前官方尚未发布Mac版本。不过,Mac用户可以通过使用系统兼容工具如CrossOver来尝试在Mac上运行这款游戏。Cr…...
git 目录提交代码
初始化 Git 仓库(如果尚未初始化): 如果还没有初始化 Git 仓库,运行以下命令: git init将远程仓库添加到目录 b 中: 如果尚未关联远程仓库,添加远程仓库: git remote add origin <…...

多商户商品下单限购问题修复
问题: 当商品设置限购为 1 时,够买数量未超过限购,但是还是提示超出限购数量 修复方法: 修改代码路径: app\common\repositories\store\order\StoreOrderCreateRepository.php 修改代码一: i s p a y s a r r a y u n i q u e ( a r r a y c o l u m n ( is_pays array_un…...

eNSP 华为ACL配置
华为ACL配置 需求: 公司保证财务部数据安全,禁止研发部门和互联网访问财务服务器,但总裁办不受影响 R1: <Huawei>sys [Huawei]sys Router1 [Router1]undo info-center enable [Router1]int g1/0/0 [Router1-GigabitEth…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...