当前位置: 首页 > news >正文

Redis核心数据类型解析

Redis 是一个开源的高性能键值对(Key-Value)内存数据库,同时支持数据持久化到磁盘。它支持多种复杂数据结构,具有原子性操作、高并发、低延迟等特点,广泛应用于缓存、会话存储、消息队列、实时排行榜等场景。

1. 字符串(String)

特点:最基本的键值类型,可存储文本、数字或二进制数据,最大 512MB。

常用命令

SET name "Alice"       # 设置键值
GET name               # 获取值 → "Alice"
INCR counter           # 数字自增(初始为0)→ 1
DECR counter           # 数字自减 → 0
APPEND name " Smith"   # 追加字符串 → "Alice Smith"

Python 应用

import redis
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)r.set('name', 'Alice')
print(r.get('name'))  # 输出: Alicer.incr('counter')     # 计数器自增
print(r.get('counter'))  # 输出: 1

2. 列表(List)

特点:有序字符串集合,支持两端插入/删除,底层是双向链表。

常用命令

LPUSH fruits "apple"   # 左侧添加元素
RPUSH fruits "banana"  # 右侧添加元素
LRANGE fruits 0 -1     # 获取所有元素 → ["apple", "banana"]
LPOP fruits            # 左侧弹出元素 → "apple"
LLEN fruits            # 获取长度 → 1

Python 应用

r.lpush('fruits', 'apple')
r.rpush('fruits', 'banana', 'cherry')
print(r.lrange('fruits', 0, -1))  # 输出: ['apple', 'banana', 'cherry']
r.lpop('fruits')
print(r.llen('fruits'))  # 输出: 2

3. 集合(Set)

特点:无序、唯一元素集合,支持交集、并集等运算。

常用命令

SADD tags "python" "redis"  # 添加元素
SMEMBERS tags               # 获取所有元素 → ["python", "redis"]
SISMEMBER tags "java"       # 判断是否存在 → 0(不存在)
SINTER set1 set2            # 求交集
SUNION set1 set2            # 求并集

Python 应用

r.sadd('tags', 'python', 'redis', 'django')
print(r.smembers('tags'))  # 输出: {'python', 'redis', 'django'}
print(r.sismember('tags', 'java'))  # 输出: False

4. 有序集合(Sorted Set)

特点:类似 Set,但每个元素关联一个分数(score),可按分数排序。

常用命令

ZADD ranking 80 "Alice" 90 "Bob"  # 添加元素及分数
ZRANGE ranking 0 -1 WITHSCORES    # 按分数升序排列 → ["Alice", "80", "Bob", "90"]
ZREVRANGE ranking 0 0             # 取分数最高的1个 → ["Bob"]
ZSCORE ranking "Alice"            # 获取分数 → "80"

Python 应用

r.zadd('ranking', {'Alice': 80, 'Bob': 90, 'Charlie': 85})
# 按分数升序取所有元素
print(r.zrange('ranking', 0, -1, withscores=True))  
# 输出: [('Alice', 80.0), ('Charlie', 85.0), ('Bob', 90.0)]

5. 哈希(Hash)

特点:键值对的集合(类似字典),适合存储对象(如用户信息)。

常用命令

HSET user:1 name "Alice" age "25"  # 设置多个字段
HGET user:1 name                   # 获取字段值 → "Alice"
HGETALL user:1                     # 获取所有字段 → ["name", "Alice", "age", "25"]
HDEL user:1 age                    # 删除字段

Python 应用

r.hset('user:1', mapping={'name': 'Alice', 'age': '25', 'city': 'Beijing'})
print(r.hget('user:1', 'name'))  # 输出: Alice
print(r.hgetall('user:1'))       # 输出: {'name': 'Alice', 'age': '25', 'city': 'Beijing'}

6. 消息队列(Stream)

特点:持久化消息队列,支持消费者组、消息确认等功能。

常用命令

XADD logs * level "error" msg "Failed"  # 发送消息(* 自动生成ID)
XREAD COUNT 1 STREAMS logs 0            # 读取消息(从ID=0开始)
XGROUP CREATE logs group1 0             # 创建消费者组
XREADGROUP GROUP group1 consumer1 COUNT 1 STREAMS logs >  # 消费者组读取消息

Python 应用

# 发送消息
r.xadd('logs', {'level': 'error', 'msg': 'Failed to connect'})# 读取消息
messages = r.xread(streams={'logs': 0}, count=1)
print(messages)  # 输出: [('logs', [('1694567890000-0', {'level': 'error', 'msg': 'Failed to connect'})])]

7. 地理空间(Geospatial)

特点:存储地理位置(经纬度),支持距离计算、范围查询。

常用命令

GEOADD cities 116.40 39.90 "Beijing"  # 添加地理位置(经度、纬度、名称)
GEODIST cities "Beijing" "Shanghai" km  # 计算距离 → 约1318.38km
GEORADIUS cities 116.40 39.90 1000 km  # 查找1000km内的城市

Python 应用

r.geoadd('cities', (116.40, 39.90, 'Beijing'), (121.47, 31.23, 'Shanghai'))
distance = r.geodist('cities', 'Beijing', 'Shanghai', unit='km')
print(distance)  # 输出: 1318.3851

8. HyperLogLog

特点:用于基数统计(不重复元素数量),占用空间极小(约12KB)。

常用命令

