Redis数据类型——针对实习面试
目录
- Redis数据类型
 - Redis常用的数据类型有哪些?
 - String类型可以用于哪些场景?
 - Set类型可以用于哪些场景?
 - Bitmaps类型可以用于哪些场景?
 - HyperLogLog类型可以用于哪些场景?
 - Hash类型与Set类型有什么区别?
 - Hash类型
 - Set类型
 
- 如何用Redis实现排行榜功能?
 - 1. 使用Sorted Set存储排行榜数据
 - 2. 添加或更新用户分数
 - 3. 获取排行榜
 - 4. 用户分数变化
 - 5. 删除用户
 - 6. 获取用户排名
 - 7. 范围查询
 - 8. 排行榜的维护
 
Redis数据类型

Redis常用的数据类型有哪些?
-  
String(字符串)
- 基本的字符串值,实际上是二进制安全的,可以包含任何数据,如文本或者二进制数据(图片、序列化的对象等)。
 - 常用操作:
SET、GET、DEL、INCR(自增)、DECR(自减)等。 
 -  
List(列表)
- 一个有序集合,可以添加、移除、查询元素。
 - 常用操作:
LPUSH/RPUSH(在列表两端插入元素)、LPOP/RPOP(从列表两端弹出元素)、LRANGE(获取列表指定范围内的元素)等。 
 -  
Set(集合)
- 一个无序集合,可以添加、移除、查询元素,自动处理重复。
 - 常用操作:
SADD(添加元素)、SREM(移除元素)、SISMEMBER(判断元素是否存在)、SUNION(集合的并集)等。 
 -  
Hash(哈希)
- 一个键值对集合,适合存储对象。
 - 常用操作:
HSET(设置字段值)、HGET(获取字段值)、HDEL(删除字段)、HGETALL(获取所有字段和值)等。 
 -  
Sorted Set(有序集合)
- 一个有序集合,每个元素关联一个分数,可以进行范围查询。
 - 常用操作:
ZADD(添加元素)、ZRANGE(获取指定排名范围的元素)、ZREM(移除元素)、ZINCRBY(增加元素分数)等。 
 -  
Bitmaps(位图)
- 通过String类型实现的位图,适合用于处理二进制开关,如签到功能。
 
 -  
HyperLogLog(基数统计)
- 用于基数统计,可以估算一个集合中不同元素的数量,占用空间固定且很小。
 
 -  
Geospatial(地理空间)
- 用于存储地理位置信息,支持计算两点间的距离和查询指定范围内的地理位置。
 - 常用操作:
GEOADD(添加地理位置)、GEODIST(计算距离)、GEORADIUS(查询指定范围内的地理位置)等。 
 
String类型可以用于哪些场景?
Redis的String类型是最基本的数据类型,它可以存储任何形式的字符串,包括二进制数据。以下是String类型可以用于的一些常见场景:
-  
缓存
- 缓存是String类型最常见的用途之一。可以缓存数据库查询结果、对象、页面内容等,以减少数据库访问次数,提高系统性能。
 
 -  
