python连接redis

时间:2021-12-27 21:03:31

一、首先,要下载redis

pip3 install redis

二、连接redis

import redis
#拿到一个redis的链接
conn=redis.Redis('127.0.0.1',6379)
# print(conn.get('name'))

#redis的字符串操作
#ex过期时间(秒),px过期时间(毫秒)
# conn.set('pwd','123456',ex=5)
#nx,如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
# conn.set('name','egon',nx=True)
#xx,如果设置为True,则当set操作才执行,值存在才能修改,值不存在,不会设置新值
# conn.set('paa','123456',xx=True)
#设置值,只有name不存在时,执行设置操作(添加),如果存在,不会修改
# conn.setnx('name','xuxu')
#设置值,setex(name,time,value)
# conn.setex('token',5,'hnkjashd')
#设置值,psetex(name,time_ms,value)
#time_ms过期时间(数字毫秒)或timedelta对象

#mset(*args,**kwargs)  批量设置值
# conn.mset({'k1':'v1','k2':'v2'})

#mget(keys)批量获取值
# ret=conn.mget({'k1','k2'})
# print(ret)

#getset(name,value)
#设置新值并获取原来的值

#getrange(key,start,end)
#获取子序列(根据字节获取,非字符)
#参数:
#   name
#   start起始位置(字节)
#   end,结束位置(字节)

#setrange(name,offset,value)
#修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
#参数:
#   offset,字符串的索引,字节
#   value,要设置的值

#strlen(name)
#返回name对应值的字节长度(一个汉字三个字节)

#incr(self,name,amount)
#自增name对应的值,当name不存在时,则创建name=amount,否则,则自增
#参数:
#   name
#   amount自增数(必须是整数)
# print(conn.incr('pw',2))

#decr(self,name,amount=1)
#自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减
#参数:
#   name
#   amount,自减数

#append(key,value)
#在redis name对应的值后面追加内容
#参数:
#   key,redis的name
#   value,要追加的字符串

三、连接池与列表的一些操作

# import redis
#拿到一个redis的连接池
# pool=redis.ConnectionPool(host='127.0.0.1',port=6379,max_connections=5)
#从池子中拿一个连接
# conn=redis.Redis(connection_pool=pool)
#这样虽然是从连接池中取连接,但是每次都会建立新的连接池,如果想要同一个连接池,则可以把连接池做成单例

import redis
conn=redis.Redis('127.0.0.1',6379)
# conn.hset('m1','key2','value2')
#redis支持5大数据类型,只支持第一层,也就是说字典的value值,必须是字符串
#如果value值想存字典格式,必须用json转换一下,转成字符串
# conn.hmset('m2',{'key1':'value1','key2':'value2'})

#
# print(conn.hmget('m2','key1','key2'))
# print(conn.hmget('m2',['key1','key2']))

#取出所有的
# print(conn.hgetall('m2'))

# print(conn.hlen('m1'))
# print(conn.hkeys('m2'))
# print(conn.hvals('m2'))
#判断key1是否在m2中
# print(conn.hexists('m2','key1'))
#删除键值对,按key来查询的
# conn.hdel('m2','key1','key2')
# conn.hdel('m2',*['key1','key2'])
#自增,应用场景:统计文章阅读数.key是文章id,value是文章阅读数,有一个阅读者,数字加一,固定一个时间,将数据同步到数据库
# conn.hincrby('m2','key4')

# for i in range(1000):
#     conn.hset('m2','key%s'%i,'value%s'%i)
#指定每次取10条,直到取完
# ret=conn.hscan_iter('m2',count=10)
#当数据量很大的时候,不要用这种方式
#ret=conn.hgetall('m2')
# for i in ret:
#     print(i)

#lpush(name,values)
#在name对应的list中添加元素,每个新的元素都添加到列表的最左边
#如r.lpush('oo',11,22,33),保存顺序为33,22,11
# conn.lpush('l1','11','22','33')
#对应的有rpush
# conn.rpush('l1','x','y','z')
#查看list长度
# print(conn.llen('l1'))

# conn.linsert('l1','before','11','xuxu')
# conn.linsert('l1','after','11','xuxu')

#索引从0开始,第2个值设置成'4444'
# conn.lset('l1',2,'4444')

#*****列表操作,没有getall这个东西,可以通过切片来获取全部
#这个是前闭后闭区间
# print(conn.lrange('l1',0,conn.llen('l1')))
#blpop重点
#删掉一个值,同时可以显示这个值。如果列表中没有值,会一直hang住,实现简单的分布式。
# print(conn.blpop('l1',timeout=3))

#自定义增量迭代
def scan_list(name,count=2):
    index=0
    while True:
        data_list=conn.lrange(name,index,count+index-1)
        if not data_list:
            return
        index+=count
        for item in data_list:
            yield item

四、redis支持的事务

#管道,实现事务操作
#redis对事务的支持其实不是特别好
import redis
pool=redis.ConnectionPool(host='127.0.0.1',port=6379)
coon=redis.Redis(connection_pool=pool)
#拿到一个管道对象
pipe=conn.pipeline(transaction=True)
#开启一次执行多条命令
pipe.multi()
pipe.set('name','lqz')
pipe.set('role','teacher')
pipe.execute()

五、在django中使用redis