您现在的位置是:网站首页> 编程资料编程资料

Python操作Redis数据库的超详细教程_python_

2023-05-26 366人已围观

简介 Python操作Redis数据库的超详细教程_python_

介绍

Redis是一个开源的基于内存也可持久化的Key-Value数据库,采用ANSI C语言编写。它拥有丰富的数据结构,拥有事务功能,保证命令的原子性。由于是内存数据库,读写非常高速,可达10w/s的评率,所以一般应用于数据变化快、实时通讯、缓存等。但内存数据库通常要考虑机器的内存大小。

Redis有16个逻辑数据库(db0-db15),每个逻辑数据库项目是隔离的,默认使用db0数据库。若选择第2个数据库,通过命令 select 2 ,python中连接时可以指定数据库。

常用数据结构

  • 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']

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_co
                
                

-六神源码网