redis | 认识非关系型数据库Redis的列表类型及python如何操作redis

Redis 非关 kv型

数据类型

数据类型丰富,字符串strings,散列hashes,列表lists,集合sets,有序集合sorted sets等等

列表

单进程 单线程 尽可能规避掉阻塞的操作

常用命令

  1. LPUSH key value1 value2

    说明:从列表头部压入元素

    返回:list最新的长度

  2. RPUSH key value1 value2

    说明:从列表尾部压入元素

    返回:list最新的长度

  3. 查看列表中元素
    LRANGE key start stop

  4. 获取列表长度
    LLEN key


  1. RPOPLPUSH src dst

    说明:从列表srC尾部 弹出1个元素,压入到列表dst的头部

    返回:被弹出的元素

  2. LINSERT key after|before value newvalue

    说明:在列表指定元素后/前插入元素

    返回:

    1,如果命令执行成功,返回列表的长度

    2,如果没有找到pivot,返回-1

    3,如果key不存在或为空列表,返回0

  3. 从列表头部弹出1个元素

    LPOP key

  4. 从列表尾部弹出1个元素6

    RPOP key

  5. 列表头部,阻塞 弹出,列表为空时阻塞
    BLPOP key timeout

  6. 列表尾部,阻塞弹出,列表为空时阻塞
    BRPOP key timeout


关于BLPOP和BRPOP说明

1、如果弹出的列表不存在或者为空 ,就会阻塞

2、超时时间设置为0,就是永久阻塞,直到有数据可以弹出

3、如果多个客户端阻塞再同一个列表上,使用First In First Service原则,先到先服务

  1. LREM key count value

    说明:删除指定元素

    count:>0:表示从头部 开始向表尾搜索,移除与value相等 的元素,数量为count

    count<0:表示从尾部 开始向表头搜索,移除与value相等的元素,数量为count

    count:=0:移除表中所有与value:相等的值

    返回:被移除元素的数量

  1. LTRIM key start stop

    说明:保留指定范围内的元素

    返回:ok

    场景:

    保存微博评论最后500条 LTRIM weibo:comments 0 499

  2. LSET key index newvalue

    说明:设置Iist指定索引的值

应用场景

1,存储微博评论,做切割,只保留最新的x个

2,生产者消费者模型,做中间层,存放生产者的任务

练习

1、查看所有的键

keys *

2、向列表spider:urls中以RPUSH放入如下几个元素:01 baidu.com

02 taobao.com,03 sina.com,04 jd.com 05 xxx.com

RPUSH spider:urls 01 baidu.com

02 taobao.com,03 sina.com,04 jd.com 05 xxx.com

3、查看列表中所有元素

LRANGE spider:urls 0 -1

4、查看列表长度

LLEN spider:urls

5、将列表中01 baidu.com改为01 tmall...com

LSET 0 01 baidu.com 01 tmall...com

6、在列表中04jd.com之后再加1个元素02 taobao.com

LINSERT spider:urls after 04jd.com 02 taobao.com

7、弹出列表中的最后一个元素

RPOP spider:urls

8、删除列表中所有的02 taobao.com

LREM spider:urls 0 02_taobao.com

9、剔除列表中的其他元素,只剩前3条

LTRIM spider:urls 0 2

pyredis 操作redis

ubuntu

除用redis:客户端进行redis操作外,也可以使用Python直接操作redis

检查当前ubuntu是否安装

sudo pip3 freezelgrep -i 'redis'

安装Python的redis 模块

sudo pip3 install redis

windows

前提是已经安装了redis

  • python安装相关包
    conda install redis
    我的是anconda环境

连接redis


返回字节串

b'k3',b'l1',b'k2',b'uuuname',b'k1',b'uuname'\]![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a2257b058cd3402ea535504ddf1eaa9e.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c64a1f4decc64700b123450c7cc77473.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1ea685c8c019409c89fad890d7ba8819.png) ### 生产者消费者模型 producer.py ```python import redis import json r = redis.Redis(host='',port=,db=,password=) json_obj = {'task':'send_email','email_body':aaa','from''bbb','to''gxn'} json_str = json.dumps(json_obj) r.lpush('pyl2',json_str) ``` consumer.py ```py import redis import json r = redis.Redis(host='',port=,db=,password=) while True: task = r.brpop('pyl2',10) print(task) if task: json_obj = json.loads(task[1]) # 具体任务逻辑 else: print('---no task---') break ``` ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/696f57f129fc40c1888cf9d89a8d0cc3.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f10d8d4758a244efa27d4f6bb0b2b817.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/585203212e73475eb408772cc4a7d891.png)

相关推荐
Hommy888 小时前
【开源剪映小助手-客户端】桌面客户端
python·开源·node.js·github·剪映小助手
2501_921649498 小时前
2026个人量化交易免费数据API接入:从选型到实操
经验分享·python·金融·api·个人开发·量化交易
wgzrmlrm749 小时前
如何解决ORA-28040没有匹配的验证协议_sqlnet.ora版本兼容设置
jvm·数据库·python
维度攻城狮9 小时前
pycallgraph2drawio:Python 调用链可视化 + Draw.io 自由编辑
开发语言·python·draw.io·graphviz
极光代码工作室9 小时前
基于NLP的智能客服系统设计与实现
python·深度学习·机器学习·ai·自然语言处理
Mr_Xuhhh9 小时前
深入Java多线程进阶:从锁策略到并发工具全解析
前端·数据库·python
apcipot_rain9 小时前
Python实战——蒙特卡洛模拟分析杀牌游戏技能收益
python·游戏·数学建模
老绿光9 小时前
Python 字典完全指南:从入门到实战
linux·服务器·python
是小蟹呀^10 小时前
【总结】LangChain中如何维持记忆
python·langchain·memory
蓝色的杯子10 小时前
OpenClaw一文详细了解-手搓OpenClaw-4 Tool Runtime
人工智能·python