首页 > 数据库 >【Python】redis 模块_Key-Value 数据库

【Python】redis 模块_Key-Value 数据库

时间:2023-06-01 11:11:27浏览次数:46  
标签:name Python self redis Value value key conn

Redis

Redis是一个开源的基于内存也可持久化的Key-Value数据库,采用ANSI C语言编写。

  它拥有丰富的数据结构,拥有事务功能,保证命令的原子性。

  由于是内存数据库,读写非常高速,可达10w/s的评率,所以一般应用于数据变化快、实时通讯、缓存等。

  但内存数据库通常要考虑机器的内存大小。

安装redis数据库

windows : https://github.com/MicrosoftArchive/redis/releases

Linux: https://redis.io/download

已下载: https://files.cnblogs.com/files/blogs/701705/Redis-x64-3.0.504.zip?t=1685587437&download=true

安装redis库

pip install redis

 

启动redis服务

 

 

常用数据结构

  • String  字符串
  • List  列表
  • Hash  哈希
  • Set  集合
  • ZSet  有序集合
  • Bitmap  位图

 

普通连接

import redis

# 方法一
# conn = redis.StrictRedis(host='localhost', port=6379, db=0)

# 方法二
conn = r = redis.Redis(host='localhost', port=6379, decode_responses=True)  

# 设置值 <设置值,默认不存在就创建,存在就修改>
conn.set(key, value)

# 获取值
conn.get(key)

 

redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串

连接池连接

redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销

import redis

pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
c = redis.Redis(connection_pool=pool) 
c.set('key', 'value') # 设置 key对应的值
print(c.get('key')) # 取出键 key对应的值

 

 

常用方法

set方法  设置单个键值

set(name, value, ex=None, px=None, nx=False, xx=False)

 

参数:

  •   name:key名称
  •   value:value值
  •   ex:过期时间(秒),时间到了后redis会自动删除
  •   px:过期时间(毫秒),时间到了后redis会自动删除。ex、px二选一即可
  •   nx:如果设置为True,则只有name不存在时,当前set操作才执行
  •   xx:如果设置为True,则只有name存在时,当前set操作才执行

 

setnx(name, value) : 设置值,只有name不存在时,执行设置操作(添加)

setex(name, time, value): 设置值, time过期时间 单位s <超过时间取值变为None>

psetex(name, time_ms, value): 设置值, tims_ms 过期时间  单位ms <超过时间取值变为None>

 

get方法  获取单个值 

get(name)

参数:

  •   name:key名称

 

mset/mget方法 批量设置/获取多个键值

mset(*args, **kwargs)
mget(keys, *args)

 

示例

# 方法一:
conn.mset(k1="v1", k2="v2")     # 这里k1 和k2 不能带引号,一次设置多个键值对
print(conn.mget("k1", "k2"))    # 一次取出多个键对应的值

# 方法二
dic = {"k1":"v1", "k2":"v2"}
conn.mset(dic)
print(conn.mget(["k1", "k2"]))

 

 

getset 方法 设置新值并获取原来的值

getset(name, value)

 

参数:

  •  name: key名称
  •  value:新设置的值
  •  return: 旧值

 

getrange方法 获取子序列(根据字节获取,非字符)

getrange(key, start, end) 

 

参数:

  • name - Redis 的 name
  • start - 起始位置(字节)
  • end - 结束位置(字节)

 

setrange 方法 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)

setrange(name, offset, value)

 

参数:

  • offset - 字符串的索引,字节(一个汉字三个字节)
  • value - 要设置的值

 

strlen 方法 获取value的长度  

strlen(name)

 

 

 append 在key对应的值后面追加内容  <若所给的键不存在,则设置新值, 返回值为修改后的字符串的长度>

append(key, value)

 

 

 incr int类型的value自增(自减)

incr(self, name, amount=1)

 

 参数:

  • name - Redis的name
  • amount - 自增数(必须是整数)
  • 返回值为:修改后的值,int类型

 

incrbyfloat 浮点数类型的value自增

incrbyfloat(name, amount=1.0)

 

返回值为:浮点数类型float

 

 

示例代码

# -*- coding:utf-8 -*-
import os
import time

import redis
from loguru import logger as logs


