Redis
- Redis介绍
- 开源的,使用C编写,基于内存且支持持久化
- 高性能的Key-Value的NoSQL数据库
- 支持数据类型丰富,字符串strings,散列hashes,列表lists,集合sets,有序集合sorted sets 等等
- 支持多种编程语言(C C++ Python Java PHP ... )
- 单进程单线程
- 与其他数据库对比
- MySQL : 关系型数据库,表格,基于磁盘,慢
- MongoDB:键值对文档型数据库,值为类似JSON文档,数据结构相对单一
- Redis的诞生是为了解决硬盘IO带来的性能瓶颈
-应用场景
- 缓存
- 并发计数
- 排行榜
- 生产者消费者模型
- redis版本
- 最新版本:5.0
- 常用版本:2.4、2.6、2.8、3.0(里程碑)、3.2、3.4、4.0(教学环境版本)、5.0
配置文件详解
- 配置文件所在路径
/etc/redis/redis.conf
- 设置连接密码
- requirepass 密码
- 重启服务
sudo /etc/init.d/redis-server restart
- 客户端连接
redis-cli -h 127.0.0.1 -p 6379 -a 123456
127.0.0.1:6379>ping
- 通用命令
# 切换库(number的值在0-15之间,db0 ~ db15)
select number
# 查看键
keys 表达式 # keys *
# 数据类型
type key
# 键是否存在
exists key
# 删除键
del key
# 键重命名
rename key newkey
# 清除当前库中所有数据(慎用)
flushdb
# 清除所有库中所有数据(慎用)
flushall
python交互redis
- 模块(redis)
sudo pip3 install redis
- 使用流程
import redis
# 创建数据库连接对象
r = redis.Redis(host='127.0.0.1',port=6379,db=0,password='123456')
- 代码示例
import redis
# 1 创建redis数据库连接对象
r = redis.Redis(password='123456')
# 2 使用,很多命令的返回值是字节串,需要用字符串
# 表示时,调用decode方法.
# 3.1 通用命令...
print(r.keys('*'))
print(r.exists('name'))
# 3.2 字符串类型的操作
r.set('uname', 'aid2102', 60)
print(r.get('uname').decode())
r.mset({'a': 100, 'b': 200, 'c': 300})
print(r.mget(['a', 'b', 'c']))
# 3.3 列表类型的操作
r.lpush('pylk1',100,200,300)
print(r.lrange('pylk1',0,-1))
list案例: 一个进程负责生产任务,一个进程负责消费任务
- 进程1: 生产者,product.py
import redis
# 1 创建redis数据库连接对象
r = redis.Redis(password='123456')
# 2.向任务队列中添加任务,使用列表类型
# 任务格式: 任务类别_发送者_接收者_内容
task = 'sendMail_aid2102_mzg_helloworld'
r.lpush('lst:tasks',task)
- 进程2: 消费者,consumer.py
import redis
r = redis.Redis(password='123456')
while True:
task = r.brpop('lst:tasks',3)
if task:
print(task)
# (b'lst:tasks', b'sendMail_aid2102_mzg_helloworld')
# 处理任务
task_data = task[1].decode()
print(task_data)
# sendMail_aid2102_mzg_helloworld
lst_data = task_data.split('_')
if lst_data[0] == 'sendMail':
print('执行发送邮件的任务...')
else:
print('-no task!-')
最后一次更新于2023-03-09 14:55
0 条评论