Redis系列1——数据结构和常用命令

本文深入探讨Redis的key-value数据库特性,涵盖String、List、Set、Sortedset、Hash及GEO等数据结构,详述如set、get、incr、lpush、sadd、zadd、hget等核心命令用法,同时解析Redis的过期时间设置、key管理及数据序列化机制。

redis为key-value型数据库,支持多种语言接口访问。本质为客户端-服务端应用软件程序。

官方链接:https://redis.io/

不同client:https://redis.io/clients

本文主要介绍command,均可从https://redis.io/commands获取。

常用命令

set key value:设置key和value

set key value px|ex nx|xx:px过期时间,毫秒;nx,不存在时,添加

del key:删除某个key

get key:获取key的value

get all

incr key:key对应的value+1;如果不存在,则创建,并设置value为1

desc key:key对应的valuel-1

dump key:序列化某个key,并返回被序列化的结果

exists key:判断key是否存在

keys *:获取所有的key

expire key seconds:设置key的国旗时间为seconds

ttl key:key的生命期,时间为秒

type key:key对应的value的类型

数据结构

String,常用命令:get、set、incr、desc、mget

List,常用命令:lpush、rpush、lpop、rpop、lrange

Set,常用命令:sadd、spop、smembers、sunion

Sorted set,带排序的set,常用命令:zadd、zrange、zrem、zcard

Hash,常用命令:hget、hset、hgetall

GEO,对地理位置的支持,常用命令:geoadd、geolist、geohash、geopos、georadius、georadiusbymember

