一给 发表于 2024-10-13 19:13:47

数据库 - Redis数据库

目录
前言
一、Redis 的主要特点
二、Redis常见应用场景
三、Redis的局限性
四、Redis的利用
(一)安装redis-py
(二)根本连接
(三)常用利用
(四)关闭连接
五、总结
前言

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储数据库,支持多种数据结构,具有高性能、持久化等特点。它常被称为 "NoSQL" 数据库之一,专为快速访问和处理大量数据设计,广泛应用于缓存、实时分析、消息队列等场景。
一、Redis 的主要特点

Redis的特点主要有以下几种:
1. 内存存储,持久化支持


[*]Redis 的核心是一个内存数据库,全部数据存储在内存中,因此具有极高的读写速率。
[*]它同时支持将内存中的数据以快照(snapshot)或追加日志(AOF, Append Only File)的方式持久化到磁盘,以防止数据丢失。
2.多种数据结构


[*]Redis 不仅支持简朴的键值对,还支持丰富的数据结构,包括:

[*]字符串(String)
[*]列表(List)
[*]聚集(Set)
[*]有序聚集(Sorted Set)
[*]哈希(Hash)
[*]位图(Bitmap)
[*]HyperLogLog
[*]Stream(流)
3.持久化


[*]Redis 提供了两种持久化机制

[*]RDB (Redis Database Backup):将数据定时快照保存到磁盘。
[*]AOF (Append Only File):以日志形式记载每次写利用,实用于高可靠性的数据恢复需求。
4.高性能


[*]由于全部利用都在内存中完成,Redis 的读写性能非常高。通常,每秒可以大概处理数十万到数百万的哀求。
5.分布式与高可用


[*]Redis 支持主从复制(Replication),可以通过 Master-Slave 架构实现数据的冗余备份和读取负载均衡。
[*]Redis Sentinel:提供高可用性监控和自动故障转移。
[*]Redis Cluster:答应在多个 Redis 节点之间进行数据分片(Sharding),支持横向扩展。
6.Lua 脚本支持


[*]Redis 支持通过 Lua 脚本来实现复杂的事务逻辑,包管利用的原子性。
7.事务支持


[*]固然 Redis 不支持传统的 SQL 范例的事务,但它通过下令 MULTI、EXEC、WATCH 提供了一定水平上的事务控制。
二、Redis常见应用场景

Redis的常用场景主要有5种,详情如下:
1.缓存


[*]Redis 常用于缓存体系,因其高速读写能力,适合作为缓存层,存储热点数据以减少后端数据库的访问压力。
2.会话管理


[*]Redis 被广泛用于存储用户会话数据,特殊是在 web 应用中,Redis 能快速存取用户状态,并且通过 TTL(生存时间)机制自动清理过期会话数据。
3.消息队列


[*]Redis 支持列表、发布订阅和流(Stream)等特性,因此可以作为高效的消息队列体系,处理使命队列和实时数据流。
4.排行榜、计数器


[*]利用 Redis 的有序聚集,可以大概轻松实现排行榜体系,常用于游戏、社交平台等必要进行分数排序的应用。
[*]Redis 的原子性递增/递减利用非常适适用于计数器场景,如网站点击量统计、流量监控等。
5.实时数据分析


[*]由于 Redis 是内存数据库,处理实时数据(如实时流量统计、实时分析体系)是它的强项。Redis 提供的 HyperLogLog 数据结构可以用于独立数据计数,减少内存消耗。
三、Redis的局限性

Redis的局限性有以下几点:


[*] 内存依赖性

[*]Redis 全部数据都存储在内存中,固然这带来了极高的速率,但也意味着内存容量将成为 Redis 能存储的数据量的瓶颈。

[*] 持久化风险

[*]固然 Redis 提供了多种持久化机制,但由于其核心是内存数据库,仍有大概因为一些意外环境导致数据丢失。比方,AOF 日志文件破坏大概导致恢复过程中的数据丢失。

[*] 分布式复杂性

[*]Redis Cluster 固然提供了分片和横向扩展,但其配置和维护相对复杂,对于大规模分布式体系的用户,大概必要额外的架构设计和运维支持。

四、Redis的指令利用

(一)根本键值对利用



[*]设置键值对
#将 key 设置为 value,如果键已经存在则覆盖
SET key value


[*]获取键的值
#获取键 key 的值
GET key


[*]删除键
#删除指定的键 key
DEL key


