一、首先,要下载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