python连接读写操作redis的完整代码实例

 更新时间:2023年01月07日 08:55:30   作者:zhangphil  
这篇文章主要介绍了python连接读写操作redis的完整代码实例,包括redis连接与读写操作,redis-sentinel哨兵模式下Python操作redis,redis-cluster(集群)模式下Python操作redis,需要的朋友可以参考下

python读写操作redis数据库

redis有16个逻辑数据库(编号db0到db15),每个逻辑数据库数据是隔离的,默认db0。选择第n个逻辑数据库,命令select n ,python连接时可指定数据库编号(0~15)。

为python安装支持库:

pip install redis

连接redis

第一种方式,直连:

import redis

def redis_opt():
redis_conn = redis.Redis(host='127.0.0.1', port=6379, password='', db=6)
print(redis_conn.client_id())

第二种方式,连接池:

import redis

def redis_opt():
redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password='', db=6)
redis_conn = redis.Redis(connection_pool=redis_pool)
print(redis_conn.client_id())

对redis数据库进行读写操作

import redis

def redis_opt():
redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password='', db=6)
redis_conn = redis.Redis(connection_pool=redis_pool)

key = 'data'
my_data = {"name": 'fly', 'year': 2022}
redis_conn.set(key, str(my_data))
print(redis_conn.get(key))

如图:

更新操作:

key = 'data'
my_data = {'name': 'fly', 'year': 2022}
redis_conn.set(key, str(my_data))

my_data = {'name': 'phil', 'year': 2020}
redis_conn.getset(key, str(my_data))

追加操作:

redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password='', db=6)
redis_conn = redis.Redis(connection_pool=redis_pool)

key = 'data'
redis_conn.set(key, 'hello,')
redis_conn.append(key, 'world')

 lpush 列表左侧追加值

key = 'data'
redis_conn.lpush(key, 2020, 2021, 2022)
redis_conn.lpush(key, 2023)

如果换成右侧追加,相当于尾部追加:

key = 'data'
redis_conn.rpush(key, 2020, 2021, 2022)
redis_conn.rpush(key, 2023)

lpushx(name, value),如果键name存在时候才追加,否则不会追加。

根据特定值位置位置插入新值

key = 'data'
redis_conn.rpush(key, 2020, 2021, 2022)
redis_conn.rpush(key, 2023)
print(redis_conn.llen(key)) # 列表长度

# AFTER,之后。BEFORE之前。
v = redis_conn.linsert(name=key, where='AFTER', refvalue=2020, value='1999')
print(v)

根据索引位置插入新值:

key = 'data'
redis_conn.rpush(key, 2020, 2021, 2022)
redis_conn.rpush(key, 2023)
print(redis_conn.llen(key)) # 列表长度

v = redis_conn.lset(name=key, index=2, value='1999')
print(v)

根据列表索引起始位置获取值

key = 'data'
redis_conn.rpush(key, 2020, 2021, 2022)
redis_conn.rpush(key, 2023)
print(redis_conn.llen(key)) # 列表长度

v = redis_conn.lrange(name=key, start=1, end=3)
print(v)

输出:

4
[b'2021', b'2022', b'2023']

删除列表左侧的一个值

lpop(name)

从左向右删除列表中n个相同的值

lrem(name, value, num)

如果是从右向作,需要把num的值改为负数即可,比如-3,从右向左删掉3个重复的value。

删除列表范围之外所有值

ltrim(name, start, end)

列表中最右边的值删除并放入到新列表中的最左边

rpoplpush(src, dst)

brpoplpush(src, dst, timeout=0)

存储哈希Map键值

key = 'data'
redis_conn.hset(key, 'name', 'fly')
redis_conn.hset(key, 'year', 2022)
print(redis_conn.hget(key, 'year'))

输出:

b'2022'

以下注意name和key的区分。name是作为在redis中的“大键”,key是在redis中存储名为name的数据块中的键。

存储打包的哈希键值对

my_name = 'my_data'
my_key = 'my_key'
val = {'name': 'fly', 'year': 2022}
json_val = json.dumps(val)
redis_conn.hset(name=my_name, key=my_key, value=json_val)
print(redis_conn.hgetall(my_name))
print(redis_conn.hkeys(my_name))
print(redis_conn.hvals(my_name))

输出:

{b'my_key': b'{"name": "fly", "year": 2022}'}
[b'my_key']
[b'{"name": "fly", "year": 2022}']

删除键值对

my_name = 'my_data'
my_key = 'my_key'
val = {'name': 'fly', 'year': 2022}
json_val = json.dumps(val)
redis_conn.hset(name=my_name, key=my_key, value=json_val)
print(redis_conn.hgetall(my_name))
print(redis_conn.hkeys(my_name))
print(redis_conn.hvals(my_name))
print(redis_conn.hexists(name=my_name, key=my_key))
print(redis_conn.hdel(my_name, my_key)) #删除my_name数据块里面的my_key键值对

设置键值的过期时间,超过时间就自动删除

my_name = 'my_data'
my_key = 'my_key'
val = {'name': 'fly', 'year': 2022}
json_val = json.dumps(val)
redis_conn.hset(name=my_name, key=my_key, value=json_val)
print(redis_conn.hgetall(my_name))
redis_conn.expire(name=my_name, time=5) # 超过5秒自动删除。

