Redis核心数据结构
目录
五种基础数据结构
string
hash
list
set
zset
用zset实现微博热搜
scan遍历
高频问题
五种基础数据结构
string
单个赋值set

批量赋值/取值
- mset
- mget


设置不存在字符串setnx, 如果不存在, 则设置成功返回1, 如果存在返回0, 可以当做分布式锁

删除值

设置过期时间/查看过期时间
- expire key time
- ttl key

数字自增

设置分布式锁
setnx order:1 true // 返回1代表获取锁成功
// 执行业务
del order:1
set order:1 true ex 15 nx // 加上过期时间, 防止死不释放
hash
设置hash的key field value

批量设置hash field

获取hash所有属性

删除hash某个属性

hash和string(非json)存储对象对比
优点:
- hash能规整同类数据, 便于管理
- hash更节省空间(key少)
- hash对部分属性的更新性能更好
缺点:
- 过期时间只能在key上, 不能在属性上
- 在集群架构不适合大规模使用
- 不适用field过多, 避免big key
list
lpush key val1 val2 从左边放入元素
rpush key val1 val2 从右边放入元素
lpop key len 从左边拿len个元素
rpop key len 从右边拿len个元素
实现栈结构-FILO

实现队列结构-FIFO

blpop key len timeout 从左边拿len个元素,没有元素就阻塞timeout秒, 如果timeout=0就一直阻塞

lpush+brpop=阻塞队列
lrange key start end 批量获取队列元素(不会移除,元素还在)

set
sadd key val1 val2 val3 批量往集合添加元素
scard key 获取集合个数
srem key val1 移除集合元素
sismembers key 获取集合所有元素
sismember key val1 判断集合是否存在该元素


srandmember key 3 从集合选出3个元素, 不删除
spop key 3 从集合选出3个元素, 并且从集合中删除


sinter key1 key2 取交集
sinterstore des1 key1 key2 取交集并存入新的集合des1


sunion key1 key2 取并集
sunion des2 key1 key2 取并集存入新的集合des2


sdiff key1 key2 key3 取差集
sdiffstore des2 key1 key2 key3 取差集并存入新的集合

应用
- 用srandmember/spop实现抽奖功能
- 用sinter/sunion/sdiff实现关注模型(可能认识的人)
zset
zadd key score val 往集合添加key和分数和值
zscore key val 获取集合元素分值
zrange key start end 按分值升序
zrevrange key start end 按分值降序

zunion numkeys key1 key2 并集计算
zinter numkeys key1 key2 交集计算
zdiff numkeys key1 key2 差集计算

用zset实现微博热搜
1. 点击一条消息
zincrby key incr val

2. 展示当日前五
zrevrange hotnew:231126 0 5 withscores

3. 七日搜索榜单
zunionstore hotnew:231119-231126 7 hotnew:231119 hotnew:231120 ... hotnew:231123
4. 七日搜索榜单
zrevrange hotnew:231119-231126 0 5 withscores
scan遍历
SCAN cursor [MATCH pattern] [COUNT count]
cursor(hash桶的索引值):游标, 从0开始遍历, 每次用返回的值替换下一次检索的游标, 结束时返回0
pattern:正则表达式
count: 返回结果个数近似值

