redis普通连接和连接池、redis字符串类型、redis hash类型、dedis列表类型
redis普通连接和连接池
redis 五大数据类型:
字符串,hash,列表,集合,有序集合
python代码作为客户端
安装模块:pip install redis
普通连接
直接连接
连接池
把池写成单例----》整个项目中,只有这一个实例(对象)---》python 中实现单例的5种方式---》模块导入的方式
POOL = redis.ConnectionPool(host='127.0.0.1', port=6379, max_connections=50)
从pool文件中导入
set
get
getrange
strlen
常用方法:
''' 1 set(name, value, ex=None, px=None, nx=False, xx=False) 2 setnx(name, value) 3 setex(name, value, time) 4 psetex(name, time_ms, value) 5 mset(*args, **kwargs) 6 get(name) 7 mget(keys, *args) 8 getset(name, value) 9 getrange(key, start, end) 10 setrange(name, offset, value) 11 setbit(name, offset, value) 12 getbit(name, offset) 13 bitcount(key, start=None, end=None) 14 bitop(operation, dest, *keys) 15 strlen(name) 16 incr(self, name, amount=1) # incrby 17 incrbyfloat(self, name, amount=1.0) 18 decr(self, name, amount=1) 19 append(key, value) '''
hash 类型,就是咱们python中的字典类型, 数据结构:数据的组织形式 底层存储 数组---》根据key值使用hash函数得到结构,存到数组中
字典的key值必须可hash
字典的key值必须是不可变数据类型
hash 类型无序,跟放的先后顺序无关的
python 的字典是 有序的 字典+列表
必须掌握:
hset
hget
hlen
hexists
hincrby
hscan_iter
所有方法:
''' 1 hset(name, key, value) 2 hmset(name, mapping) 3 hget(name,key) 4 hmget(name, keys, *args) 5 hgetall(name) 6 hlen(name) 7 hkeys(name) 8 hvals(name) 9 hexists(name, key) 10 hdel(name,*keys) 11 hincrby(name, key, amount=1) 12 hincrbyfloat(name, key, amount=1.0) 13 hscan(name, cursor=0, match=None, count=None) 14 hscan_iter(name, match=None, count=None) '''
必须掌握:
lpush
rpush
llen
lrange
lpop
所有方法:
1 lpush(name, values) 2 rpush(name, values) 表示从右向左操作 3 lpushx(name, value) 4 rpushx(name, value) 表示从右向左操作 5 llen(name) 6 linsert(name, where, refvalue, value)) 7 r.lset(name, index, value) 8 r.lrem(name, value, num) 9 lpop(name) 10 rpop(name) 表示从右向左操作 11 lindex(name, index) 12 lrange(name, start, end) 13 ltrim(name, start, end) 14 rpoplpush(src, dst) 15 blpop(keys, timeout) 16 r.brpop(keys, timeout),从右向左获取数据 17 brpoplpush(src, dst, timeout=0)
列表:lrang,把所有值都拿回来 lrang(key,0,-1)
-使用生成器,写一个分批获取列表所有值的生成器
补充
1、redis模块封装了很多方法 ---》跟命令是一一对应的
2、以后如果遇到redis这个模块没有封装的方法,直接使用execute_command
3、strlen(name) 字节长度
len(字符串) 字符串长度
把字符串转成bytes格式,再len
4、web框架(django),我们没有开启多线程,但是具备并发能力,内部一定是开了进程、线程
谁开启的多线程,支持并发?符合wsig协议的web服务器:wsgiref,uwsgi
多个人同时访问一个接口,这个接口操作mysql,有几个人,就会创建几个mysql的连接
django原生是没有使用数据库连接池的
借助于第三方:dbutils