redis操作

pycharm安装redis
D:\project\s14  pip install redis

或setting-->project interpreter--->点 +号
#/usr/bin/env python
#!-*-coding:utf-8-*-
importredis,time
#单连
r = redis.Redis(host='192.168.74.20',port=6379,db=6)

#连接池
pool = redis.ConnectionPool(host='192.168.74.20',port=6379,db=6)
r = redis.Redis(connection_pool=pool)

string字符操作
r.set("name","alex")
print(r.get('name'))
r.setnx("name1","jack")#name1不存在时有效 not exist
print(r.get(('name1')))
r.psetex("name",1000,"Lucy")#name已经存在,有效期1000ms
print(r.get("name"))
r.mset({"name2":'lili','age':'88'})#批量设置 以字典的形式
print(r.mget("name2",'age',"name"))#批量获取
print(r.getset('name','kobe_brant'))#设置新值并返回原来的值
print(r.get('name'))
print(r.getrange('name',0,3))#获取name的第03个字符
r.setrange('name2',0,"Alex")#从第0位开始,逐步替换成kathy
print(r.get("name2"))
print(ord("a"))
r.setbit("name2",6,1)
print(r.get("name2"))
print(r.bitcount("name2"))#names2的值转换成二进制有多少个1
print(r.strlen("name"))# name的值的长度
r.set('k1','20')
r.incr('k1',amount=10)#10位自增
print(r.get('k1'))
r.set("k2","1.5")
r.incrbyfloat("k2",amount=2.5)#浮点数 2.5自增
print(r.get("k2"))
print(r.decr("k1",amount=5))#5自减
r.append("k1","00")#k1的值追加00
print(r.get("k1"))

hash哈希操作
r.hset("info","name","mary")#info的哈希数据 hash key value
print(r.hget("info","name"))#info的哈希 name的值
r.hmset("info",{"address":"shenzhen","number":"12556"})#批量设置infohash
print(r.hmget("info","name","address","number"))#批量获取infohash
print(r.hgetall("info"))#获取info的所有值
print(r.hlen("info"))#查看info的长度
print(r.hkeys('info'))#查看infokey
print(r.hvals('info'))#查看infovalue
print(r.hexists('info','name'))#判断info是否存在key
r.hdel('info','address')#删除key
print(r.hgetall('info'))
r.hincrby('info','number',amount=1000)#key对应的value自增1000
print(r.hget('info','number'))
r.hset('info2','num','1.6')
r.hincrbyfloat('info2','num',amount=5.5)#浮点数自增5.5
print(r.hgetall('info2'))
print(r.hscan('info',cursor=0,match='n*',count=2))#光标第0个开始,匹配n开头的key找出2value

list列表操作
r.lpush('addr','shenzhen','nanchang','ganzhou','guangzhou')设定addr列表并传入数据
print(r.lrange('addr',0,-1))#获取列表addr所有数据
r.lpushx('address','xingguo')#列表addr存在时,xingguo添加到最左边,如果不存在也不会报错
print(r.lrange('addr',0,-1))
r.rpush('numbers','1','2','3','4','5')
r.rpushx('numberss','new_1')#列表numbers存在时,new_1添加到最右边
print(r.lrange('numbers',0,-1))
print(r.llen('numbers'))#列表的长度
r.linsert('addr','after','xingguo','gulong')#xinnguo后面插入gulong
r.lset('numbers',10,'6')#10个值重新赋值为6
print(r.lrange('numbers',0,-1))
r.lrem('numbers','1',4)#从第1位开始,删除后面的4
print(r.lrange('numbers',0,-1))
print(r.lpop('numbers'))#列表的左侧删除一个值,删除的值返回屏幕
print(r.lrange('numbers',0,-1))
print(r.rpop('numbers'))#列表的右侧删除一个值并返回屏幕
print(r.lrange('numbers',0,-1))
print(r.lindex('numbers','2'))#获取numbers的第2个值
r.ltrim('numbers',2,4)#保留24位的值,其余的删除
print(r.lrange('numbers',0,-1))
r.rpoplpush('numbers','nums')#numbers的最右侧的值移到nums的最左侧
print(r.lrange('nums',0,-1))
r.blpop('nums',timeout=10)#从左边往右依次删除
print(r.lrange('nums',0,-1))
r.brpop('nums',timeout=10)#从右往左依次删 超时时间为10s
print(r.lrange('nums',0,-1))
r.brpoplpush('numbers','nums',timeout=10)#numbers的最右侧移到nums最左侧,numbers移完了就卡主10s,有数据进numbers就释放在移数据
print(r.lrange('numbers',0,-1))
print(r.lrange('nums',0,-1))