Stream,类似MQ,常用命令:xadd、xlen、xdel、xrange、xread、xinfo

 

 

 

 

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
<think> 首先,用户的问题是关于Redis数据结构中的bitsetgeo。用户直接提到了“bitset”,但根据引用内容,Redis中实际使用的是Bitmap(位图),而Geo是地理空间数据类型。在引用[1]中明确提到Redis的特殊数据类型包括Bitmap、GeoHyperLogLog。 用户的问题是:“我想了解Redis数据结构bitsetgeo的相关信息 请问Redis数据结构bitsetgeo的介绍、使用方法及特点”。所以,我需要覆盖Bitmap(位图)Geo(地理空间)。 我的回答必须遵循系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如:[^1] 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 参考提供的引用: - 引用[1]: 介绍Redis的特殊数据类型包括Bitmap、GeoHyperLogLog,它们基于已有数据结构实现。 - 引用[2]: 关于Geo的实现,Redis使用GeoHash编码,底层数据结构是Sorted Set。 - 引用[3]: Redis GEO类型的概述,包括命令如geoadd。 - 引用[4]: HLL(HyperLogLog)的相关信息,但用户问的是bitsetgeo,所以我可能不需要这个。 - 引用[5]: 关于哈希数据类型的信息,包括一个Java代码示例,但用户问的是bitsetgeo,所以这个可能不直接相关。不过,它提到了哈希的数据结构,但用户指定了bitsetgeo。 用户的问题焦点是bitsetgeo。在Redis中,Bitmap就是bitset的别名,Geo是地理空间类型。 结构化回答: - 回答应该清晰,逐步介绍。 - 先介绍Bitmap(位图)。 - 然后介绍Geo(地理空间)。 - 对于每个部分,包括介绍、使用方法(命令示例)、特点。 - 使用引用来支持信息,并在末尾添加引用标识。 - 生成相关问题。 内容大纲: 1. **介绍Bitmap(位图)**: - 基于引用[1],Bitmap是特殊数据类型之一,基于字符串实现。 - 用途:用于位级操作,如统计用户在线状态等。 - 特点:节省内存,适合大规模布尔值存储。 - 使用方法:Redis命令如SETBIT, GETBIT, BITCOUNT等。 2. **介绍Geo(地理空间)**: - 基于引用[1][2][3],Geo用于存储查询经纬度信息。 - 底层数据结构:Sorted Set(引用[2])。 - 实现方式:使用GeoHash编码(引用[2])。 - 使用方法:命令如GEOADD, GEOPOS, GEODIST等(引用[3])。 - 特点:高效的地理位置查询。 添加引用: - 在相关句子末尾添加[^1], [^2]等。 生成相关问题: - 在回答结束时,添加"§§相关问题§§"部分,列出2-3个相关问题。 确保语言: - 使用中文。 - 结构清晰。 最终回答结构: - 开头:简要概述。 - Bitmap部分。 - Geo部分。 - 结尾:相关问题。 </think> ### Redis 数据结构:Bitmap(位图) Geo(地理空间)介绍与使用 Redis 是一个高性能的内存数据库,支持多种数据结构。其中,Bitmap(位图) Geo(地理空间)是两种特殊的数据类型,它们基于 Redis 的基础数据结构(如字符串有序集合)实现,通过巧妙的算法扩展出独特的功能。下面我将逐步介绍它们的原理、使用方法及特点,确保内容真实可靠,并基于站内引用进行说明。 --- ### 1. Bitmap(位图) Bitmap 不是独立的数据结构,而是基于 Redis 的字符串类型实现的位级操作工具。它将字符串视为一个二进制位数组,每个位(bit)可以表示布尔值(0 或 1),适用于高效存储操作大规模二进制数据。 #### 介绍与特点 - **原理**:Bitmap 使用字符串存储位序列,每个字节(8 位)对应一个字符。例如,字符串 "A"(ASCII 码 65)在二进制中是 `01000001`,Redis 允许直接操作这些位[^1]。 - **特点**: - **内存高效**:一个 Bitmap 最多可存储 2^32 位(约 512MB),但实际内存占用远低于存储等量布尔值的其他方式(如列表),适合统计用户在线状态、签到记录等场景。 - **操作高效**:支持位运算(如 AND、OR、XOR),时间复杂度通常为 O(n),其中 n 是位长度。 - **限制**:位索引从 0 开始,最大索引为 4,294,967,295(2^32 - 1)。超出范围的操作会返回错误。 #### 使用方法(Redis 命令示例) Bitmap 通过一组命令操作,所有命令都以 `BIT` 开头: - **设置位值**:`SETBIT key offset value` 将指定偏移量(offset)的位设置为 0 或 1。例如,设置用户 ID 100 的签到状态: ```bash SETBIT user:sign:2023 100 1 # 偏移量 100 设为 1,表示已签到 ``` - **获取位值**:`GETBIT key offset` 返回偏移量的位值。例如: ```bash GETBIT user:sign:2023 100 # 返回 1(表示已签到) ``` - **统计位值**:`BITCOUNT key [start end]` 计算指定范围内位值为 1 的数量。例如: ```bash BITCOUNT user:sign:2023 # 返回总签到次数 ``` - **位运算**:`BITOP operation destkey key [key ...]` 对多个 Bitmap 进行逻辑运算(如 AND、OR),结果存储到目标 key。例如,计算两个用户集的交集: ```bash BITOP AND common_users user:set1 user:set2 ``` Bitmap 的底层是字符串,因此也可以使用 `GET` `SET` 命令直接操作整个位序列,但位操作命令更高效[^1]。 --- ### 2. Geo(地理空间) Geo 类型用于存储查询地理位置信息(如经纬度),底层基于 Redis 的有序集合(Sorted Set)实现。它通过 GeoHash 编码将二维坐标转换为一维值,支持高效的地理查询。 #### 介绍与特点 - **原理**:Geo 使用 GeoHash 算法将经纬度编码为一个字符串(例如 `wx4g0b`),然后再将这个字符串作为有序集合的分数(score)存储。这样,地理坐标就被映射到一个值上,使得范围查询距离计算变得高效[^2]。 - GeoHash 编码的精度可调:编码越长,位置越精确(如 12 位编码误差约 1 厘米)。 - 数学上,GeoHash 将经纬度 $(\lambda, \phi)$ 通过二分法编码,公式为: $$ \text{GeoHash} = f(\lambda, \phi, \text{precision}) $$ 其中 $f$ 是编码函数,precision 指定长度[^2]。 - **特点**: - **查询高效**:支持半径搜索、距离计算等,时间复杂度为 O(log n),适合实时应用(如附近的人、位置追踪)。 - **内存占用低**:基于有序集合存储,内存优化良好(相比自定义实现)。 - **精度可控**:默认误差 < 0.5%,可通过调整参数优化[^3]。 - **限制**:一个 Geo 集合最多存储 2^32 个元素(约 40 亿),适合中小规模数据集。 #### 使用方法(Redis 命令示例) Geo 命令以 `GEO` 开头,常用命令包括: - **添加位置**:`GEOADD key longitude latitude member` 将成员(如地点名)添加到 Geo 集合。例如,添加北京的位置: ```bash GEOADD cities 116.40 39.90 "Beijing" # 经度 116.40, 纬度 39.90 ``` - **查询位置**:`GEOPOS key member` 返回成员的经纬度。例如: ```bash GEOPOS cities "Beijing" # 返回 116.40, 39.90 ``` - **计算距离**:`GEODIST key member1 member2 [unit]` 计算两个成员间的距离,单位可选 m(米)、km(千米)等。例如: ```bash GEODIST cities "Beijing" "Shanghai" km # 返回约 1068(公里) ``` - **范围查询**:`GEORADIUS key longitude latitude radius unit` 查找指定半径内的成员。例如,搜索北京 100 公里内的城市: ```bash GEORADIUS cities 116.40 39.90 100 km ``` Geo 的底层是有序集合,因此也可以使用 `ZRANGE` 等命令操作,但 Geo 专用命令更直观[^3]。 --- ### 总结 - **Bitmap**:基于字符串,适用于二进制标记统计(如用户活跃度),特点是小内存、高效位运算。 - **Geo**:基于有序集合,适用于地理位置服务(如地图应用),特点是高效查询 GeoHash 编码。 这两种类型都体现了 Redis 的灵活性——通过扩展已有数据结构实现新功能,而不引入额外开销[^1]。在实际应用中,Bitmap 适合高并发计数,而 Geo 能处理实时地理数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值