计数器
- 由于String类型支持自增(
INCR)和自减(DECR)操作,它可以被用作计数器,例如统计页面访问次数、投票系统中的投票数等。 
 - 由于String类型支持自增(
 -  
会话存储
- 在分布式系统中,String类型可以用来存储用户会话信息,如用户登录状态、购物车信息等。
 
 -  
限速(Rate Limiting)
- 利用String类型的自增特性,可以实现令牌桶或漏桶算法来限制用户请求的频率。
 
 -  
分布式锁
- 可以使用String的
SETNX命令(如果键不存在则设置键的值)来实现分布式锁,以协调分布式系统中的资源访问。 
 - 可以使用String的
 
Set类型可以用于哪些场景?
Redis的Set类型是一个无序且元素唯一的集合,适用于多种场景,以下是一些常见的应用场景:
-  
标签系统:在社交网络或博客平台中,可以将用户的兴趣标签存储在Set中,方便进行集合运算,如找出同时拥有某两个标签的用户。
 -  
去重功能:在需要确保数据唯一性的场景下,如热门搜索词、访问日志的去重,可以通过Set的唯一性特性来避免重复数据。
 -  
投票系统:在投票系统中,Set可以用于记录每个选项的投票者,由于Set不允许重复,这样可以确保每个用户只能对每个选项投一次票。
 -  
共同好友功能:在社交网络中,可以使用Set来存储每个用户的好友列表,通过计算两个Set的交集,可以找出两个用户之间的共同好友。
 -  
抽奖活动:在抽奖活动中,Set可以用来存储中奖者名单,由于Set具有去重功能,可以保证同一个用户不会中奖两次。
 
Bitmaps类型可以用于哪些场景?
Bitmap 存储的是连续的二进制数字(0 和 1),通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身 。我们知道 8 个 bit 可以组成一个 byte,所以 Bitmap 本身会极大的节省储存空间。你可以将 Bitmap 看作是一个存储二进制数字(0 和 1)的数组,数组中每个元素的下标叫做 offset(偏移量)
以下是Bitmaps类型可以用于的一些场景:
-  
用户在线状态:记录用户的在线或离线状态,使用位来表示每个用户的状态,其中1表示在线,0表示离线。
 -  
统计每日活跃用户:统计每天的活跃用户数量,可以为每一天创建一个单独的bitmap,每一位代表一个用户,如果用户在某一天登录,则将对应位置设为1。使用
BITCOUNT命令可以快速统计出当天有多少个活跃用户。 -  
记录用户行为:记录用户的特定行为,如是否阅读了某篇文章、是否购买了某个商品等,每一位代表一个用户的行为。
 -  
签到系统:实现用户的签到功能,可以用一个bitmap来记录用户的签到情况,每一位代表一天,如果用户签到了就设置为1,否则为0。通过
BITCOUNT可以计算用户的连续签到天数。 
HyperLogLog类型可以用于哪些场景?
Redis的HyperLogLog类型是一种概率数据结构,用于高效地估算集合中唯一元素的基数(即不重复元素的数量)。以下是HyperLogLog可以用于的一些场景:
-  
独立访客计数(UV统计):统计网站或应用的独立访客数量,了解实际用户的数量,而不是简单地统计页面访问次数。
 -  
去重后的事件计数:在日志分析中统计独立操作次数,或者在广告分析中统计去重后的广告曝光次数或点击次数。
 -  
社交网络中的独立用户统计:估计某个话题的独立参与用户数量或某个用户的独立粉丝数量。
 
HyperLogLog的优势在于其高效率和极低的内存占用,通常只需要12KB的存储空间就可以估计数亿个唯一元素。不过,需要注意的是,HyperLogLog提供的是近似值,其标准误差为0.81%,对于大多数应用场景来说,这种误差是可以接受的。
Hash类型与Set类型有什么区别?
Redis的Hash类型和Set类型都是用于存储集合的数据结构,但它们在存储和使用上有一些关键的区别:
Hash类型
- 存储结构:Hash类型在Redis中是一个键值对集合,每个Hash可以存储多个字段(field)和值(value)对。
 - 适用场景: 
- 存储对象:Hash类型适合存储对象,因为对象通常由多个属性组成,每个属性可以看作是一个字段。
 - 存储映射:当需要将一个键映射到多个值时,Hash类型可以作为一个映射表来使用。
 
 - 操作:Hash类型支持对单个字段的操作,如
HSET(设置字段值)、HGET(获取字段值)、HDEL(删除字段)等。 - 内存效率:由于Hash类型存储的是键值对,因此对于存储具有多个属性的对象来说,它比Set类型更节省内存。
 - 查询:可以查询Hash中的单个字段,也可以查询整个Hash的所有字段和值。
 
Set类型
- 存储结构:Set类型是一个无序集合,只存储独立的值,不存储键值对。
 - 适用场景: 
- 去重:当需要存储一组不重复的元素时,Set类型是一个很好的选择。
 - 集合运算:Set类型支持集合的交集、并集、差集等操作,适合需要进行集合运算的场景。
 
 - 操作:Set类型支持添加、删除、查询元素,以及集合运算,如
SADD(添加元素)、SREM(删除元素)、SISMEMBER(判断元素是否存在)等。 - 内存效率:由于Set类型只存储值,不存储键值对,因此对于只包含单个值的集合来说,它比Hash类型更节省内存。
 - 查询:只能查询Set中的元素是否存在,不能查询元素的属性或值。
 
总结
- Hash类型适合存储和操作具有多个属性的对象或键值对集合。
 - Set类型适合存储不重复的元素集合,并进行集合运算。
 
如何用Redis实现排行榜功能?
使用Redis实现排行榜功能是一种常见的应用场景,主要可以利用Redis的Sorted Set(有序集合)数据类型来实现。以下是实现排行榜功能的基本步骤和方法:
1. 使用Sorted Set存储排行榜数据
Sorted Set中的每个元素都会关联一个分数(score),这个分数可以用于对元素进行排序。在排行榜场景中,可以将用户的ID作为元素,将用户的分数(如积分、排名分等)作为score。
2. 添加或更新用户分数
使用ZADD命令向Sorted Set中添加新的用户或更新现有用户的分数。如果用户不存在,则添加用户;如果用户已存在,则更新其分数。
ZADD leaderboard <score> <user_id>
 
3. 获取排行榜
- 获取全部排行榜:使用
ZRANGE命令可以获取排行榜中的全部或部分用户及其分数。 
ZRANGE leaderboard 0 -1 WITHSCORES
 
- 获取指定排名的用户:通过指定
ZRANGE命令的起始和结束索引,可以获取特定排名范围内的用户。 
ZRANGE leaderboard <start_rank> <end_rank> WITHSCORES
 
4. 用户分数变化
当用户的行为导致其分数变化时,使用ZINCRBY命令来增加或减少用户的分数。
ZINCRBY leaderboard <increment> <user_id>
 
5. 删除用户
如果需要从排行榜中删除用户,可以使用ZREM命令。
ZREM leaderboard <user_id>
 
6. 获取用户排名
使用ZRANK或ZREVRANK命令可以获取用户在排行榜中的排名。
ZRANK leaderboard <user_id>
 
7. 范围查询
如果需要获取某个分数范围内的用户,可以使用ZRANGEBYSCORE命令。
ZRANGEBYSCORE leaderboard <min> <max> WITHSCORES
 
8. 排行榜的维护
- 定期清理:根据业务需求,可能需要定期清理排行榜,比如移除长时间不活跃的用户。
 - 持久化:为了保证排行榜数据的安全性,可以配置Redis的持久化选项,如RDB或AOF。
 
相关文章:
Redis数据类型——针对实习面试
目录 Redis数据类型Redis常用的数据类型有哪些?String类型可以用于哪些场景?Set类型可以用于哪些场景?Bitmaps类型可以用于哪些场景?HyperLogLog类型可以用于哪些场景?Hash类型与Set类型有什么区别?Hash类型…...
roberta融合模型创新中文新闻文本标题分类
项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…...
《密码系统设计》实验二 4-6学时
文章目录 《密码系统设计》实验实验项目实验二 密码算法实现4-6 学时实践要求(30 分)1. 定义宏2. 使用特定的源文件3. 编译MIRACL库4. 配置KCM和Comba方法5. 编译和运行MEX工具6. 使用config.c工具总结1. 准备环境2. 下载和解压MIRACL库3. 定义宏4. 使用…...
Zypher Network:全栈式 Web3 游戏引擎,服务器抽象叙事的引领者
近期,《黑神话:悟空》的爆火不仅让 AAA 游戏重回焦点,也引发了玩家与开发者的热议。Web2 游戏的持续成功导致部分 Web3 玩家们的倒戈,对比之下 Web3 游戏存在生命周期短且商业模式难以明确的问题,尤其在当前加密市场环…...
2025生物发酵展(济南)为生物制造产业注入新活力共谱行业新篇章
2025第十四届国际生物发酵展将于3月3-5日济南盛大举办!产业链逐步完整,展会面积再创历史新高,展览面积较上届增涨至60000平方米,专业观众40000,品牌展商800,同期活动会议增加至50场,展会同期将举…...
git入门教程14:Git与其他工具的集成
一、Git与代码托管平台的集成 GitHub 集成方式: 在GitHub上创建或克隆仓库。在本地使用Git命令进行代码提交和推送(如git push)。GitHub提供Web界面进行代码浏览、协作和持续集成配置。 特点: 支持Pull Request,便于代…...
在Zetero中调用腾讯云API的输入密钥的问题
也是使用了Translate插件了,但是需要调用腾讯云翻译,一直没成功。 第一步就是,按照这上面方法做:百度、阿里、腾讯、有道各平台翻译API申请教程 之后就是:Zotero PDF translat翻译:申请腾讯翻译接口 主要是…...
【AD】1-8 AD24软件工程创建
1.点击文件,新建项目 2.如图进行设置工程名称和文件路径 3.创建原理图库及原理图,并保存 4.新建PCB库及PCB,并保存 5.单击右键工程保存 注意:先新建工程,在新建文件...
RT-Thread学习
文章目录 前言一、rtt的启动流程二、移植工作总结 前言 RT-Thread学习,这里记录对bsp的移植 一、rtt的启动流程 RT-Thread 支持多种平台和多种编译器,而 rtthread_startup() 函数是 RT-Thread 规定的统一启动入口。一般执行顺序是:系统先从…...
20241102在荣品PRO-RK3566开发板使用荣品预编译的buildroot通过iperf2测试AP6256的WIFI网速
20241102在荣品PRO-RK3566开发板使用荣品预编译的buildroot通过iperf2测试AP6256的WIFI网速 2024/11/2 14:18 客户端:荣耀手机HONOR 70【iPerf2 for Android】 服务器端:荣品PRO-RK3566开发板 预编译固件:update-pro-rk3566-buildroot-hdmi-2…...
网络模型——二层转发原理
网课地址:网络模型_二层转发原理(三)_哔哩哔哩_bilibili 一、路由交换 网络:用来信息通信,信息共享的平台。 网络节点(交换机,路由器,防火墙,AP)介质&#…...
【编程技巧】C++如何使用std::map管理std::function函数指针
一、问题背景 开发过程中遇到了需要根据const字符串调用不同函数的要求。在开发过程中为了快速实现功能,实际使用了if else等判断实现了不同函数的调用,徒增了不少代码行数。 明知道可以采用map管理函数指针,但是没有具体实现过,…...
导航栏小案例
实现类似于这样的效果 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>导航栏</title><style>*{margin: 0;padding: 0;}.div1{width: 100%;height: 60px;/* border: 1px solid blue; */background-color:rgb(…...
MyBatis一文入门精通,面试题(含答案)
一、MyBatis详细介绍 MyBatis 是一个流行的 Java 持久层框架,主要用于简化 SQL 数据库操作。它的设计初衷是通过 XML 或注解的方式配置和执行 SQL 语句,使得数据库操作更加灵活、方便和高效。相比于传统的 JDBC,MyBatis 提供了一些关键优势&…...
Ubuntu18.04服务器非root用户在虚拟环境下的python版本设定
最近需要跑一个python3.9.16版本的代码,Ubuntu18.04服务器上是上次博客中已经定死的python3.8.0版本 需要创建一个虚拟环境,并且在虚拟环境中配置python3.9.16版本 只需要创建一个虚拟环境 conda create -n yyy python3.9.16yyy是你的虚拟环境名字 创建…...
CodeS:构建用于文本到 SQL 的开源语言模型
发布于:2024 年 10 月 29 日 #RAG #Text2 SQL #NL2 SQL 语言模型在将自然语言问题转换为 SQL 查询(文本到 SQL )的任务中显示出良好的性能。然而,大多数最先进的 (SOTA) 方法都依赖于强大但闭源的大型语言…...
HTML 基础概念:什么是 HTML ? HTML 的构成 与 HTML 基本文档结构
文章目录 什么是 HTML ?HTML 的构成 ?什么是 HTML 元素?HTML 元素的组成部分HTML 元素的特点 HTML 基本文档结构如何打开新建的 HTML 文件代码查看 什么是 HTML ? HTML(超文本标记语言,HyperText Markup L…...
18 Docker容器集群网络架构:一、etcd 概述
文章目录 Docker容器集群网络架构:一、etcd概述1.1 etcd 的基本概念和特点1.1.1 定义1.1.2 特点1.2 etcd 在 Docker 集群网络中的作用1.3 etcd 集群的架构和原理1.3.1 架构1.3.2 原理Docker容器集群网络架构:一、etcd概述 etcd是一个高可用的分布式键值存储系统,它主要用于…...
R语言贝叶斯分层、层次(Hierarchical Bayesian)模型房价数据空间分析
原文链接:https://tecdat.cn/?p38077 本文主要探讨了贝叶斯分层模型在分析区域数据方面的应用,以房价数据为例,详细阐述了如何帮助客户利用R进行模型拟合、分析及结果解读,展示了该方法在处理空间相关数据时的灵活性和有效性。&a…...
SpringBoot 在初始化加载无法使用@Value的时候读取配置文件教程
怀旧网个人博客地址:怀旧网,博客详情:SpringBoot 在初始化加载无法使用Value的时候读取配置文件教程 读取数据库数据案例 // 创建YamlPropertiesFactoryBean对象 YamlPropertiesFactoryBean factory new YamlPropertiesFactoryBean(); // …...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
暴雨新专利解决服务器噪音与性能悖论
6月1日,我国首部数据中心绿色化评价方面国家标准《绿色数据中心评价》正式实施,为我国数据中心的绿色低碳建设提供了明确指引。《评价》首次将噪音控制纳入国家级绿色评价体系,要求从设计隔声结构到运维定期监测实现闭环管控,加速…...
开源项目实战学习之YOLO11:12.6 ultralytics-models-tiny_encoder.py
👉 欢迎关注,了解更多精彩内容 👉 欢迎关注,了解更多精彩内容 👉 欢迎关注,了解更多精彩内容 ultralytics-models-sam 1.sam-modules-tiny_encoder.py2.数据处理流程3.代码架构图(类层次与依赖)blocks.py: 定义模型中的各种模块结构 ,如卷积块、残差块等基础构建…...