set集合操作
r.sadd("jihe","1","2","2","3")
print(r.scard("jihe"))#查找jihe有多少成员
r.sadd("jihe2",'1','2','6')
print(r.smembers("jihe"))#查找jihe的成员
print(r.sdiff("jihe","jihe2"))#jihe不在jihe2
r.sdiffstore('new_1','jihe','jihe2')#jihe不在jihe2,并且把结果保存到new_1集合里
print(r.smembers("new_1"))
print(r.sinter('jihe','jihe2'))#jihe jihe2的交集
r.sinterstore('new_2','jihe','jihe2')#jihe jihe2交集保存到new_2
print(r.smembers('new_2'))
print(r.sismember('jihe','1'))#判断1是不是jihe的成员
r.smove('jihe2','jihe','6')#jihe2的成员 6移到jihe
print(r.smembers('jihe'))
print(r.spop(r.spop("jihe")))#从集合 jihe随机移除一个成员
print(r.smembers('jihe'))
print(r.srandmember('jihe','2'))#jihe随机获取2个成员
r.srem('jihe','1')#删除jihe的成员1
print(r.smembers('jihe'))
print(r.sunion('jihe','jihe2'))#jihe jihe2的并集
r.sunionstore('new_3','jihe','jihe2')#jihe jihe2的并集保存到new_3
print(r.smembers('new_3'))
print(r.sscan('new_3',0,match=2,count=1))#new_3集合里,从光标0开始,匹配值是2的,只找1

z有序集合操作
r.zadd('shuxue','98','lei','56','alex','85','jack')#shuxue有序集合 98权重 成员lei
print(r.zcard("shuxue"))#查看有多少个成员
print(r.zcount("shuxue",60,90))#查看权重6090有几个成员
r.zincrby("shuxue",1,"lilei")#shuxue集合 lilei成员的权重自增1
print(r.zrange("shuxue",0,-1,withscores=True))#遍历 shuxue成员 列出权重
print(r.zrank("shuxue","lilei"))#查看lilei的排名 权重小到大排 默认0开始
r.zadd("shuxue",10,"kk")#添加kk权重10
r.zrem("shuxue","kk")#删除kk
r.zremrangebyrank("shuxue",0,1)#删除排名第01位的成员
r.zremrangebyscore("shuxue",0,11)#删除第011位权重的成员
print(r.zscore("shuxue","lilei"))#获取lilei的分数
r.zinterstore("score_1","2","yuwen","shuxue")#指定2个有序集合,yuwenshuxue集合,相加保存到 socre_a集合
r.zunionstore("score_b",2,"yuwen","shuxue")#并集相加
print(r.zscan("score_1",0,match="j*"))#找出score_1集合中j开头的成员

其他操作
r.delete("0")#删除任意数据类型
print(r.exists("info"))#1为存在
print(r.keys(pattern="in*"))#获取in开头的name
r.expire("k2",2)#k2数据2秒之后过期删除
print(r.keys())
r.rename("info2","info_2")#将数据info2改名为info_2
r.move("city",1)#将数据city移到db 1
print(r.randomkey())#随机获取一个数据的 name
print(r.type("names"))#判断names的数据类型
print(r.scan(1,match="n*",count=2))#光标从1开始 匹配n后面有字符的数据名字,找出2个这样的数据名字

pipline实现一次请求指定多个命令实例
pool=redis.ConnectionPool(host='192.168.74.20',port=6379,db=5)
r=redis.Redis(connection_pool=pool)

pipe=r.pipeline(transaction=True)
pipe.set('name','lwb')
time.sleep(10)
pipe.set('age','19')
pipe.execute()#管道执行,只有到了这一步才会设置nameage,而不会在sleep之前先设置name

redis订阅发布实例
redishelper.py
importredis
classRedishelper():
   def__init__(self):
       self.__conn=redis.Redis(host='192.168.74.20',db=0)
       self.chan_sub='fm105.8'
       
self.chan_pub='fm105.8'
   def
public(self,msg):
       self.__conn.publish(self.chan_pub,msg)#调用redispublish方法
       
return True
    def
subscribe(self):
        pub=self.__conn.pubsub()# redis的订阅方法pubsub开始订阅
       
pub.subscribe(self.chan_pub)#订阅频道
       
pub.parse_response()#准备接收 再后来调用这句话才是接收
       
returnpub

订阅subscriber
#!/usr/bin/env python
#-*- coding:utf-8-*-
fromredishelperimportRedishelper
obj=Redishelper()#实例化一个redis连接
redis_sub=obj.subscribe()#调用redis订阅方法,也就是打印方法
while True:
    msg=redis_sub.parse_response()#收到就打印,收不到就卡主
   
print(msg[0].decode(),msg[1].decode(),msg[2].decode())

发布publisher
#!/usr/bin/env python
#!-*-coding:utf-8-*-
fromredishelperimportRedishelper
obj=Redishelper()#实例化一个redis连接
obj.public('你好')#调用redispublish功能 命令:publish频道 消息

创新互联是一家集网站建设,大化企业网站建设,大化品牌网站建设,网站定制,大化网站建设报价,网络营销,网络优化,大化网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。


新闻名称:redis操作
分享路径:http://ybzwz.com/article/jiicgo.html