[*]检查键是否存在
#返回 1 表示存在,0 表示不存在
EXISTS key


[*]设置键的过期时间
#为键 key 设置过期时间(单位为秒)。到期后,键会被自动删除
EXPIRE key seconds


[*]查看键的剩余生存时间
#返回键 key 的剩余生存时间,单位为秒
TTL key


[*]获取全部匹配的键
#返回与模式 pattern 匹配的所有键,例如 KEYS user* 匹配所有以 user 开头的键
KEYS pattern
(二)字符串利用



[*]增加数值
#将键 key 的值加 1,如果键不存在,默认值为 0 后再加 1
INCR key


[*]增加指定数值
#将键 key 的值增加指定的整数 increment
INCRBY key increment


[*]减小数值
#将键 key 的值减 1
DECR key


[*]减小指定数值
#将键 key 的值减去指定的整数 decrement
DECRBY key decrement


[*]追加字符串
#在键 key 的值末尾追加 value
APPEND key value
(三)列表利用



[*]在列表左侧插入元素
#将 value 插入到列表 key 的左侧
LPUSH key value


[*]在列表右侧插入元素
#将 value 插入到列表 key 的右侧
RPUSH key value


[*]从列表左侧弹出元素
#移除并返回列表 key 的最左侧元素
LPOP key


[*]从列表右侧弹出元素
#移除并返回列表 key 的最右侧元素
RPOP key


[*]获取列表中的元素
#返回列表 key 中指定范围的元素,start 和 stop 为索引,0 表示第一个元素,-1 表示最后一个元素
LRANGE key start stop


[*]获取列表长度
#返回列表 key 的长度
LLEN key
(四)聚集利用



[*]向聚集中添加元素
#向集合 key 中添加成员 member,如果成员已存在则不添加
SADD key member


[*]获取聚集中的全部元素
#返回集合 key 中的所有成员
SMEMBERS key


[*]删除聚集中的元素
#从集合 key 中移除指定的成员 member
SREM key member


[*]检查成员是否存在于聚集中
#返回 1 表示 member 存在于集合 key 中,0 表示不存在
SISMEMBER key member


[*]聚集的交集
#返回给定集合的交集
SINTER key1 key2 ... keyN


[*]聚集的并集
#返回给定集合的并集
SUNION key1 key2 ... keyN


[*]聚集的差集
#返回 key1 和 key2 集合的差集,即 key1 中有而 key2 中没有的元素
SDIFF key1 key2
(五)哈希利用



[*]设置哈希字段值
#将哈希表 key 中的字段 field 设置为 value,如果字段不存在则创建
HSET key field value


[*]获取哈希字段的值
#返回哈希表 key 中字段 field 的值
HGET key field


[*]获取哈希表中的全部字段和值
#返回哈希表 key 中的所有字段及其对应的值
HGETALL key


[*]删除哈希表中的字段
#删除哈希表 key 中的字段 field
HDEL key field
(六)有序聚集利用



[*]向有序聚集中添加成员
#向有序集合 key 中添加成员 member,并设置其分数为 score
ZADD key score member


[*]获取有序聚集中的成员
#返回有序集合 key 中,指定索引范围内的成员,按分数升序排列
ZRANGE key start stop


[*]获取有序聚集中指定分数范围的成员
#返回有序集合 key 中,分数在 min 和 max 之间的成员
ZRANGEBYSCORE key min max


[*]删除有序聚集中的成员
#移除有序集合 key 中的成员 member
ZREM key member
(七)事务利用

Redis 支持事务,通过 MULTI 和 EXEC 组合使用。


[*]开启事务
#开始事务
MULTI


[*]执行事务
#提交事务,执行所有事务内的命令
EXEC


[*]放弃事务
#取消事务,放弃所有在事务中的命令
DISCARD
(八)发布订阅



[*]发布消息
#向频道 channel 发布消息 message
PUBLISH channel message


[*]订阅频道
#订阅频道 channel,当有新消息发布时,客户端会接收到消息
SUBSCRIBE channel


[*]取消订阅
#取消对频道 channel 的订阅
UNSUBSCRIBE channel
(九)持久化利用

Redis 提供了多种持久化方式以防止数据丢失,包括 RDB(快照)和 AOF(追加文件)两种持久化机制。


[*]手动保存快照
#手动保存 Redis 数据到磁盘
SAVE


[*]异步保存快照
#以后台异步方式保存 Redis 数据到磁盘
BGSAVE