注意:scan并非完美无瑕, 如果在scan的过程中如果有键的变化(增加、 删除、 修改) ,可能会碰到下面问题: 新增的键可能没有遍历到, 重复遍历键等, 也就是说scan并不能保证完整的遍历出来所有的键
高频问题
1. redis是单线程吗?
只有键值读写是单线程, 其他的持久化,过期删除,集群同步都是额外线程执行.
2. redis为什么高性能?
- 所有数据都存内存中, 都是内存级别运算
- IO多路复用,redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器
- 单线程执行,没有上下文切换
相关文章:
Redis核心数据结构
目录 五种基础数据结构 string hash list set zset 用zset实现微博热搜 scan遍历 高频问题 五种基础数据结构 string 单个赋值set 批量赋值/取值 msetmget 设置不存在字符串setnx, 如果不存在, 则设置成功返回1, 如果存在返回0, 可以当做分布式锁 删除值 设置过期时…...
Redis 如何批量删除指定前缀的Key
批量删除指定前缀的Key有两中方法,一种是借助 redis-cli,另一种是通过 SCAN 命令来遍历所有匹配前缀的 key,并使用 DEL 命令逐个删除它们。 redis-cli 使用 Redis 自带的 redis-cli 命令行工具,你可以通过以下方式批量删除指定前…...
如何熟练使用vim工具?
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 …...
ClassNotFoundException: org.apache.hive.spark.client.Job
hive使用的是3.13版本,spark是3.3.3支持hadoop3.x hive将engine从mr改成spark,通过beeline执行insert、delete时一直报错,sparkTask rpc关闭, 查看yarn是出现ClassNotFoundException: org.apache.hive.spark.client.Job。 开始…...
《合成孔径雷达成像算法与实现》_使用CS算法对RADARSAT-1数据进行成像
CSA 简介:Chirp Scaling 算法 (简称 CS 算法,即 CSA) 避免了 RCMC 中的插值操作。该算法基于 Scaling 原理,通过对 chirp 信号进行频率调制,实现了对信号的尺度变换或平移。基于这种原理,可以通过相位相乘代替时域插值…...
GCN01——Ubuntu中设置vivado编辑器为vscode
确定vscode位置 在命令行中输入 which code得到文件地址 进入文件夹后可看到,这是个链接文件,不过无所谓,就用这个地址就行 设置Text Editor 打开setting选择右侧text editor 这里说明了如何进行设置 将自己的地址加进去就行 /usr/share…...
Android 11.0 软硬键盘同时使用的兼容(软键盘与内置物理键盘共存)
1.概述 在11.0的系统rom产品定制化开发总,在有些设备上,如果外接了USB扫描枪之类的设备,当插入USB扫描枪以后,然后点击输入调用输入法的时候,没有反应,但是拔掉USB扫描枪以后,输入法又能正常使用,这说明和输入法起冲突了,询问了好多同时,说可能把会把USB扫描枪识别为…...
ARM安全架构——为复杂软件提供保护
目录 一、概述 二、栈溢出和执行权限 三、面向返回的编程ROP 四、面向跳转的编程(JOP) 五、将这些技术应用于实际代码 七、检查你的知识...
提升网页交互体验的秘密武器——防抖和节流
说在前面 在现代Web开发中,提高网页性能是至关重要的。本文介绍了防抖和节流这两种常用的性能优化技术,通过控制函数的执行频率,有效减少不必要的计算和网络请求,从而提升用户体验和页面加载速度。 函数节流 节流是指限制一个函数…...
HX3002入耳检测光感驱动调试-感0x08 寄存器溢出,不变化错误问题解决方法
是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 读取光感0x08 寄存器溢出,不变化错误问题?原因 原因:没有读取到0x08数据,没有读0x…...
目标检测开源数据
KITTI KITTI数据集下载(百度云)_kitti数据集百度云-CSDN博客 KITTI数据集下载及解析_kitti bin文件标签-CSDN博客 KITTI 3D目标检测数据集解析(完整版)_kitti数据集结构-CSDN博客 KITTI数据集简介与使用_kitti数据见一个视频多…...
AI模特换装的前端实现
本文作者为 360 奇舞团前端开发工程师 随着AI的火热发展,涌现了一些AI模特换装的前端工具(比如weshop网站),他们是怎么实现的呢?使用了什么技术呢?下文我们就来探索一下其实现原理。 总体的实现流程如下&am…...
git-5
1.GitHub为什么会火? 2.GitHub都有哪些核心功能? 3.怎么快速淘到感兴趣的开源项目 github上面开源项目非常多,为了我们高效率的找到我们想要的资源 根据时间 不进行登录,是没有办法享受到高级搜索中的代码功能的,登录…...
qt 5.15.2压缩和解压缩功能
qt 5.15.2压缩和解压缩功能 主要是添加qt项目文件.pro内容: 这里要先下载quazip的c项目先编译后引入到本项目中/zip目录下 INCLUDEPATH ./zip CONFIG(debug, debug|release) {win32:win32-g: PRE_TARGETDEPS $$PWD/zip/libquazipd.awin32:win32-g: LIBS -L$$PWD…...
thinkphp6出现 htmlentities() expects parameter 1 to be string, array given
为避免出现 XSS 安全问题, thinkphp6默认变量输出都会使用 htmlentities 方法进行转义 输出。 如果不想被转义输出,模板渲染时,需要在变量后面加上 raw方法,如:{$data|raw} 1、出现问题前的代码 PHP代码$this->assi…...
【android开发-03】android中Intent的用法介绍
1,Intent的作用 在Android开发中,Intent的使用非常广泛,包括启动Activity、启动Service、发送广播等。是各组件间交互的一种重要方式,他不仅可以指明当前组件想要执行的动作,还可以在不同组件间传递数据。 Intent可以…...
Java中时间工具详解:java.time包的应用
引言 时间在软件开发中是一个至关重要的概念,而Java自从引入java.time包后,提供了更加强大和灵活的时间处理工具。本文将深入介绍java.time包中的一些常用时间工具,帮助你更好地处理日期和时间的操作。 1. LocalDate - 处理日期 LocalDate…...
mysql 日志分析
程序启动标志 可以直接全局搜索,查看启动了几次 可以看到总共11次,当前是第2次 如何判断mysql是正常关闭,手动启动的 下图中启动之前出现 Shutdown complete打印说明启动之前是正常关闭的...
网络运维与网络安全 学习笔记2023.11.30
网络运维与网络安全 学习笔记 第三十一天 今日目标 实现AP自动注册、配置WLAN业务参数、无线终端通过wifi互访 实现AP自动注册 项目背景 企业内网的大量AP已经通过DHCP的方式获得IP地址 为了实现后期大量AP的统一管理,希望通过AC实现集中控制 在AC设备上&#…...
Perplexity 推出全新大型在线语言模型
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
3步解锁安全镜像烧录:Balena Etcher让系统部署零风险
3步解锁安全镜像烧录:Balena Etcher让系统部署零风险 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 还在为制作系统启动盘而烦恼吗?你是…...
catlass - 让算子开发像搭积木一样简单
昇腾CANN的算子开发,以前是个"体力活"——每个算子都要手写 C 代码,调内存、调流水、调同步,写对了算你厉害,写错了调试三天。 catlass 要解决的就是这个问题:把算子开发从"手写汇编"变成"搭…...
AI、机器学习、深度学习:工程师的三层实战分水岭
1. 这不是概念辨析课,而是一张能让你少走三年弯路的“技术地图”我带过三十多个从零起步转行做数据工作的学员,几乎每个人在入职前都反复问过同一个问题:“AI、机器学习、深度学习,到底谁是谁的爸爸?”——结果翻遍教程…...
哈尔滨除甲醛本地推荐
新房装修完工本是喜事,但刺鼻异味与甲醛却令人困扰。哈尔滨冬季供暖期长,室内密闭时间长,甲醛释放周期可达3-15年,仅靠通风难以根除。许多业主在除甲醛时踩坑:要么找了不靠谱的游击队治理无效,要么被低价套…...
用 MinIO 搭建 S3 兼容对象存储服务
用 MinIO 搭建 S3 兼容对象存储服务 分类:开源项目部署 MinIO 适合附件、备份归档和 S3 兼容对象文件。这类主题真正跑起来并不难,难的是上线后稳定、可备份、能排错。本文按实操方式整理一套可以直接落地的流程,默认你已经会登录 Linux 服务…...
三步解锁全网盘极速下载:免登录直链解析完整教程
三步解锁全网盘极速下载:免登录直链解析完整教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...
【Go i18n】TOML语言包
一、VS Code 必备的 TOML 插件1. Even Better TOML(核心高亮与语法检查 👑)搜索关键字:Even Better TOML为什么要装:它是目前全网公认第一的 TOML 插件。装上它之后,你的 .toml 文件不仅会变得色彩斑斓&…...
DeepSeek-R1 vs Qwen2.5 vs Claude-3:17项硬指标对比,谁才是2024高性价比AI模型黑马?
更多请点击: https://kaifayun.com 第一章:DeepSeek性价比优势分析 DeepSeek 系列模型(如 DeepSeek-V2、DeepSeek-Coder、DeepSeek-MoE)在开源大模型生态中展现出显著的性价比优势,尤其在推理效率、训练成本与下游任务…...
用AI 30分钟搞一个Todo应用?这事到底靠不靠谱
用AI 30分钟搞一个Todo应用?这事到底靠不靠谱 先说结论AI辅助生成代码骨架确实能缩短初始搭建时间,但调试、联调、部署环节的效率提升远不如宣传的20倍。这个流程更适合原型验证和个人小工具,不适合需要长期维护、协作或复杂业务逻辑的项目。…...
水葫芦生长周期生长阶段早晚期检测数据集VOC+YOLO格式1029张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1029标注数量(xml文件个数):1029标注数量(txt文件个数):1029标注类别…...

