zoukankan      html  css  js  c++  java
  • Redis在Python中的基础应用

    一、Redis简介

      redis是一个key-value的nosql产品,和Memcached类似,但它储存的value类型相对更加丰富,包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hash,与memcached一样,为保证效率,数据都是缓存在内存库中,区别的是redis会周期性的把内存中的数据写入到硬盘中(被称为数据持久化),同时由于redis支持的是value类型众多,也被称为结构化的nosql数据库

        NoSQL泛指非关系型的数据库

    非关系型数据库和关系型数据库的差别:
    • 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高
    • 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展
    • 关系型数据库的优势:复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询;事务支持使得对于安全性能很高的数据访问要求得以实现
    • 对于这两类数据库,对方的优势就是自己的弱势,所以如何利用好这两种数据库的强项,使其相互补充,是一个很重要的需要好好设计的问题

    二、连接方式

      Redis有三种连接方式:普通连接、 连接池、管道连接。

      使用连接池的优点:connection pool连接池来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。

      管道连接:当频繁的存储获取Redis数据库中的数据时,可以使用Redis的pipeline(管道)功能,将多个相互没有依赖关系的读写操作,如:下一步执行的Redis操作的开启需要获取上一步操作执行结束的数据。放到队列中,使用pipeline对象一次性执行,可以很大程度上减少与数据库建立TCP连接的性能损耗。(使用场景:用户浏览历史, 注册登录短信验证码,图片验证码)

    三、在Python中Redis的基本使用

      1、普通连接

      

    import redis
    
    # 普通连接Redis
    conn = redis.Redis(host='192.168.10.22', port=6379, password='dai123')
    conn.set('Myjob', 'Tester1', ex=60)       # set中前两个参数为key-value的键值对,  ex为过期时间,单位为秒
    job = conn.get('Myjob')
    print(job)

    运行结果:

    python中:

    Redis服务器中:

      2、连接池

      

    import redis
    
    # 连接池
    pool = redis.ConnectionPool(host='192.168.10.22', port=6379, password='dai123')
    conn = redis.Redis(connection_pool=pool)
    conn.set('area', 'shenzhen')
    area = conn.get('area')
    print(area)

      3、管道连接

      Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应

      使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作 (可以跳转了解原子操作)。必须执行execute()函数后才执行该操作

    import redis
    
    # 管道连接
    pool = redis.ConnectionPool(host='192.168.10.22', port=6379, password='dai123')
    conn = redis.Redis(connection_pool=pool)
    pipe = conn.pipeline(transaction=True)   # 原子操作
    pipe.get('Myjob')
    pipe.get('area')
    pipe.execute()
  • 相关阅读:
    背包问题
    標準差、方差、正太分佈公式
    C#實現XML的增刪查改
    XML的基礎結構
    微信小程序入門學習資料鏈接
    微信小程序wxml無法實現頁面跳轉的問題
    088_jsp转成成servle所在的路径?
    075_jsp如何debug?
    028_Mybatis返回int类型为空时报错 attempted to return null from a method with a primitive return type (int)
    087_数据库类型
  • 原文地址:https://www.cnblogs.com/jsondai/p/11430241.html
Copyright © 2011-2022 走看看