Redis数据类型
五种核心类型
flowchart TD
Redis数据类型[Redis数据类型]
Redis数据类型 --> String
Redis数据类型 --> Hash
Redis数据类型 --> List
Redis数据类型 --> Set
Redis数据类型 --> ZSet
类型详解
类型 | 特点 | 适用场景 | 示例命令 |
---|---|---|---|
String | 二进制安全,最大512MB | 缓存、计数器 | SET/GET/INCR |
Hash | 字段-值映射表 | 对象存储 | HSET/HGET/HGETALL |
List | 双向链表,元素可重复 | 消息队列、最新列表 | LPUSH/RPOP/LRANGE |
Set | 无序集合,元素唯一 | 标签、好友关系 | SADD/SMEMBERS/SINTER |
ZSet | 有序集合,带分值 | 排行榜、优先级队列 | ZADD/ZRANGE/ZREVRANK |
Java操作示例
// String操作
jedis.set("user:1:name", "张三");
String name = jedis.get("user:1:name");
// Hash操作
jedis.hset("user:1", "name", "李四");
Map<String,String> user = jedis.hgetAll("user:1");
// List操作
jedis.lpush("messages", "msg1");
List<String> msgs = jedis.lrange("messages", 0, -1);
// Set操作
jedis.sadd("tags", "java", "redis");
Set<String> tags = jedis.smembers("tags");
// ZSet操作
jedis.zadd("rank", 90, "user1");
Set<String> topUsers = jedis.zrevrange("rank", 0, 2);
性能特点
- String: O(1)时间复杂度
- Hash: 单个操作O(1),HGETALL O(n)
- List: 头尾操作O(1),按索引O(n)
- Set: 添加/删除O(1),集合运算O(n)
- ZSet: 添加/删除O(logN),范围查询O(logN)
最佳实践
- 小数据使用String,大数据考虑Hash分片
- List长度控制在千级以内
- Set适合存储独立不重复数据
- ZSet注意分值设计
- 避免大Key(>10KB)
Redis 基础操作
数据类型
1. String(字符串)
# 设置值
SET key value
# 获取值
GET key
# 删除键
DEL key
# 设置过期时间
EXPIRE key seconds
# 自增/自减
INCR key
DECR key
2. List(列表)
# 左侧插入
LPUSH key value
# 右侧插入
RPUSH key value
# 左侧弹出
LPOP key
# 右侧弹出
RPOP key
# 获取范围
LRANGE key start stop
3. Hash(哈希)
# 设置字段值
HSET key field value
# 获取字段值
HGET key field
# 获取所有字段
HGETALL key
# 删除字段
HDEL key field
4. Set(集合)
# 添加成员
SADD key member
# 删除成员
SREM key member
# 判断是否存在
SISMEMBER key member
# 获取所有成员
SMEMBERS key
5. Sorted Set(有序集合)
# 添加成员
ZADD key score member
# 获取分数
ZSCORE key member
# 获取排名
ZRANK key member
# 获取范围
ZRANGE key start stop
常用命令
键操作
# 查看所有键
KEYS *
# 查看键类型
TYPE key
# 查看键是否存在
EXISTS key
# 删除键
DEL key
# 重命名键
RENAME key newkey
数据库操作
# 选择数据库
SELECT index
# 清空当前数据库
FLUSHDB
# 清空所有数据库
FLUSHALL
# 查看数据库大小
DBSIZE
服务器操作
# 查看服务器信息
INFO
# 查看内存使用
INFO memory
# 查看客户端连接
CLIENT LIST
# 关闭服务器
SHUTDOWN
事务操作
基本事务
# 开始事务
MULTI
# 执行命令
SET key1 value1
SET key2 value2
# 提交事务
EXEC
# 取消事务
DISCARD
监视键
# 监视键
WATCH key
# 取消监视
UNWATCH
发布订阅
发布消息
# 发布消息
PUBLISH channel message
订阅消息
# 订阅频道
SUBSCRIBE channel
# 取消订阅
UNSUBSCRIBE channel
持久化
RDB 持久化
# 手动保存
SAVE
# 异步保存
BGSAVE
# 配置自动保存
CONFIG SET save "900 1 300 10 60 10000"
AOF 持久化
# 开启 AOF
CONFIG SET appendonly yes
# 重写 AOF
BGREWRITEAOF
性能优化
1. 内存优化
flowchart TD
A[分析内存使用] --> B{内存使用过高?}
B -- 是 --> C[检查大键]
C --> D[优化数据结构]
D --> E[设置过期时间]
E --> F[使用压缩]
F --> G[继续监控]
B -- 否 --> G
2. 性能优化
flowchart TD
A[监控性能指标] --> B{性能下降?}
B -- 是 --> C[检查慢查询]
C --> D[优化命令使用]
D --> E[调整配置参数]
E --> F[考虑集群]
F --> G[继续监控]
B -- 否 --> G
最佳实践
-
键命名规范:
- 使用冒号分隔
- 使用有意义的名称
- 避免过长的键名
- 使用统一的命名空间
-
数据操作建议:
- 合理使用数据类型
- 设置适当的过期时间
- 避免大键
- 使用批量操作
-
性能优化建议:
- 使用 pipeline
- 避免使用 KEYS 命令
- 合理设置内存限制
- 定期清理过期键