您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

怎么使用Python操作Redis数据库

2024/3/11 6:12:56发布26次查看
介绍redis采用ansi c语言编写,是一个开源的key-value数据库,可以在内存中进行操作并支持持久化。它拥有丰富的数据结构,拥有事务功能,保证命令的原子性。内存数据库读写非常快,可达10w/s的速率,因此通常用于数据变化快、实时通讯、缓存等应用场景。但内存数据库通常要考虑机器的内存大小。
redis提供了16个逻辑数据库(db0-db15),每个逻辑数据库都是相互独立的,在未指定情况下,默认使用的是db0数据库。在python中连接时,可以通过指定数据库来选择第2个数据库,例如使用命令 select 2。
常用数据结构string-字符串
list-列表
hash-哈希
set-集合
zset-有序集合
bitmap-位图
python中我们使用redis-py库来操作redis数据库,下面将着重介绍。
前提:需安装redis数据库,若没安装点这里
安装pip3 install redis
连接第一种方式:普通
import redis redis_conn = redis.redis(host='127.0.0.1', port= 6379, password= 'your pw', db= 0)
第二种方式:连接池
import redis redis_pool = redis.connectionpool(host='127.0.0.1', port= 6379, password= 'your pw', db= 0)redis_conn = redis.redis(connection_pool= redis_pool)
redis中字符返回值类型都是字节(bytes)类型
string 字符串(键值对)在redis中,一个键对应一个值
1.string set 设置单个键值
set(name, value, ex=none, px=none, nx=false, xx=false)
ex:过期时间(秒),时间到了后redis会自动删除
px:过期时间(毫秒),时间到了后redis会自动删除。ex、px二选一即可
nx:如果设置为true,则只有name不存在时,当前set操作才执行
xx:如果设置为true,则只有name存在时,当前set操作才执行
redis_conn.set('name_2', 'zarten_2')
2.string get 获取单个值
v = redis_conn.get('name_1')print(v)
3.string mset 设置多个键值
mset(*args, **kwargs)
redis_conn.mset(name_1= 'zarten_1', name_2= 'zarten_2')
或者
name_dict = { 'name_4' : 'zarten_4', 'name_5' : 'zarten_5'}redis_conn.mset(name_dict)
4.string mget 获取多个值
mget(keys, *args)
m = redis_conn.mget('name_1', 'name_2')#m = redis_conn.mget(['name_1', 'name_2']) 也行print(m)
5.string getset 给已有的键设置新值,并返回原有的值
getset(name, value)
当所给的键不存在时,会设置其新值,但返回值为none
v = redis_conn.getset('name_1', 'hi')
6.string setrange 根据索引修改某个键的value值
setrange(name, offset, value)
返回值为:修改后的字符串长度
name:键,所给不存在时自动添加
offset:偏移量,以0开始
value:修改的字符或字符串,字符串时以offset向后顺延
length = redis_conn.setrange('name_2', 1, 'zhihu')print(length)
7.string getrange 根据索引获取某个键的部分value值
若所给的键不存在时,返回空值 b''
getrange(key, start, end)
v = redis_conn.getrange('name_4', 0, 2)
结果为:
8.string strlen 获取value的长度
strlen(name)
所给的键不存在时,返回值为0
length = redis_conn.strlen('name_2')
9.string incr int类型的value自增(自减)
同理:自减,decr(name, amount=1)
所给的键对应的值必须是整数或字符串的数值,不然会报错。默认自增幅度为1
incr(name, amount=1)
返回值为:修改后的值,int类型
redis_conn.set('num_2', 2)#redis_conn.set('num_2', '2') 都行 v = redis_conn.incr('num_2')
10.string incrbyfloat 浮点数类型的value自增
incrbyfloat(name, amount=1.0)
返回值为:浮点数类型float
v = redis_conn.incrbyfloat('num_2')
11.string append value后面追加
append(key, value)
若所给的键不存在,则设置新值
返回值为修改后的字符串的长度
length = redis_conn.append('name_5', '666')
结果为:
list 列表在redis中,一个键对应一个列表
12.list lpush 列表左边添加值 rpush(右边)
lpush(name, *values)
value值有多个时,从左到右依次向列表左边添加,类型可以不同
所给的键不存在时,新建一个列表
返回值:列表的大小
v = redis_conn.lpush('zarten', 1,2,3,4,5)#v = redis_conn.lpush('zarten', 6)
13.list lpushx 键存在时,添加到列表左边 rpushx(最右边)
lpushx(name, value)
只有键存在时,才添加。若键不存在则不添加,也不新创建列表
返回值为:列表大小
v = redis_conn.lpushx('zarten_1', 'hehe')
14.list llen 获取所给键的列表大小
llen(name)
v = redis_conn.llen('zarten')
15.list linsert 在列表中间插入新值
linsert(name, where, refvalue, value)
name:键名
where:位置,前面(before)或后面(after)
refvalue:指定哪个值的前后插入
value:插入的新值
返回值:插入后列表的长度,若返回-1,则refvalue不存在
插入前的数据:
v = redis_conn.linsert('zarten', 'after', 6, 'b')
插入后的数据:
16.list lset 列表中通过索引赋值
lset(name, index, value)
返回值:成功 true 否则 false
v = redis_conn.lset('zarten', 2, 'cc')
17.list lindex 通过索引获取列表值
lindex(name, index)
v = redis_conn.lindex('zarten', 2)
18.list lrange 列表中获取一段数据
lrange(name, start, end)
返回值:list类型的一段数据
v = redis_conn.lrange('zarten', 2, 5)
19.list lpop 删除左边的第一个值 rpop(右边)
lpop(name)
返回值:被删除元素的值
v = redis_conn.rpop('zarten')
20.list lrem 删除列表中n个相同的值
lrem(name, value, num=0)
name:键名
value:需删除的值
num:删除的个数 整数表示从左往右 负数表示从右往左 例如:2 -2
返回值:返回删除的个数
v = redis_conn.lrem('zarten', 'hehe', -2)
21.list ltrim 删除列表中范围之外的所有值
ltrim(name, start, end)
返回值:成功 true
v = redis_conn.ltrim('zarten', 5, 10)
22.list blpop 删除并返回列表最左边的值 brpop(最右边)
blpop(keys, timeout=0)
keys:给定的键
timeout:等待超时时间,默认为0,表示一直等待
返回值:tuple类型 形如: (键名, 删除的值) (b'zarten', b'hehe')
v = redis_conn.blpop('zarten')
23.list rpoplpush 一个列表中最右边值取出后添加到另一个列表的最左边 brpoplpush阻塞版本
rpoplpush(src, dst)
brpoplpush(src, dst, timeout=0)为rpoplpush的阻塞版本,timeout为0时,永远阻塞
返回值:取出的元素值
v = redis_conn.rpoplpush('zarten', 'zhihu')
hash 哈希内部存储为各个键值对
24.hash hset 哈希中添加一个键值对
hset(name, key, value)
key存在,则修改,否则添加
返回值:返回添加成功的个数 int
v = redis_conn.hset('zarten', 'age', 10)
25.hash hmset 设置哈希中的多个键值对
hmset(name, mapping)
mapping:dict 类型
返回值:成功 true
v = redis_conn.hmset('zarten', {'sex':1, 'tel':'123'})
26.hash hmget 获取哈希中多个键值对
hmget(name, keys, *args)
返回值:值的列表 list 形如: [b'1', b'123'] <class 'list'>
v = redis_conn.hmget('zarten', ['sex', 'tel'])#v = redis_conn.hmget('zarten', 'sex', 'tel') 也ok
27.hash hget 获取指定key的值
hget(name, key)
v = redis_conn.hget('zarten', 'age')
28.hash hgetall 获取哈希中所有的键值对
hgetall(name)
返回值:dict类型
v = redis_conn.hgetall('zarten')
29.hash hlen 获取哈希中键值对的个数
hlen(name)
v = redis_conn.hlen('zarten')
30.hash hkeys 获取哈希中所有的键key
hkeys(name)
返回值:list类型
v = redis_conn.hkeys('zarten')
31.hash hvals 获取哈希中所有的值value
hvals(name)
返回值:list类型
v = redis_conn.hvals('zarten')
32.hash hexists 检查哈希中是否有某个键key
hexists(name, key)
返回值:有 true ;否则 false
v = redis_conn.hexists('zarten', 'b')
33.hash hdel 删除哈希中键值对(key-value)
hdel(self, name, *keys)
返回值:int 删除的个数
v = redis_conn.hdel('zarten', 'age')
34.hash hincrby 自增哈希中key对应的value值(必须整数数值类型)
hincrby(name, key, amount=1)
若所给的key不存在则创建,amount默认增加1,可以为负数
返回值:int 增加后的数值
v = redis_conn.hincrby('zarten', 'sex', -3)
35.hash hincrbyfloat 自增浮点数 同上hincrby
hincrbyfloat(name, key, amount=1.0)
36.hash expire 设置整个键的过期时间
expire(name, time)
time:秒,时间一到,立马自动删除
v = redis_conn.expire('zarten', 10)
37.hash hscan 增量迭代获取哈希中的数据
hscan(name, cursor=0, match=none, count=none)
name:redis的name
cursor:游标(基于游标分批取获取数据)
match:匹配指定key,默认none 表示所有的key
count:每次分片最少获取个数,默认none表示采用redis的默认分片个数
返回值:tuple 类型 ;(扫描位置,所有dict数据)
v = redis_conn.hscan('zarten')
38.hash hscan_iter 返回hscan的生成器
hscan_iter(name, match=none, count=none)
参照上面函数hscan
v = redis_conn.hscan_iter('zarten')for i in v: print(type(i), i)
set 集合集合中的元素不重复,一般用于过滤元素
39.set sadd 添加元素到集合中
sadd(name, *values)
若插入已有的元素,则自动不插入
v = redis_conn.sadd('zarten', 'apple', 'a', 'b', 'c')
40.set scard 返回集合中元素的个数
scard(name)
v = redis_conn.scard('zarten')
41.set smembers 获取集合中的所有元素
smembers(name)
返回值:set类型,形如: {b'a', b'apple', b'c', b'b'}
v = redis_conn.smembers('zarten')
42.set srandmember 随机获取一个或n个元素
srandmember(name, number=none)
name:键名
number:一个或n个,默认返回一个。若返回n个,则返回list类型
返回值:返回一个值或一个列表
v = redis_conn.srandmember('zarten', 2)
43.set sismember 判断某个值是否在集合中
sismember(name, value)
返回值:true 在 false 不在
v = redis_conn.sismember('zarten', 'appl')
44.set spop 随机删除并返回集合中的元素
spop(name)
v = redis_conn.spop('zarten')
45.set srem 删除集合中的一个或多个元素
srem(name, *values)
返回值:返回删除的个数 int
v = redis_conn.srem('zarten', 'c', 'a')
46.set smove 将一个集合中的值移动到另一个集合中
smove(src, dst, value)
若value不存在时,返回false
返回值:成功 true
v = redis_conn.smove('zarten', 'fruit', 'apple')
47.set sdiff 返回在一个集合中但不在其他集合的所有元素(差集)
sdiff(keys, *args)
在keys集合中,不在其他集合中的元素
返回值:set类型 {b'2', b'4', b'3', b'1'}
v = redis_conn.sdiff('zarten', 'fruit')
48.set sdiffstore 上面的sdiff的返回值(差集)保存在另一个集合中
sdiffstore(dest, keys, *args)
在keys集合中,不在其他集合中的元素保存在dest集合中
dest:新的集合,设置的新集合,旧集合会被覆盖
返回值:int 返回作用的个数
v = redis_conn.sdiffstore('left', 'zarten', 'fruit')
49.set sinter 返回一个集合与其他集合的交集
sinter(keys, *args)
返回值:set类型
v = redis_conn.sinter('zarten', 'fruit')
50.set sinterstore 返回一个集合与其他集合的交集,并保存在另一个集合中
sinterstore(dest, keys, *args)
dest:另一个集合,设置新集合,旧集合元素会被覆盖
v = redis_conn.sinterstore('left', 'zarten', 'fruit')
51.set sunion 返回一个集合与其他集合的并集
sunion(keys, *args)
v = redis_conn.sunion('zarten', 'fruit')
52.set sunionstore 返回一个集合与其他集合的并集,并保存在另一个集合中
sunionstore(dest, keys, *args)
dest:另一个集合,设置新集合,旧集合元素会被覆盖
返回值:新集合元素个数
v = redis_conn.sunionstore('left', 'zarten', 'fruit')
zset 有序集合有序集合比集合多了一个分数的字段,可对分数升序降序
53.zset zadd 有序集合中添加元素
zadd(name, *args, **kwargs)
添加元素时需指定元素的分数
返回值:返回添加的个数
2种方式如下:
v = redis_conn.zadd('zarten', 'a', 3, 'b', 4)#v = redis_conn.zadd('zarten', c= 5, d= 6)
54.zset zcard 返回有序集合中元素个数
zcard(name)
v = redis_conn.zcard('zarten')
55.zset zcount 返回有序集合中分数范围内的元素个数
zcount(name, min, max)
包含min max
返回值:个数 int
v = redis_conn.zcount('zarten', 3, 5)
56.zset zscore 返回有序集合中指定某个值的分数
zscore(name, value)
返回值:float 类型的分数;形如: -5.0 <class 'float'>
v = redis_conn.zscore('zarten', 'zhi')
57.zset zincrby 增加有序集合中某个值的分数
zincrby(name, value, amount=1)
value:若存在,则增加其amount分数;若不存在,则增加新值以及对应的分数
amount:增加的值,可以为负数
返回值:增加后的分数 float类型 ;形如: -5.0 <class 'float'>
v = redis_conn.zincrby('zarten', 'zhi', -5)
58.zset zrem 删除有序集合中的某个或多个值
zrem(name, *values)
返回值:返回删除的个数
v = redis_conn.zrem('zarten', 'zhi', 'a')
59.zset zremrangebyrank 删除有序集合元素根据排序范围
zremrangebyrank(name, min, max)
返回值:删除个数 int
v = redis_conn.zremrangebyrank('zarten', 1, 3)
删除后如下图:
60.zset zremrangebyscore 删除有序集合根据分数范围
zremrangebyscore(name, min, max)
返回值:删除个数 int
v = redis_conn.zremrangebyscore('zarten', 8, 15)
61.zset zrank 返回某个值在有序集合中的分数排名(从小到大) zrevrank(从大到小)
zrank(name, value)
返回值:value在name中的分数排名值,分数从小到大排名,从0开始
v = redis_conn.zrank('zarten', 'b')
返回值如下图:
62.zset zrange 返回有序集合分数排序的一段数据
zrange(name, start, end, desc=false, withscores=false, score_cast_func=float)
name:redis的name
start:有序集合索引起始位置(非分数)
end:有序集合索引结束位置(非分数)
desc:排序规则,默认按照分数从小到大排序
withscores:是否获取元素的分数,默认只获取元素的值
score_cast_func:对分数进行数据转换的函数
返回值:list类型 [(b'tt', 10.0), (b'd', 6.0), (b'c', 5.0)] <class 'list'>
v = redis_conn.zrange('zarten', 1, 3, true, true, score_cast_func=float)
结果如图:
bitmap 位图bitmap中存放二进制的位0和1,类似位数组。典型应用是基于redis的布隆过滤器。
属于string字符串数据结构,固bit 映射被限制在 512 mb 之内(2^32)
63.bitmap setbit 设置位图的值
setbit(name, offset, value)
name:redis键名
offset:偏移量,大于等于0。当偏移伸展时,空白位置以0填充
value:二进制值 0或1
v = redis_conn.setbit('zarten_2', 100, 1)
64.bitmap getbit 返回位图指定偏移量的值
getbit(name, offset)
返回0或1
v = redis_conn.getbit('zarten_2', 101)
65.bitmap bitcount 返回位图中二进制为1的总个数
bitcount(key, start=none, end=none)
start end指定开始和结束的位,默认整个位图
v = redis_conn.bitcount('zarten_2', 100, 1000)
全局函数全局函数对任何数据结构都适用
66.全局函数 delete 删除redis中一个或多个键的所有数据
delete(*names)
返回值:int 删除的个数
v = redis_conn.delete('name', 'name_1')
67.全局函数 exists 判断redis中是否存在某个键
exists(name)
返回值:存在true;反之false
v = redis_conn.exists('name')
68.全局函数 rename 重命名redis中键名
rename(src, dst)
返回值:成功true
v = redis_conn.rename('name_2', 'name_100')
69.全局函数 move 移动redis中某个键所有数据到某个db中
move(name, db)
返回值:成功true
v = redis_conn.move('name_100', 12)
70.全局函数 randomkey 随机获取redis中某个键名
randomkey()
返回值:形如: b'name_55'
v = redis_conn.randomkey()
71.全局函数 type 查看redis中某个键数据结构类型
type(name)
返回值:字符串(字节形式) 形如: b'hash'
none (key不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
v = redis_conn.type('name_4')
以上就是怎么使用python操作redis数据库的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product