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))
执行结果
标签:name,Python,self,redis,Value,value,key,conn From: https://www.cnblogs.com/phoenixy/p/17445286.html