什么是 NoSQL?
NoSQL(Not Only SQL)是一种非关系型数据库,用于存储和检索非结构化或半结构化数据。与传统的关系型数据库(如 MySQL、PostgreSQL)不同,NoSQL 数据库通常具有以下特点:
常见的 NoSQL 数据库包括 MongoDB(文档型)、Cassandra(列族型)、Redis(键值型)、Neo4j(图型)等。
Redis 的基础数据类型
Redis 是一个开源的、基于内存的键值存储系统,支持多种数据类型。以下是 Redis 支持的基础数据类型:
这些数据类型使得 Redis 在处理各种不同的应用场景时非常灵活和高效。
- 灵活的数据模型:NoSQL 数据库通常支持灵活的数据模型,如文档、键值对、列族、图等,而不需要固定的表结构。
- 高可扩展性:NoSQL 数据库通常设计为分布式系统,
什么是 NoSQL?
NoSQL(Not Only SQL)是一种非关系型数据库,用于存储和检索非结构化或半结构化数据。与传统的关系型数据库(如 MySQL、PostgreSQL)不同,NoSQL 数据库通常具有以下特点:
- 灵活的数据模型:NoSQL 数据库通常支持灵活的数据模型,如文档、键值对、列族、图等,而不需要固定的表结构。
- 高可扩展性:NoSQL 数据库通常设计为分布式系统,能够轻松扩展以处理大量数据和高并发请求。
- 高性能:由于其简单的数据模型和分布式架构,NoSQL 数据库通常能够提供低延迟和高吞吐量的数据访问。
- 无模式或灵活模式:NoSQL 数据库通常不需要预先定义模式,允许动态添加或修改数据结构。
-
String(字符串):
- 最基本的数据类型,可以存储字符串、整数或浮点数。
- 最大能存储 512MB 的数据。
- 常用命令:
SET
,GET
,INCR
,DECR
等。
-
Hash(哈希):
- 类似于一个字典或对象,存储字段和值的映射。
- 适合存储对象或结构化数据。
- 常用命令:
HSET
,HGET
,HGETALL
,HDEL
等。
-
List(列表):
- 有序的字符串列表,允许重复元素。
- 支持从列表的两端进行插入和删除操作。
- 常用命令:
LPUSH
,RPUSH
,LPOP
,RPOP
,LRANGE
等。
-
Set(集合):
- 无序的字符串集合,不允许重复元素。
- 支持集合的交、并、差等操作。
- 常用命令:
SADD
,SREM
,SMEMBERS
,SINTER
,SUNION
等。
-
Sorted Set(有序集合):
- 类似于 Set,但每个元素都关联一个分数(score),用于排序。
- 元素按分数从小到大排序,且不允许重复元素。
- 常用命令:
ZADD
,ZRANGE
,ZREM
,ZSCORE
等。
-
Bitmaps(位图):
- 实际上是对字符串的位操作,用于存储和操作二进制数据。
- 适合处理布尔值或标志位的场景。
- 常用命令:
SETBIT
,GETBIT
,BITCOUNT
,BITOP
等。
-
HyperLogLog(基数统计):
- 用于估计集合中不同元素的数量,适用于大数据集的基数统计。
- 常用命令:
PFADD
,PFCOUNT
,PFMERGE
等。
-
Geospatial(地理空间):
- 用于存储地理位置信息,支持地理位置相关的查询和操作。
- 常用命令:
GEOADD
,GEODIST
,GEORADIUS
,GEOPOS
等。
-
Streams(流):
- 类似于消息队列,用于存储和消费事件流。
- 适合日志、事件处理等场景。
- 常用命令:
XADD
,XREAD
,XRANGE
,XGROUP
等。
- 能够轻松扩展以处理大量数据和高并发请求。
- 高性能:由于其简单的数据模型和分布式架构,NoSQL 数据库通常能够提供低延迟和高吞吐量的数据访问。
- 无模式或灵活模式:NoSQL 数据库通常不需要预先定义模式,允许动态添加或修改数据结构。
常见的 NoSQL 数据库包括 MongoDB(文档型)、Cassandra(列族型)、Redis(键值型)、Neo4j(图型)等。、
Redis 的基础数据类型
Redis 是一个开源的、基于内存的键值存储系统,支持多种数据类型。以下是 Redis 支持的基础数据类型:
-
String(字符串):
- 最基本的数据类型,可以存储字符串、整数或浮点数。
- 最大能存储 512MB 的数据。
- 常用命令:
SET
,GET
,INCR
,DECR
等。
-
Hash(哈希):
- 类似于一个字典或对象,存储字段和值的映射。
- 适合存储对象或结构化数据。
- 常用命令:
HSET
,HGET
,HGETALL
,HDEL
等。
-
List(列表):
- 有序的字符串列表,允许重复元素。
- 支持从列表的两端进行插入和删除操作。
- 常用命令:
LPUSH
,RPUSH
,LPOP
,RPOP
,LRANGE
等。
-
Set(集合):
- 无序的字符串集合,不允许重复元素。
- 支持集合的交、并、差等操作。
- 常用命令:
SADD
,SREM
,SMEMBERS
,SINTER
,SUNION
等。
-
Sorted Set(有序集合):
- 类似于 Set,但每个元素都关联一个分数(score),用于排序。
- 元素按分数从小到大排序,且不允许重复元素。
- 常用命令:
ZADD
,ZRANGE
,ZREM
,ZSCORE
等。
-
Bitmaps(位图):
- 实际上是对字符串的位操作,用于存储和操作二进制数据。
- 适合处理布尔值或标志位的场景。
- 常用命令:
SETBIT
,GETBIT
,BITCOUNT
,BITOP
等。
-
HyperLogLog(基数统计):
- 用于估计集合中不同元素的数量,适用于大数据集的基数统计。
- 常用命令:
PFADD
,PFCOUNT
,PFMERGE
等。
-
Geospatial(地理空间):
- 用于存储地理位置信息,支持地理位置相关的查询和操作。
- 常用命令:
GEOADD
,GEODIST
,GEORADIUS
,GEOPOS
等。
-
Streams(流):
- 类似于消息队列,用于存储和消费事件流。
- 适合日志、事件处理等场景。
- 常用命令:
XADD
,XREAD
,XRANGE
,XGROUP
等。
这些数据类型使得 Redis 在处理各种不同的应用场景时非常灵活和高效。
Redis 的基础数据类型
Redis 是一个开源的、基于内存的键值存储系统,支持多种数据类型。以下是 Redis 支持的基础数据类型:
-
String(字符串):
- 最基本的数据类型,可以存储字符串、整数或浮点数。
- 最大能存储 512MB 的数据。
- 常用命令:
SET
,GET
,INCR
,DECR
等。
-
Hash(哈希):
- 类似于一个字典或对象,存储字段和值的映射。
- 适合存储对象或结构化数据。
- 常用命令:
HSET
,HGET
,HGETALL
,HDEL
等。
-
List(列表):
- 有序的字符串列表,允许重复元素。
- 支持从列表的两端进行插入和删除操作。
- 常用命令:
LPUSH
,RPUSH
,LPOP
,RPOP
,LRANGE
等。
-
Set(集合):
- 无序的字符串集合,不允许重复元素。
- 支持集合的交、并、差等操作。
- 常用命令:
SADD
,SREM
,SMEMBERS
,SINTER
,SUNION
等。
-
Sorted Set(有序集合):
- 类似于 Set,但每个元素都关联一个分数(score),用于排序。
- 元素按分数从小到大排序,且不允许重复元素。
- 常用命令:
ZADD
,ZRANGE
,ZREM
,ZSCORE
等。
-
Bitmaps(位图):
- 实际上是对字符串的位操作,用于存储和操作二进制数据。
- 适合处理布尔值或标志位的场景。
- 常用命令:
SETBIT
,GETBIT
,BITCOUNT
,BITOP
等。
-
HyperLogLog(基数统计):
- 用于估计集合中不同元素的数量,适用于大数据集的基数统计。
- 常用命令:
PFADD
,PFCOUNT
,PFMERGE
等。
-
Geospatial(地理空间):
- 用于存储地理位置信息,支持地理位置相关的查询和操作。
- 常用命令:
GEOADD
,GEODIST
,GEORADIUS
,GEOPOS
等。
-
Streams(流):
- 类似于消息队列,用于存储和消费事件流。
- 适合日志、事件处理等场景。
- 常用命令:
XADD
,XREAD
,XRANGE
,XGROUP
等。
这些数据类型使得 Redis 在处理各种不同的应用场景时非常灵活和高效。
常用的命令:
以下是一个 Redis 基础命令的 Demo 示例,包含常用数据结构的操作。你可以通过 redis-cli
命令行工具实践这些命令:
1. 字符串 (String)
# 设置键值对
SET username "john_doe"
# 获取值
GET username # 返回 "john_doe"
# 数值自增(适用于计数器)
SET visits 0
INCR visits # visits 变为 1
INCRBY visits 5 # visits 变为 6
# 设置过期时间(10秒后自动删除)
SETEX session:123 10 "logged_in"
2. 哈希 (Hash)
# 存储用户信息(类似对象)
HSET user:1000 name "Alice" age 25 email "alice@example.com"
# 获取单个字段
HGET user:1000 name # 返回 "Alice"
# 获取所有字段和值
HGETALL user:1000 # 返回所有键值对
# 修改字段值
HSET user:1000 age 26 # 更新年龄
# 删除字段
HDEL user:1000 email
3. 列表 (List)
# 从左侧插入数据(类似队列)
LPUSH tasks "task1"
LPUSH tasks "task2" # 列表顺序: ["task2", "task1"]
# 从右侧插入数据
RPUSH tasks "task3" # 列表顺序: ["task2", "task1", "task3"]
# 获取列表范围
LRANGE tasks 0 -1 # 获取全部元素
# 弹出左侧元素(队列操作)
LPOP tasks # 返回 "task2",列表剩下 ["task1", "task3"]
4. 集合 (Set)
# 添加不重复元素
SADD tags "redis" "database" "nosql"
# 获取所有元素
SMEMBERS tags # 返回无序集合
# 检查元素是否存在
SISMEMBER tags "redis" # 返回 1(存在)
# 集合运算(交集、并集)
SADD tags2 "nosql" "cloud"
SINTER tags tags2 # 返回交集 ["nosql"]
5. 有序集合 (Sorted Set)
# 添加带分数的成员(用于排行榜)
ZADD leaderboard 100 "player1" 85 "player2" 95 "player3"
# 按分数降序获取前3名
ZREVRANGE leaderboard 0 2 WITHSCORES
# 获取成员的排名(从0开始)
ZREVRANK leaderboard "player1" # 返回 0(第一名)
6. 键管理
# 查看所有键(生产环境慎用)
KEYS *
# 检查键是否存在
EXISTS username # 返回 1(存在)
# 删除键
DEL username
# 设置键的过期时间
EXPIRE user:1000 3600 # 1小时后过期
# 查看剩余生存时间
TTL user:1000
实际应用场景示例
场景:缓存文章信息
# 存储文章数据(JSON格式)
SET article:1234 '{"title":"Redis教程","views":0}'
# 增加阅读量
INCR article:1234:views
# 设置缓存过期时间(1小时)
EXPIRE article:1234 3600
学习建议
- 安装 Redis 本地环境(官网下载)
- 使用
redis-cli
直接练习命令 - 尝试用 Redis 实现以下功能:
- 用户登录会话管理
- 实时排行榜
- 消息队列(用 List)
- 参考文档:Redis 命令大全
通过动手实践这些命令,你会快速掌握 Redis 的核心操作!