redis k-v最操作

1.选择数据库 select n(n代表几号库) redis默认是安装16个库
这里写图片描述


2 keys * 查看当前所有的键值
这里写图片描述


3.keys k? 占位符模糊查询
这里写图片描述


4.清除当前数据库 flushdb
清除全部数据库 flushall
这里写图片描述

<think> 我们首先回答问题:Redis的所有数据结构是否都是key-value类型? 回答:是的,Redis是一个key-value存储系统,它支持多种数据结构,但这些数据结构都是作为value与key关联的。也就是说,每个key都对应一个value,而value可以是不同的数据结构类型。 详细解释: Redis支持的数据结构包括: 1. 字符串(String) 2. 列表(List) 3. 集合(Set) 4. 有序集合(Sorted Set) 5. 哈希表(Hash) 6. 位图(Bitmap,实际上是基于字符串的) 7. HyperLogLogs(基于字符串实现) 8. 地理空间索引(Geospatial,基于有序集合实现) 9. 流(Stream) 在Redis中,无论value是哪种数据结构,它们都是以key-value的形式存储的。其中key总是字符串类型,而value可以是上述任意一种数据结构。 举例说明: - 字符串:`SET name "John"` -> key: "name", value: 字符串"John" - 列表:`LPUSH mylist a b c` -> key: "mylist", value: 列表 [c, b, a] - 集合:`SADD myset 1 2 3` -> key: "myset", value: 集合 {1,2,3} - 哈希:`HSET user:1 name "John" age 30` -> key: "user:1", value: 哈希表 {name: "John", age: "30"} - 有序集合:`ZADD myzset 1 "one" 2 "two"` -> key: "myzset", value: 有序集合 {(1, "one"), (2, "two")} 所以,我们可以说Redis的所有数据都是key-value形式的,其中value部分可以是不同的数据结构。 但是,需要注意的是,Redis的key本身是字符串,而value可以是多种类型。因此,当我们说Redis数据结构时,通常指的是value的数据结构。 下面我们用一段代码(使用Redis的Python客户端redis-py)来演示不同数据结构的操作: ```python import redis # 连接Redis r = redis.Redis(host='localhost', port=6379, db=0) # 字符串 r.set('name', 'Alice') print(r.get('name')) # 输出: b'Alice' # 列表 r.lpush('mylist', 'a', 'b', 'c') print(r.lrange('mylist', 0, -1)) # 输出: [b'c', b'b', b'a'] # 集合 r.sadd('myset', 1, 2, 3) print(r.smembers('myset')) # 输出: {b'1', b'2', b'3'} # 哈希 r.hset('user:1', mapping={'name': 'Bob', 'age': '25'}) print(r.hgetall('user:1')) # 输出: {b'name': b'Bob', b'age': b'25'} # 有序集合 r.zadd('myzset', {'one': 1, 'two': 2}) print(r.zrange('myzset', 0, -1, withscores=True)) # 输出: [(b'one', 1.0), (b'two', 2.0)] ``` 上述代码展示了不同数据结构的基本操作,它们都是通过一个字符串key来存取的。 因此,结论是:Redis的所有数据结构都是key-value类型的,其中key是字符串,value可以是多种数据结构。 §§相关问题§§: 1. Redis的字符串类型可以存储的大容量是多少? 2. Redis的列表和集合有什么区别? 3. 在Redis中如何实现过期时间设置? 4. Redis的持久化机制有哪些? </think>### Redis 数据结构是否都是 Key-Value 类型? **回答:是的,Redis 的所有数据结构本质上都是 Key-Value 存储模型**,但 Value 部分可以支持多种不同的数据结构类型。以下是详细解释: --- ### Redis 数据结构模型 Redis 采用统一的 Key-Value 存储模型,其中: - **Key**:总是字符串类型(String) - **Value**:支持 8 种不同的数据结构类型 | 数据结构 | 存储形式 | 示例命令 | |----------------|-------------------------|------------------------------| | String(字符串)| Key → String | `SET name "John"` | | List(列表) | Key → 字符串链表 | `LPUSH users "Alice"` | | Set(集合) | Key → 无序字符串集合 | `SADD tags "redis" "db"` | | Hash(哈希) | Key → 字段值映射表 | `HSET user:1 age 30` | | ZSet(有序集合)| Key → 带分数的有序集合 | `ZADD leaderboard 100 "Bob"` | | Bitmaps(位图)| Key → 二进制位序列 | `SETBIT login:2023 123 1` | | HyperLogLog | Key → 概率数据结构 | `PFADD visits user123` | | Streams(流) | Key → 消息队列 | `XADD orders * item "Book"` | --- ### 关键特性说明 1. **统一 Key 空间** 所有数据结构共享同一个 Key 命名空间,不同数据类型的 Key 可以共存: ```bash SET user:1 "Alice" # String 类型 HSET user:1 profile age 30 # Hash 类型(错误示例!) ``` > ⚠️ 注意:同一个 Key 只能关联一种数据结构类型,重复设置不同类型会覆盖 2. **复合结构本质** 像 Hash、ZSet 等看似"非 KV"的结构,在 Redis 内部仍存储为 KV 形式: ```python # Hash 类型的实际存储 "user:1" → {"name": "John", "age": "30"} ``` 3. **二进制安全** 所有数据结构都基于二进制安全的字符串实现: ```bash SET binary_data "\x00\xff\xfe" # 存储二进制数据 ``` --- ### 操作示例(Python + redis-py) ```python import redis r = redis.Redis() # 1. 字符串类型 r.set("weather", "sunny") print(r.get("weather")) # b'sunny' # 2. 哈希类型 r.hset("user:1000", mapping={"name": "Alice", "age": 28}) print(r.hgetall("user:1000")) # {b'name': b'Alice', b'age': b'28'} # 3. 有序集合 r.zadd("rank", {"Bob": 95, "Eve": 88}) print(r.zrange("rank", 0, -1, withscores=True)) # [(b'Eve', 88.0), (b'Bob', 95.0)] # 4. 流(消息队列) msg_id = r.xadd("logs", {"level": "INFO", "message": "System started"}) print(r.xrange("logs")) # [[b'169...', {b'level': b'INFO', b'message': b'System started'}]] ``` --- ### 架构设计解析 Redis 通过统一的 `redisObject` 结构实现多数据类型支持: ```c // Redis 源码中的对象定义 (server.h) typedef struct redisObject { unsigned type:4; // 数据类型 (STRING/LIST/HASH/etc) unsigned encoding:4; // 编码方式 (raw/int/ziplist/hashtable/etc) void *ptr; // 指向实际数据的指针 // ... 其他元数据 } robj; ``` - **类型(type)**:标识数据结构种类 - **编码(encoding)**:同一数据类型可能有不同底层实现(如 Hash 可用 ziplist 或 hashtable) - **数据指针(ptr)**:指向具体数据结构实例 --- ### 总结 Redis **所有数据结构都遵循 Key-Value 模型**,核心区别在于: 1. Key 始终是 String 类型 2. Value 可以是 8 种不同的数据结构类型 3. 每种 Value 类型有专用的操作命令(如 `HGET` 用于 Hash,`ZADD` 用于 ZSet) 这种设计使 Redis 在保持简单 KV 模型的同时,提供了丰富的数据操作能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值