[*]停止持久化
#清除 Redis 中的所有数据
FLUSHALL
(十)管理利用



[*]获取 Redis 信息
#返回 Redis 服务器的状态和统计信息
INFO


[*]查看客户端连接
#列出所有连接到 Redis 的客户端信息
CLIENT LIST


[*]查看内存使用环境
#获取当前 Redis 的内存使用情况
MEMORY STATS


[*]重启 Redis
#关闭 Redis 服务器
SHUTDOWN
(十一)总结

Redis 提供了丰富的指令利用,涵盖根本的键值存储、列表、聚集、有序聚集、哈希等常用数据结构的利用。同时,Redis 还支持事务、持久化、发布订阅等功能。纯熟掌握这些 Redis 的指令利用,可以帮助你在各种场景下高效管理和利用 Redis 数据库。
五、使用Python代码利用Redis

Redis 是一个高效的键值存储体系,Python 中有专门的库来与 Redis 交互,最常用的是 redis-py 库。redis-py 提供了对 Redis 数据库的大部分功能的支持,包括根本的键值存储、队列、发布订阅等利用。
(一)安装redis-py

在 Python 中使用 Redis 首先必要安装 redis-py 库。可以使用 pip 下令进行安装:
pip install redis
(二)根本连接

要连接到 Redis 服务器,必要创建一个 Redis 对象并指定连接的参数,默认环境下,Redis 运行在 localhost:6379,比方:
import redis

# 创建一个 Redis 连接对象
r = redis.Redis(host='localhost', port=6379, db=0)
(三)常用利用



[*]字符串利用
Redis 最根本的存储范例是字符串,以下是一些常见的利用:
# 设置键值对
r.set('name', 'Alice')

# 获取键的值
name = r.get('name')
print(name)# 输出: b'Alice' (Redis 默认返回字节类型)

# 删除键
r.delete('name')


[*]列表利用
Redis 支持列表范例,可以进行队列利用:
# 向列表中从左插入元素
r.lpush('mylist', 1, 2, 3)# 列表:

# 从列表右边弹出一个元素
value = r.rpop('mylist')
print(value)# 输出: b'1'

# 获取列表的所有元素
elements = r.lrange('mylist', 0, -1)# 获取整个列表
print(elements)# 输出:


[*]聚集利用
Redis 也支持无序聚集范例:
# 添加集合成员
r.sadd('myset', 'apple', 'banana', 'cherry')

# 获取集合中的所有成员
members = r.smembers('myset')
print(members)# 输出: {b'apple', b'banana', b'cherry'}

# 从集合中删除一个成员
r.srem('myset', 'banana')


[*]哈希利用
哈希可以看作是一个键对应多个字段的键值对聚集:
# 设置哈希表中的字段
r.hset('myhash', 'field1', 'value1')
r.hset('myhash', 'field2', 'value2')

# 获取哈希表中的字段值
value = r.hget('myhash', 'field1')
print(value)# 输出: b'value1'

# 获取哈希表中所有字段和值
all_values = r.hgetall('myhash')
print(all_values)# 输出: {b'field1': b'value1', b'field2': b'value2'}


[*]有序聚集利用
有序聚集支持按分数排序的元素:
# 添加有序集合的成员
r.zadd('myzset', {'apple': 1, 'banana': 2, 'cherry': 3})

# 获取按分数排序的集合成员
members = r.zrange('myzset', 0, -1)
print(members)# 输出:

# 获取某个成员的分数
score = r.zscore('myzset', 'banana')
print(score)# 输出: 2.0


[*]发布订阅
Redis 支持发布订阅消息机制:
# 发布消息
r.publish('mychannel', 'hello world')

# 订阅频道
pubsub = r.pubsub()
pubsub.subscribe('mychannel')

# 接收消息
for message in pubsub.listen():
    print(message)
    # 输出: {'type': 'message', 'pattern': None, 'channel': b'mychannel', 'data': b'hello world'}
(四)关闭连接

当不再必要使用 Redis 时,可以关闭连接:
r.close()
六、总结

Redis 是一个非常高效、灵活的 NoSQL 数据库,广泛用于必要高速读写的场景,如缓存、消息队列、会话管理、排行榜等。通过丰富的数据结构、内存存储的特性、以及多种持久化和高可用性解决方案,Redis 在现代 web 应用和大型体系中占据了重要位置。然而,在使用 Redis 时,也必要注意内存管理、数据持久化和集群部署的复杂性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数据库 - Redis数据库