加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python redis模块详解

发布时间:2020-12-20 10:12:29 所属栏目:Python 来源:网络整理
导读:这篇文章主要介绍redis的使用。 简单介绍下redis,一个高性能key-value的存储系统,支持存储的类型有string、list、set、zset和hash。在处理大规模数据读写的场景下运用比较多。 ? 1.连接Redis数据库: 1)直接连接 import redisred = redis.Redis(host='loc

这篇文章主要介绍redis的使用。

简单介绍下redis,一个高性能key-value的存储系统,支持存储的类型有string、list、set、zset和hash。在处理大规模数据读写的场景下运用比较多。

?

1.连接Redis数据库:

1)直接连接

import redis

red = redis.Redis(host='localhost',port=6379,db=1)

?

2)连接池连接

连接池的原理是,通过预先创建多个连接,当进行redis操作时,直接获取已经创建的连接进行操作,而且操作完成后,不会释放,用于后续的其他redis操作,这样就达到了避免频繁的redis连接创建和释放的目的,从而提高性能。redis模块采用ConnectionPool来管理对redis server的所有连接。

复制代码

import redis

pool = redis.ConnectionPool(host='localhost',db=1)
red = redis.Redis(connection_pool=pool)
red.set('key1','value1')
red.set('key2','value2')

复制代码

?

2.String类型存取:

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

复制代码

#在Redis中设置值,默认不存在则创建,存在则修改
red.set('key','value')
#参数:
#     set(name,xx=False)
#     ex,过期时间(秒)
#     px,过期时间(毫秒)
#     nx,如果设置为True,则只有key不存在时,当前set操作才执行,同#setnx(key,value)
#     xx,如果设置为True,则只有key存在时,当前set操作才执行

setex(self,time) #设置过期时间(秒) psetex(self,time_ms,value) #设置过期时间(豪秒)

复制代码

mset(self,*args,**kwargs)

#批量设置值
red.mget({"key1":'value1',"key2":'value2'})

get(self,name)

#获取某个key的值
red.get('key1')

mget(self,keys,*args)

#批量获取
red.mget("key1","key1")

strlen(self,name)

#返回key对应值的字节长度(一个汉字3个字节)
red.strlen("key")

append(name,value)

#在name对应的值后面追加内容
red.set("key","value")
print(r.get("key"))    #输出:'value'
r.append("key","one")
print(r.get("key"))    #输出:'valueone'

?

3.Hash类型:一个name对应一个dic字典来存储。

hset(self,key,value)

#name对应的hash中设置一个键值对(不存在,则创建,否则,修改)
red.hset("name","key","value")

hget(self,key)

red.hset("name","value")
#在name对应的hash中根据key获取value
print(red.hget("name","key"))#输出:'value'

hgetall(self,name)

#获取name所有键值对
red.hgetall("name")

hmset(self,mapping)

#在name对应的hash中批量设置键值对,mapping:字典
dic={"key1":"aa","key2":"bb"}
red.hmset("name",dic)
print(red.hget("name","key2"))#输出:bb

hmget(self,*args)

#在name对应的hash中批量获取键所对应的值
dic={"key1":"aa",dic)
print(red.hmget("name","key1","key2"))#输出:['aa','bb']

hlen(self,name)

#获取hash键值对的个数
print(red.hlen("name"))#输出:2

hkeys(self,name)

#获取hash中所有key
red.hkeys("name")

hvals(self,name)

#获取hash中所有value
red.hvals("name")

hexists(self,key)

#检查name对应的hash是否存在当前传入的key
print(red.hexists("name","key1"))#输出:Ture

hdel(self,*keys)

#删除指定name对应的key所在的键值对,删除成功返回1,失败返回0
print(red.hdel("name","key1"))#输出:1

hincrby(self,amount=1)

#与hash中key对应的值相加,不存在则创建key=amount(amount为整数)
print(red.hincrby("name",amount=10))#返回:10

?

4.list类型:一个name对应一个列表存储。

lpush(self,*values)

#元素从list的左边添加,可以添加多个
red.lpush('name','元素1','元素2')

rpush(self,*values)

#元素从list右边添加,可以添加多个
red.rpush('name','元素2')

lpushx(self,*values)

#当name存在时,元素才能从list的左边加入
red.lpushx('name','元素1')

rpushx(self,*values)

#当name存在时,元素才能从list的右边加入
red.rpushx('name','元素1')

?llen(self,name)

#name列表长度
red.llen('name')

linsert(self,where,refvalue,value)

复制代码

# 在name对应的列表的某一个值前或后插入一个新值
red.linsert("name","BEFORE","元素2","元素1.5")#在列表内找到第一个"元素2",在它前面插入"元素1.5"

#参数:
#     name: redis的name
#     where: BEFORE(前)或AFTER(后)
#     refvalue: 列表内的值
#     value: 要插入的数据

复制代码

lset(self,index,value)

#对list中的某一个索引位置重新赋值
red.lset("name","abc")

lrem(self,num=0)

复制代码

#删除name对应的list中的指定值
red.lrem("name","元素1",num=0)

# 参数:
#    name:  redis的name
#    value: 要删除的值
#    num:   num=0 删除列表中所有的指定值;
#           num=2 从前到后,删除2个;
#           num=-2 从后向前,删除2个'''

复制代码

lpop(self,name)

#移除列表的左侧第一个元素,返回值则是第一个元素
print(red.lpop("name"))

lindex(self,index)

#根据索引获取列表内元素
print(red.lindex("name",1))

lrange(self,start,end)

#分片获取元素
print(red.lrange("name",-1))

ltrim(self,end)

#移除列表内没有在该索引之内的值
red.ltrim("name",2)

?

5.set类型:集合是不允许重复的列表

sadd(self,*values)

#给name对应的集合中添加元素
red.sadd("name","aa")
red.sadd("name","aa","bb")

scard(self,name)

#获取name对应的集合中的元素个数
red.scard("name")

smembers(self,name)

#获取name对应的集合的所有成员
red.smembers('name')

sdiff(self,*args)

复制代码

#在第一个name对应的集合中且不在其他name对应的集合的元素集合
red.sadd("name","bb")
red.sadd("name1","bb","cc")
red.sadd("name2","cc","dd")

print(red.sdiff("name","name1","name2"))#输出:{aa}

复制代码

sismember(self,value)

#检查value是否是name对应的集合内的元素

smove(self,src,dst,value)

#将某个元素从一个集合中移动到另外一个集合

spop(self,name)

#从集合的右侧移除一个元素,并将其返回

?

6.其他常用操作

flushdb(self,asynchronous=False)

#清空当前db中的数据,默认是同步。若开启异步asynchronous=True,会新起一个线程进行清空操作,不阻塞主线程

flushall(self,asynchronous=False)

#清空所有db中的数据,默认是同步。异步同flushdb

delete(self,*names)

#根据name删除redis中的任意数据类型

exists(self,name)

#检查redis的name是否存在

keys(self,pattern='*')

#根据* ?等通配符匹配获取redis的name

expire(self,time)

#为某个name的设置过期时间

rename(self,dst)

#重命名

move(self,db))

# 将redis的某个name移动到指定的db下

randomkey(self)

#随机获取一个redis的name(不删除)

type(self,name)

# 获取name对应值的类

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读