原创

非关系型数据库 之 Key-Value数据库 Redis的使用(Python3)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://shazhenyu.blog.csdn.net/article/details/91875849

1、Redis 简介

1.1、简述

Redis是一个开源的 C语言编写的Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

1.2、特点

Redis 与其他 Key - Value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

1.3、优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

2、CentOS 操作 Redis

2.1、安装启动

2.1.1、安装

Redis下载地址:http://download.redis.io/releases/

以4.0.9版本为例:

wget http://download.redis.io/releases/redis-4.0.9.tar.gz

解压安装包并安装:

tar xzf redis-4.0.9.tar.gz
cd redis-4.0.9
make -j grep processor /proc/cpuinfo | wc -l
make install

注:通过”grep processor /proc/cpuinfo | wc -l”查看系统最大cpu核心数,通过最大核数编译可以更有效的利用CPU资源。

2.1.2、改配置

修改配置文件 etc/redis.conf :

  • 如果允许外网访问,记得修改绑定的IP,把 bind 127.0.0.1 改为:
bind 0.0.0.0
  • 如果修改端口就把 port 6379 进行修改,如果开多个端口,就生成多个配置文件,把每个配置文件的端口进行修改即可
  • 如果配置文件启动多个端口的配置文件,别忘了修改这里(默认的是6379):
pidfile /var/run/redis_6379.pid

如果想给redis加密码,再配置文件种添加 ( 如果密码是123456 ) ,默认是没有密码的:

requirepass 123456

2.1.3、启动

redis-server redis.conf 

如果多个端口就开启多个redis-server+配置文件即可

2.2、常用命令

2.2.1、redis-cli

利用一下命令在服务器打开redis

redis-cli -p 端口

例如:
在这里插入图片描述

2.2.2、auth命令

进入后,auth + 密码,如果输入正确,就可以进行后续操作了,例如:
在这里插入图片描述

2.2.3、PING 命令

用于检测 redis 服务是否启动,例如:
在这里插入图片描述

2.2.4、Key命令

用于正则匹配检测符合条件的有哪些key,例如:
在这里插入图片描述

2.2.5、GET命令

get key 获取指定 key 的值,例如:
在这里插入图片描述

2.2.6、SET命令

set key value ,设置指定 key 的值,例如:
在这里插入图片描述

2.2.7、DEL命令

del key,设置指定 key 的值,例如:
在这里插入图片描述

3、Python3 操作 Redis

3.1、连接 Redis 的 4 种方式

在这里插入图片描述

3.1.1、创建 redis 链接对象

import redis

def connectRedis(h,pt,pw):
    try:
        r = redis.Redis(host=h, port=pt, password=pw) # host后的IP是需要连接的ip,本地是127.0.0.1或者localhost
        print("Redis connection successful...")
        return r
    except:
        print("Redis connection refused...")
        return "error"

if __name__ and "__main__":
    redis = connectRedis('47.105.196.123', 6379, "QNzs@.root_1347908642")

3.1.2、创建 StrictRedis 链接对象

from redis import StrictRedis

def connectRedis(h,pt,pw):
    try:
        r = StrictRedis(host=h, port=pt, password=pw)
        print("Redis connection successful...")
        return r
    except:
        print("Redis connection refused...")
        return "error"

if __name__ and "__main__":
    redis = connectRedis('47.105.196.123', 6379, "QNzs@.root_1347908642")

3.1.3、创建 ConnectionPool 连接池 链接对象

from redis import StrictRedis, ConnectionPool

def connectRedis(h,pt,pw):
    try:
        pool = ConnectionPool(host=h, port=pt, password=pw)
        r = StrictRedis(connection_pool=pool)
        print("Redis connection successful...")
        return r
    except:
        print("Redis connection refused...")
        return "error"

if __name__ and "__main__":
    redis = connectRedis('47.105.196.123', 6379, "QNzs@.root_1347908642")

3.1.4、创建 ConnectionPool 连接池 链接 url 对象

from redis import StrictRedis, ConnectionPool

