zoukankan      html  css  js  c++  java
  • redis数据库

    redis简介

    REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
    Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
    它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

    redis数据结构

    String: 字符串
    Hash: 散列
    List: 列表
    Set: 集合
    Sorted Set: 有序集合
    在阅读本教程前,你需要了解基本的数据结构。

    redis的基本命令

    启动redis,

    在redis的1安装目录下输入以下指令启动redis,或者将路径添加到环境变量直接输入以下指令1

    redis-server.exe
    

    连接本地redis

    初始化的链接不需要密码

    redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
    

    python连接redis

    # 导入redis,需要先用pip下载包
    import redis
    
    # 创建连接redis的实例化对象
    conn = redis.Redis(host = 'localhost',port = 6379,decode_responses=True)
    

    创建redis实例化对象时host是redis服务器的ip地址,port是运行的端口号,decode_responses参数是为了python在获取数据时会自动解码,否则返回的数据都是字节类型

    python下使用redis的常用指令

    给redis添加数据

    conn.set(key,value)
    

    实例:

    conn.set('name','kingfan')        // 生成键值对给redis
    ```set和get指令
    set指令是将数以以下形式存储:
    {
        key :value
    }
    conn.get(key)
    

    conn.get(name) //根据key拿到kingfanq

    ![](https://img2018.cnblogs.com/blog/1456462/201812/1456462-20181221102343345-205712213.png)
    
    hset指令:
    存储格式
    {
        key:{key,value}
    }
    获取指令hget
    ![](https://img2018.cnblogs.com/blog/1456462/201812/1456462-20181221104319187-806954381.png)
    
    注意{
        key:{key:value}
    }
    value如果还想存python的字典应该要先Json存储
    
    ## redis连接池
    连接池的作用是保持与数据库的连接,而不是每次想要获取数据就重新连接数据库,而且保持一定数量的连接池可以提高程序的并发性
    使用连接池
    

    impot redis

    poor = redis.ConnectionPool(host ='localhost',port=6379,max_connections=5,decode_responses=True) //max_connections最大连接数
    conn = redis.Redis(connection_pool=poor) //从连接池中获取一个连接

    
    ## redis的事务
    大家知道redis的所有操作都是原子性操作,所以每个指令都是要么成功要么不成功,在redis的事务中,会将一堆指令先加载到缓存队列,然后去批量执行,包含在事务中的所有操作因为都是原子性操作,所以在事务中的指令,成功的指令就是成功了,失败的指令就是失败了,互不影响,这个mysql的事务是相反的,本质就是因为每个redis的操作都是原子性的
    

    import redis

    conn = redis.Redis(host='localhost',port=6379,decode_responses=True)

    初始化事务对象

    pipe = conn.pipeline() //开启事务
    try:
    pipe.set('kingfan','hello1')
    pipe.set('kingfan2','hello6','她她她')
    pipe.set('kingfan3','hello3')
    pipe.execute() //执行事务
    except Exception as e:
    print(e)
    print(conn.mget(['kingfan', 'kingfan2', 'kingfan3']))

    可以运行上面的程序看到, pipe.set('kingfan2','hello6','她她她')这个操作正常是会报错的,但在是事务执行前都是先加载到缓存中,是没被运行的,只有当   pipe.execute() 被调用时,事务中的操作才会被执行,这时,我们捕获异常,然后再去获取,三条数据,发现只有第二条指令的数据没有插入成功
    
    ## redis的发布者和订阅者
    发布者
    

    import redis
    conn =redis.Redis(host = 'localhost',port=6379,decode_responses=True)
    conn.publish('name','kingfan')

    
    订阅者
    

    import redis
    conn = redis.Redis(host='localhost',port=6379,decode_responses=True)
    pubsub = conn.pubsub()
    pubsub.subscribe('name')

    while True:
    print('监听name')
    msg = pubsub.parse_response()
    print(msg)
    print('name更新')

    发布与监听创建发布者与消息的键值对,并不是创建了该数据,订阅者根据发布者的key监听发布者发布消息,获取发布者的信息
  • 相关阅读:
    PHP ceil() 函数
    PHP Array 函数
    php中的include()的使用技巧
    [观察者模式]在游戏开发中的应用
    [策略模式]在游戏开发中的应用
    使用EA将源码转化为类图
    PAT 1013 数素数 (20)
    PAT 1034 有理数四则运算(20)
    PAT 1033 旧键盘打字(20)
    PAT 1032 挖掘机技术哪家强(20)
  • 原文地址:https://www.cnblogs.com/Kingfan1993/p/10154051.html
Copyright © 2011-2022 走看看