python读写操作redis数据库
  AnyLlCIhvKpr 2023年11月12日 26 0

python读写操作redis数据库

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

Windows下安装部署redis:

(1)为python安装支持库:

pip install redis

 

(2)连接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())

 

(3)对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))

如图:

python读写操作redis数据库

 

更新操作:

    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')

python读写操作redis数据库

 

 lpush 列表左侧追加值

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

python读写操作redis数据库

 

 

 

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

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

python读写操作redis数据库

 

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)

python读写操作redis数据库

 

根据索引位置插入新值:

    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)

python读写操作redis数据库

 

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

    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'

python读写操作redis数据库

 


以下注意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}']

python读写操作redis数据库

 

 

删除键值对

    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)

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   27   0   0 redis用户
  TEZNKK3IfmPf   2024年05月31日   30   0   0 dataredis
  TEZNKK3IfmPf   2024年05月31日   27   0   0 awkredis
  TEZNKK3IfmPf   2024年05月31日   36   0   0 python开发语言
AnyLlCIhvKpr