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

2022-04-11 00:00:00 多个 操作 命令 返回 数据库中

文章目录
1、Redis 简介
1.1、简述
1.2、特点
1.3、优势
2、CentOS 操作 Redis
2.1、安装启动
2.1.1、安装
2.1.2、改配置
2.1.3、启动
2.2、常用命令
2.2.1、redis-cli
2.2.2、auth命令
2.2.3、PING 命令
2.2.4、Key命令
2.2.5、GET命令
2.2.6、SET命令
2.2.7、DEL命令
3、Python3 操作 Redis
3.1、连接 Redis 的 4 种方式
3.1.1、创建 redis 链接对象
3.1.2、创建 StrictRedis 链接对象
3.1.3、创建 ConnectionPool 连接池 链接对象
3.1.4、创建 ConnectionPool 连接池 链接 url 对象
3.2、常用方法
3.3、源码
3.4、效果图
4、源码分享Github
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、效果图


4、源码分享Github
https://github.com/ShaShiDiZhuanLan/Demo_SQL_Python

相关文章