class redis_tools:
    """
    Redis 链接工具
    常用方法:
    get(key) 获取
    delete(key) 删除key-value
    set(key, value) 添加
    getset(key, new_value) 获取原值并更新新值
    """

    def __init__(self):
        self.exe = os.popen("redis-server.exe")
        self.host = "localhost"
        self.port = "6379"
        # redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串
        self.conn = redis.StrictRedis(host=self.host, port=self.port, decode_responses=True)

    def __del__(self):
        self.conn.close()
        self.exe.close()

    def conn_redis(self):
        """
        普通连接(相对于连接池来说)
        StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类
        """

        if self.conn.get("No") is None:
            self.conn.set("No", "1")
        if self.conn.get("case") is None:
            self.conn.set("case", "1")

        return self.conn

    def conn_pool(self):
        """
        连接池
        :return:
        """
        pool = redis.ConnectionPool(host=self.host, port=self.port, decode_responses=True)
        self.conn = redis.Redis(connection_pool=pool)
        return self.conn


if __name__ == "__main__":
    """debug"""

    redis_conn = redis_tools().conn_redis()
    logs.debug(redis_conn.getset("case", int(redis_conn.get("case")) + 1))
    logs.debug(redis_conn.getset("No", int(redis_conn.get("No"))+1))
    # cpool = redis_tools().conn_pool()
    # logs.debug(cpool.getset("case", int(cpool.get("case")) + 1))

 

 

 

执行结果

 

 

参考地址:https://zhuanlan.zhihu.com/p/374381314

标签:name,Python,self,redis,Value,value,key,conn
From: https://www.cnblogs.com/phoenixy/p/17445286.html

相关文章

  • Python特点
    1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。2.易于阅读:Python代码定义的更清晰。3.易于维护:Python的成功在于它的源代码是相当容易维护的。4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。......
  • dict 协议——这玩意和redis差不多
    dict协议初体验多说无益,直接上一个用了dict协议的服务让你们来体验一下首先在你的电脑上安装一个telnet客户端Windows和Mac/Linux上应该都有对应的客户端安装好了以后用这个命令来登陆由于编码原因,有些非英文字符在某些系统上可能会乱码telnetdict.org2628之后如果连......
  • python dig trace 功能实现——通过Querying name server IP来判定是否为dns tunnel
    dnstunnel确认方法,查询子域名最终的解析地址:使用方法:pythondig_trace.py "<7cf1e56b67fc90f8caaae86e0787e907>.nsconcreteblock.info"anySelectedrootnameserver: 192.203.230.10['.','info.','nsconcreteblock.info.','<......
  • python compileall 打包发布
    Python工程的编译、合并、打包、发布 确保要发布的包(demo)的根目录中有__main__.py文件,这个是程序执行入口。编译python3-O-mcompilealldemo批量改名.pyc文件find.-name'*.pyc'-execrename's/.cpython-35.opt-1//'{}\;移动.pyc文件find.-name'*.pyc'-execdirmv......
  • Python 中的 requirement.txt
    目录1.如何使用?requirement.txt导出2.环境混用怎么办?Python也需要维护项目相关的依赖包。通常我们会在项目的根目录下放置一个requirement.txt文件,用于记录所有依赖包和它的确切版本号。requirement.txt的内容长这样:alembic==1.0.10appnope==0.1.0astroid==2.2.5attrs=......
  • python~Flask框架建立web应用
    通过python来开发web应用,可以产简化了web开发的流程,功能和函数库也是非常丰富,我们也是开箱即用,目前比较流程的WEB框架就是Flask和django。根据2020年JetBrainsPython开发人员调查,Django和Flask是迄今为止最受欢迎的两个PythonWeb框架。考虑到Web开发行业在过去五年左右的时间......
  • python neo4j将新节点连接到旧标签
    要在Python中使用py2neo将新节点连接到已存在的节点标签,你可以执行以下步骤:导入所需的类和函数:frompy2neoimportGraph,Node,Relationship连接到Neo4j数据库:graph=Graph("bolt://localhost:7687",auth=("username","password"))确保将"username"和&q......
  • 基于Python的混合语言编程
    在基于Python的混合语言编程时,我们可以使用Python与其他编程语言的交互性能,结合各语言的优势,达到更加高效的开发效果。下面是一些常见的实现方案。基于Python的混合语言编程指的是在Python程序中调用其他编程语言的库或函数,并与Python代码进行交互。这个过程需要使用"Cython"(C-E......
  • 基于Python的混合语言编程
    在基于Python的混合语言编程时,我们可以使用Python与其他编程语言的交互性能,结合各语言的优势,达到更加高效的开发效果。下面是一些常见的实现方案。基于Python的混合语言编程指的是在Python程序中调用其他编程语言的库或函数,并与Python代码进行交互。这个过程需要使用"Cython"(C-Exte......
  • 【Python】【Flask】前端调用后端方法
    后端代码:@app.route("/test",methods=['POST','GET'])deftest():return"我是测试的"前端代码:1、使用<a>标签<ahref="{{url_for('test')}}">我是测试</a>这个是最简单的,点击一下,就自动跳转了。2、使用<button>......