PFADD unique_visitors "user1" "user2" "user3"  # 添加元素
PFCOUNT unique_visitors                        # 统计基数 → 3
PFMERGE merged_visitors log1 log2              # 合并两个HyperLogLog

Python 应用

r.pfadd('unique_visitors', 'user1', 'user2', 'user3', 'user1')
print(r.pfcount('unique_visitors'))  # 输出: 3(去重后数量)

9. 位图(Bitmap)

特点:按位存储数据,适合记录开关状态(如用户签到、在线状态)。

常用命令

SETBIT sign_in 0 1  # 第0天签到(1表示签到,0表示未签)
SETBIT sign_in 2 1  # 第2天签到
GETBIT sign_in 0    # 检查第0天是否签到 → 1
BITCOUNT sign_in    # 统计签到总天数 → 2

Python 应用

r.setbit('sign_in', 0, 1)  # 第0天签到
r.setbit('sign_in', 2, 1)  # 第2天签到
print(r.getbit('sign_in', 0))  # 输出: 1
print(r.bitcount('sign_in'))   # 输出: 2

10. 位域(Bitfield)

特点:对 bitmap 进行多比特位操作,支持自定义位宽的整数读写。

常用命令

BITFIELD stats SET u4 0 15  # 从偏移量0开始,存储4位无符号整数15(二进制1111)
BITFIELD stats GET u4 0     # 读取4位无符号整数 → 15
BITFIELD stats INCRBY i4 4 1  # 从偏移量4开始,对4位有符号整数+1

Python 应用

r.bitfield('stats', 'SET', 'u4', 0, 15)  # 存储4位无符号整数15
result = r.bitfield('stats', 'GET', 'u4', 0)
print(result)  # 输出: [15]

以上是 Redis10 种核心数据类型的典型操作。实际使用中,redis-py 客户端的方法名与 Redis 命令基本一致,通过类型提示和返回值自动转换(如设置 decode_responses=True 可将字节转为字符串),大幅简化了 Python 开发。


文章转载自:

http://KR5cpjw3.kLpwL.cn
http://vtZbTGma.kLpwL.cn
http://BF6Gor2v.kLpwL.cn
http://Hge4dyXE.kLpwL.cn
http://1xxa9pBD.kLpwL.cn
http://DNem9IZM.kLpwL.cn
http://rmt3HZ9c.kLpwL.cn
http://v0rIqIZs.kLpwL.cn
http://O9JcSzNo.kLpwL.cn
http://3zYoZQcj.kLpwL.cn
http://2TkrWgT5.kLpwL.cn
http://GfOYd3U8.kLpwL.cn
http://xfpvAx0X.kLpwL.cn
http://YsZMn0J9.kLpwL.cn
http://IizeL2xS.kLpwL.cn
http://A23lRts7.kLpwL.cn
http://0FNx8FLg.kLpwL.cn
http://9buXJAoY.kLpwL.cn
http://uZJwwyu5.kLpwL.cn
http://hvYMUtT0.kLpwL.cn
http://c7Ch9VNK.kLpwL.cn
http://357UBbQB.kLpwL.cn
http://7LrN3bNM.kLpwL.cn
http://kFMBsFdA.kLpwL.cn
http://zozIwA9b.kLpwL.cn
http://xaXuc7S2.kLpwL.cn
http://2dpYrWJk.kLpwL.cn
http://D12j1kj2.kLpwL.cn
http://ie5bGj1a.kLpwL.cn
http://ljzIpnaS.kLpwL.cn
http://www.dtcms.com/a/385709.html

相关文章:

  • 在 Ubuntu 22.04 系统中,如何安装最新版 MySQL和Navicat Pro 17
  • 立创·庐山派K230CanMV开发板的进阶学习——颜色识别
  • 大模型学习:Transformer模型构建
  • C++ STL之deque的使用和模拟实现
  • 【网络安全就业】信息安全专业的就业前景(非常详细)零基础入门到精通,收藏这篇就够了
  • SpringBoot中的循环依赖以及解决办法
  • np.linalg 函数一览
  • 网络:UDP协议
  • 【开题答辩全过程】以 JAVA汽车年审管理系统为例,包含答辩的问题和答案
  • 【Linux网络编程】Socket-UDP
  • OpenCV物体跟踪:从理论到实战的全面解析
  • Linux:线程同步
  • Day24_【深度学习(3)—PyTorch使用(2)—张量的数值计算】
  • 9月15日
  • 【langchain】构建简单检索问答链
  • 简单的数组
  • ENVI系列教程(四)——图像几何校正
  • 数据结构基础--散列表
  • 【Redis】-- 主从复制
  • 输入1.8V~5.5V 输出28V DCDC升压芯片TLV61046A
  • Windows 上安装 FFmpeg 8.0(2025 版)——从“手动解压”到“一条命令”的进化之路
  • 红黑树(RBTree)知识总结
  • 若依框架前端通过 nginx docker 镜像本地运行
  • 二十、瑞萨RZT2N2 PROFINET SDK正式发布
  • SpringAI框架接入Deepseek和豆包实现智能聊天
  • 江协科技STM32课程笔记(一) —GPIO
  • 江协科技STM32课程笔记(二)—外部中断EXTI
  • 科技信息差(9.15)
  • 龙珠KS6 10.5T矿机评测:性能、功耗、噪音与冷却分析
  • 打工人日报#20250915