def connectRedis(h,pt,pw):
    try:
        url = "redis://:"+pw+"@"+h+":"+str(pt)+"/0"
        pool = ConnectionPool.from_url(url)
        r = StrictRedis(connection_pool=pool)
        print("Redis connection successful...")
        return r
    except:
        print("Redis connection refused...")
        return "error"

if __name__ and "__main__":
    redis = connectRedis('47.105.196.123', 6379, "QNzs@.root_1347908642")

3.2、常用方法

示例 说明 结果
redis.dbsize() 获取当前数据库中key的数目 返回长度
redis.keys(’*’) 获取所有符合规则的key 返回列表
redis.exists(key) 判断一个key是否存在 返回 1 存在
redis.set(‘name’, ‘value’) 给数据库中key为name的string赋予值value 返回 True 成功
redis.get(‘name’) 返回数据库中key为name的string的value 返回 name 的值
redis.type(‘XY_KEY_Name’) 判断key类型 返回类型
redis.rename(‘name1’, ‘name2’) 将name1重命名为name2 返回 True 成功
redis.delete(‘name’) 删除名为name的key 返回 1 成功
redis.flushdb() 删除当前选择数据库中的所有key 返回 True 成功
redis.flushall() 删除所有数据库中所有的key 返回 True 成功

3.3、源码

把上述的常用方法都写到一个python3的源代码中,如下:

def connectRedis(h,pt,pw):
    try:
        # import redis
        # r = redis.Redis(host=h, port=pt, password=pw) # host后的IP是需要连接的ip,本地是127.0.0.1或者localhost

        # from redis import StrictRedis
        # r = StrictRedis(host=h, port=pt, password=pw)

        from redis import StrictRedis, ConnectionPool
        # pool = ConnectionPool(host=h, port=pt, password=pw)
        url = "redis://:"+pw+"@"+h+":"+str(pt)+"/0"
        print(url)
        pool = ConnectionPool.from_url(url)
        r = StrictRedis(connection_pool=pool)

        print("Redis connection successful...")
        return r
    except:
        print("Redis connection refused...")
        return "error"

if __name__ and "__main__":
    redis = connectRedis('47.105.196.123', 6379, "QNzs@.root_1347908642")
    if redis != "error":
        # 获取当前数据库中key的数目
        dbSize = redis.dbsize()
        print("dbSize:", dbSize)

        # 获取所有符合规则的key
        list = redis.keys('XY_KEY_20181229083554_*')
        print("Rule-compliant size:", len(list))
        print("Rule-compliant key:", list)

        # 判断一个key是否存在
        key = "XY_KEY_20181229083554_L400000093"
        isExists = redis.exists(key)
        if isExists == 1:
            print("Is exists:", key)
        else:
            print("Non-existent:", key)

        # 给数据库中key为name的string赋予值Sha Shi Di
        redis.set('XY_KEY_Name', 'Sha Shi Di')

        # 返回数据库中key为name的string的value
        name = redis.get('XY_KEY_Name')
        print("Name:", name)

        # 判断key类型
        type = redis.type('XY_KEY_Name')
        print("Type:", type)

        # 将XY_KEY_Name重命名为XY_KEY_NickName
        rename_result = redis.rename('XY_KEY_Name', 'XY_KEY_NickName')
        print("Rename_result:", rename_result)

        # 删除XY_KEY_NickName这个key
        delete_result = redis.delete('XY_KEY_NickName')
        if delete_result == 1:
            print("Delete_result successful")
        else:
            print("Delete_result refused")

        # 删除当前选择数据库中的所有key
        # delete_current_db_key_result = redis.flushdb()
        # print("Delete_current_db_key_result:", delete_current_db_key_result)

        # 删除所有数据库中所有的key
        # delete_all_db_key_result = redis.flushall()
        # print("Delete_all_db_key_result:", delete_all_db_key_result)

3.4、效果图

在这里插入图片描述

文章最后发布于: 2019-06-13 17:06:17
展开阅读全文
0 个人打赏

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览