这篇文章主要介绍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)
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)
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)
hincrby(self,amount=1)
#与hash中key对应的值相加,不存在则创建key=amount(amount为整数) print(red.hincrby("name",amount=10))#返回:10
4.list类型:一个name对应一个列表存储。
lpush(self,*values)
rpush(self,*values)
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='*')
expire(self,time)
#为某个name的设置过期时间
rename(self,dst)
#重命名
move(self,db))
# 将redis的某个name移动到指定的db下
randomkey(self)
type(self,name)
# 获取name对应值的类