博客
关于我
Python 操作 Redis
阅读量:796 次
发布时间:2023-03-07

本文共 2927 字,大约阅读时间需要 9 分钟。

NoSQL数据库与Redis实践指南

NoSQL简介

传统关系型数据库在面对数据规模和复杂数据模型时显现出不足,因此NoSQL数据库应运而生。NoSQL数据库以其易扩展性、高性能和灵活的数据模型著称,成为现代应用开发的理想选择。

NoSQL数据库种类

NoSQL数据库可以分为多种类型,每种类型适用于不同的场景:

  • 列存储:HBase、Cassandra、Hypertable

    • 适用于数据压缩和对特定字段进行高效查询的场景。
  • 文档存储:MongoDB、CouchDB、Riak

    • 支持存储和查询 JSON 格式数据,适合处理半结构化数据。
  • Key-Value 存储:Dynamo、Redis、Tokyo Cabinet

    • 特点是高效的读写性能,适合需要快速存取和查询的场景。
  • 图数据库:Neo4j、HyperGraphDB

    • 适合处理图形关系数据,能够高效存储和检索复杂的网络结构。
  • 对象数据库:db4o、Versant

    • 提供面向对象语言的操作方式,适合处理复杂对象数据。
  • XML 数据库:Berkerey DB XML、BaseX

    • 专注于高效存储和查询 XML 数据。
  • MongoDB、Redis、HBase的应用场景

    • MongoDB:适合存储 JSON 格式数据,支持二级索引,优于传统关系型数据库在文档化存储和查询方面表现突出。尽管 MongoDB 被认为可以部分取代关系型数据库,但在事务和复杂查询方面仍有不足。
    • Redis:作为内存型 Key-Value 系统,擅长读多写少的场景,支持丰富的数据类型和操作,适合作为缓存系统。
    • HBase:适用于处理超大数据量和复杂查询的需求,结合 Hadoop 的优势,提供高可靠性和大数据分析能力。

    Redis基础知识

    Redis部署

    在实际应用中,Redis 的部署需要根据具体需求选择合适的方式:

  • Docker环境
    • 拉取 Redis 镜像并启动:
      docker run --name test -p $(ifconfig eth1|grep inet |awk '{print $2}'):6379 -d docker.io/redis
  • 本地环境
    • 在 Windows 的 PyCharm 环境中,可以通过安装 Redis 模块或使用 pip install redis 方便操作。
  • Redis连接

    Redis 提供了多种连接方式,连接池是其中一种高效的策略:

  • 单连接
    import redisr = redis.Redis(host="xxx.xxx.xxx.xxx", port=11111, decode_responses=True)r.set("name", "zhouyuyao")print(r["name"])
  • 连接池
    import redispool = redis.ConnectionPool(host='xxx.xxx.xxx.xxx', port=11111, decode_responses=True)r1 = redis.Redis(connection_pool=pool)r2 = redis.Redis(connection_pool=pool)r1.set('gender', 'female')print(r1.get('gender'))r2.set('gender', 'male')print(r2.get('gender'))
  • Redis基本命令

    String 类型

  • set 方法

    r.set('food', 'mutton', ex=3)  # ex 表示过期时间(秒)r.set('food', 'beef', px=30)  # px 表示过期时间(毫秒)r.set('fruit', 'watermelon', nx=True)  # nx 表示只在键不存在时才执行r.set('fruit', 'apple', xx=True)  # xx 表示只在键存在时才执行
  • mset 和 mget 方法

    r.mset({'k1': 'v1', 'k2': 'v2'})print(r.mget('k1', 'k2'))
  • getset 方法

    print(r.getset('fruit', 'barbecue'))
  • Hash 类型

  • 单个操作

    r.hset('hash1', 'k1', 'v1')r.hset('hash1', 'k2', 'v2')print(r.hget('hash1', 'k1'))
  • 批量操作

    r.hmset('hash2', {'k2': 'v2', 'k3': 'v3'})print(r.hmget('hash2', 'k2', 'k3'))
  • 取出所有键值对

    print(r.hgetall('hash1'))
  • 取出所有键

    print(r.hkeys('hash1'))
  • 取出所有值

    print(r.hvals('hash1'))
  • 检查键存在性

    print(r.hexists('hash1', 'k3'))
  • 删除键值对

    r.hdel('hash1', 'k1', 'k2')
  • List 类型

  • 基本操作

    r.lpush('list1', 'item1')print(r.lpop('list1'))
  • 范围操作

    r.lrange('list1', 0, -1)
  • Set 和有序 Set

  • Set 集合

    r.sadd('set1', 33, 44, 55, 66)print(r.scard('set1'))
  • 有序 Set

    r.zadd('zset1', 11, 'm1', 22, 'm2', 44)print(r.zcard('zset1'))
  • 其他 Redis 操作

  • 删除操作

    r.delete('gender')
  • 模糊匹配

    print(r.keys('foo*'))
  • 重命名

    r.rename('list5', 'list5-1')
  • 查看所有元素

    print(r.scan('hash2'))
  • 迭代器方式

    for i in r.sscan_iter('set3'):    print(i)
  • Redis 管道(Pipeline)

    Redis 的管道可以在单次请求中执行多个命令,大大提高效率:

    import redisimport timepool = redis.ConnectionPool(host='120.76.214.30', port=11111, decode_responses=True)r = redis.Redis(connection_pool=pool)pipe = r.pipeline()pipe.set('name', 'jack')pipe.set('age', '22')pipe.sadd('exes', 'female')pipe.incr('num')pipe.execute()print(r.get("name"))print(r.get("age"))print(r.get("sex"))

    参考资料

  • 知乎 - 网易云
  • 简书 - 君惜
  • 转载地址:http://nvofk.baihongyu.com/

    你可能感兴趣的文章
    Python Requests接口自动化测试实战
    查看>>
    Python requests模块
    查看>>
    python request与grequests该如何选择
    查看>>
    python request模块
    查看>>
    Python requirements.txt的使用方法
    查看>>
    Python REST(Web 服务)框架的推荐?
    查看>>
    Python rsa 加密
    查看>>
    Python RSA操作
    查看>>
    Python轻松实现统计学中重要的相关性分析
    查看>>
    Python scrapy 常见问题及解决 【遇到的坑】
    查看>>
    Python Seborn热图数据的动态更新
    查看>>
    Python Seborn绘制空白直方图
    查看>>
    Python Selenium - 获取href值
    查看>>
    Python Selenium实现自动化测试及Chrome驱动使用!
    查看>>
    Python Selenium搭建UI自动化测试框架
    查看>>
    Python Selenium模块详解
    查看>>
    Python selenium爬取影评生成词云图
    查看>>
    python selenium自动化测试报告
    查看>>
    Python selenium自动化测试框架实战 —— 登录测试案例
    查看>>
    Python Selenium设计模式 —— POM
    查看>>