全局查询redis中是否有以name存储的数据块

v = redis_conn.exists('my_name')

重命名redis中的键名

rename(src, dst)

把某一键值移动到另外的redis逻辑库

move(name, db)

类型判断

type(name)

redis-sentinel哨兵模式下Python操作redis代码实例

#redis-sentinel连接
'''
启动redis服务端(6390主库):
redis-server msconf/redis-6390.conf
redis-server msconf/redis-6391.conf
redis-server msconf/redis-6392.conf
redis-server msconf/redis-6393.conf
启动哨兵功能:
redis-sentinel redis_sentinel/redis-sentinel_26390.conf
redis-sentinel redis_sentinel/redis-sentinel_26391.conf
redis-sentinel redis_sentinel/redis-sentinel_26392.conf
'''

## 导入redis sentinel包
from redis.sentinel import Sentinel
#指定sentinel的地址和端口号(连接哨兵)
sentinel=Sentinel([('192.168.160.135',26390),('192.168.160.135',26391),('192.168.160.135',26392)],socket_timeout=0.1)
#测试,获取以下主库和从库的信息:mymaster是哨兵配置文件中的指定的监控主库
print(sentinel.discover_master('mymaster'))#主库信息
print(sentinel.discover_slaves('mymaster'))#从库信息

##配置读写分离
#写节点:主库
master=sentinel.master_for('mymaster',password=123456,socket_timeout=0.1)#注意主库设置了安全模式有密码
print(master)
#读节点:从库
slave=sentinel.slave_for('mymaster',password=123456,socket_timeout=0.1)#注意从库设置了安全模式有密码
print(slave)

#读写分离测试
print(master.dbsize())
print(master.keys())
print(slave.keys())
master.set('name4',4)
print(slave.keys())
print(slave.get('name4'))

redis-cluster(集群)模式下Python操作redis代码实例

# redis-cluster集群:https://github.com/Grokzen/redis-py-cluster
# pip install redis-py-cluster
from rediscluster import StrictRedisCluster
#是少要链接集群中的一台数据库,可以是多台,防止有的数据库会挂掉
startup_nodes = [{"host": "192.168.160.135", "port": "7000"}, {"host": "192.168.160.135", "port": "7001"},
{"host": "192.168.160.135", "port": "7002"}, {"host": "192.168.160.135", "port": "7003"},
{"host": "192.168.160.135", "port": "7004"}, {"host": "192.168.160.135", "port": "7005"} ]
rc = StrictRedisCluster(startup_nodes=startup_nodes,password=123456, decode_responses=True)
rc.set('name1',1234)
print(rc.keys())
print(rc.dbsize())
print(rc.get('name1'))

以上就是python连接读写操作redis的完整代码实例的详细内容,更多关于python读写redis的代码实例的资料请关注脚本之家其它相关文章!,希望大家以后多多支持脚本之家!

相关文章

  • python 错误处理 assert详解

    python 错误处理 assert详解

    这篇文章主要介绍了python 错误处理 assert详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python selenium浏览器复用技术的使用

    python selenium浏览器复用技术的使用

    本文主要介绍了python selenium浏览器复用技术的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python3控制路由器——使用requests重启极路由.py

    Python3控制路由器——使用requests重启极路由.py

    通过本文给大家介绍Python3控制路由器——使用requests重启极路由.py的相关知识,代码写了相应的注释,以后再写成可以方便调用的模块,感兴趣的朋友一起学习吧
    2016-05-05
  • 使用PyCharm配合部署Python的Django框架的配置纪实

    使用PyCharm配合部署Python的Django框架的配置纪实

    这篇文章主要介绍了使用PyCharm配合部署Python的Django框架的配置纪实,PyCharm是一款强大的Python的IDE,需要的朋友可以参考下
    2015-11-11
  • 使用Python的turtle模块画图的方法

    使用Python的turtle模块画图的方法

    这篇文章主要介绍了使用Python的turtle模块画图的方法,涉及turtle简介,运动命令,画笔控制命令的分享,以及具体操作的步骤,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Python3 解释器的实现

    Python3 解释器的实现

    在本篇内容中小编给大家总结了关于Python3解释器的用法以及相关知识点,需要的朋友们学习下。
    2021-06-06
  • numpy的squeeze函数使用方法

    numpy的squeeze函数使用方法

    这篇文章主要介绍了numpy的squeeze函数使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python正则表达式指南 推荐

    Python正则表达式指南 推荐

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化正则表达式,这些主题请查看其他教程。
    2018-10-10
  • Python数据分析numpy文本数据读取索引切片实例详解

    Python数据分析numpy文本数据读取索引切片实例详解

    这篇文章主要为大家介绍了Python数据分析numpy文本数据读取索引切片实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Python的json.loads() 方法与json.dumps()方法及使用小结

    Python的json.loads() 方法与json.dumps()方法及使用小结

    json.loads() 是一个非常有用的方法,它允许你在处理 JSON 数据时,将其转换为 Python 数据类型,以便于在代码中进行操作和处理,这篇文章给大家介绍Python的json.loads() 方法与json.dumps()方法及使用小结,感兴趣的朋友一起看看吧
    2024-03-03

最新评论