程序下载http://down.51cto.com/data/2440789:


点击客户端进行连接测试,出现下图说明测试成功


语法:

redis的字符串操作set(key,value,ex=None,px=None,nx=False,xx=False)在redis中设置值,默认,不存在则创建,存在则修改参数:ex:过期时间(秒)px:过期时间(毫秒)nx:如果设置为True,则只有key不存在时。当前set才会执行xx:如果设置为True,则只有key存在时,当前set才会执行setnx(key,value)设置值,只有key不存在时,执行设置操作setex(key,value,time)设置值参数:time:过期时间单位是秒psetex(key,value,time)设置值参数:time:过期时间单位是毫秒mset(*args,**kwargs)批量设置值如:msetk1v1k2v2或者mset(k1='v1',k2='v2')getset(key,value)设置新值并返回原来的值getrange(key,start,end)获取子序列(根据字节获取,非字符)参数:key:redis的keystart:起始位置(字节)end:结束位置(字节)如:“张三”,0-3表示“张”setrange(key,offset,value)修改字符串内容。从指定字符串索引开始向后替换(新值太长时,则向后添加)参数:offset:字符串的索引,字节(一个汉字三个字节)value:要设置的值setbit(key,offset,value)对key对应的二进制表示的位进行操作参数:key:redis的keyoffset:位的索引(将值变为二进制后再进行索引)value:值只能是0或1例:如果在redis中有一个对应:n1="foo"那么字符串“foo”的二进制表示为:011001100110111101101111如果执行setbit('n1',7,1)则就会将第七位设置为1那么最终二进制则变成011001110110111101101111即“goo”代码实现127.0.0.1:6379>setn1fooOK127.0.0.1:6379>setbitn171(integer)0127.0.0.1:6379>getn1"goo"127.0.0.1:6379>用处:如QQ统计在线人数,并且看谁在线:让1代表在线。0代表不在线offset代表用户对应的ID如果用户上线,则将该ID设置为1用bitcount统计有多少个1,即有多少用户在线用getbit查看用户是否在线代码实现:127.0.0.1:6379>setbitQQ551(integer)0127.0.0.1:6379>setbitQQ10001(integer)0127.0.0.1:6379>bitcountQQ(integer)2127.0.0.1:6379>getbitQQ55(integer)1127.0.0.1:6379>getbitQQ66(integer)0127.0.0.1:6379>append(key,value)在redis,key对应的值后追加参数:key:redis的keyvalue:要追加的字符串例子:127.0.0.1:6379>getzhang"san"127.0.0.1:6379>appendzhangsan(integer)6127.0.0.1:6379>getzhang"sansan"127.0.0.1:6379>delkey删除keyhash如果需要存一个班级的姓名等信息127.0.0.1:6379>hsetinfokeyduwentao(integer)1127.0.0.1:6379>hsetinfoage20(integer)1127.0.0.1:6379>hsetinfoid1(integer)1127.0.0.1:6379>hgetallinfo1)"key"2)"duwentao"3)"age"4)"20"5)"id"6)"1"127.0.0.1:6379>hgetinfoage"20"127.0.0.1:6379>hkeysinfo#查看有多少key1)"key"2)"age"3)"id"127.0.0.1:6379>hvalsinfo#查看有多少value1)"duwentao"2)"20"3)"1"hmsetkeyfieldvalue[fieldvalue...]用法:127.0.0.1:6379>hmsetlik1v1k2v2k3v3OK127.0.0.1:6379>hgetallli1)"k1"2)"v1"3)"k2"4)"v2"5)"k3"6)"v3"hgetkeyfield在key对应的hash中获取根据key获取valuehmgetkeyfield[field...]用法:127.0.0.1:6379>hmgetlik1k21)"v1"2)"v2"hlen(key)获取有几个keyhkeys(key)获取key对应的hash中所有key的值hvals(key)获取key对应的hash中所有的value值hexistskeyfield检查key对应的hash是否存在当前传入的keyhincrbykeyfieldincrement自增加127.0.0.1:6379>hincrbyinfoage1(integer)21127.0.0.1:6379>hincrbyinfoage1(integer)22hscankeycursor[MATCHpattern][COUNTcount]起到一个过滤的作用如hscaninfo0match*a*列表:lpush(从左边放)和rpush(从右边放)127.0.0.1:6379>lpushkeys1zhangsanlisiwanger(integer)3127.0.0.1:6379>LRANGEkeys10-11)"wanger"2)"lisi"3)"zhangsan"127.0.0.1:6379>RPUSHkeys2zhangsanliziwanger(integer)3127.0.0.1:6379>LRANGEkeys20-11)"zhangsan"2)"lizi"3)"wanger"127.0.0.1:6379>lpushxkeyvalue在key对应的list中添加元素,只对key已经存在时,值添加到列表的最左边rpushxkeyvalue在key对应的list中添加元素,只对key已经存在时,值添加到列表的最右边llenkeykey对应的list元素个数LINSERTkeyBEFORE|AFTERpivotvalue在key对应的列表的某一个值前或后插入一个新值参数:key:redis的keyBEFORE|AFTER:在什么或者后privot:标杆值,即在他前后插入数据value:要插入的数据lsetkeyindexvalue对key对应的list中的某一个索引位置进行重新赋值参数:key:redis的key值index:list的索引位置value:要设置的值lremkeycountvalue在key对应的list中删除指定的值参数:key:redis的keyvalue:要删除的值count:count=0:删除列表中所有的指定的值count=2:从前向后,删除两个count=-2:从后向前,删除两个lpopkey在key对应的列表的左侧获取第一个元素并在列表中删除,返回值则是第一个元素。lindexkeyindex在key中对应的列表中根据索引获取列表元素LRANGEkeystartstop在key对应的列表分片获取数据参数:key:redis的keystart:索引的起始位置end:索引的结束位置LTRIMkeystartstop在key对应的列表中移除没有在startstop索引之间的值参数:key:redis的keystart:索引的起始位置stop:索引的结束位置RPOPLPUSHsourcedestination从一个表中取出最右边的元素,同时将其添加至另一个列表的最左边参数:source:要取出数据的列表的keydestination:要添加数据的列表的keyBRPOPLPUSHsourcedestinationtimeout从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧参数:source:取出并移除元素的列表对应的keydestination:要插入元素的列表对应的keytimeout:当source对应的列表中没有数据时,阻塞等待其数据的超时时间(秒),0表示永远堵塞集合:saddkeymember[member...]key对应的集合中添加元素(无重复,无序)如:127.0.0.1:6379>saddnames3zhangsanzhangsanlisilisi33(integer)3127.0.0.1:6379>SMEMBERSnames3#获取所有值1)"3"2)"lisi"3)"zhangsan"scardkey获取key对应的集合中的元素个数sdiffkey[key...]在第一个key对应的集合中且不在其他key对应的集合中的元素sdiffstoredestinationkey[key...]在第一个key对应的集合中且不在其他key对应的集合中的元素,把他添加到destination里SINTERkey1[key2]返回给定所有集合的交集SINTERSTOREdestinationkey1[key2]返回给定所有集合的交集并存储在destination中SISMEMBERkeymember判断member元素是否是集合key的成员SMEMBERSkey返回集合中的所有成员SMOVEsourcedestinationmember将member元素从source集合移动到destination集合SPOPkey移除并返回集合中的一个随机元素SRANDMEMBERkey[count]返回集合中一个或多个随机数SREMkeymember1[member2]移除集合中一个或多个成员SUNIONkey1[key2]返回所有给定集合的并集SUNIONSTOREdestinationkey1[key2]所有给定集合的并集存储在destination集合中SSCANkeycursor[MATCHpattern][COUNTcount]迭代集合中的元素有序集合:ZADDkeyscore1member1[score2member2]向有序集合添加一个或多个成员,或者更新已存在成员的分数ZCARDkey获取有序集合的成员数ZCOUNTkeyminmax计算在有序集合中指定区间分数的成员数ZINCRBYkeyincrementmember有序集合中对指定成员的分数加上增量incrementZINTERSTOREdestinationnumkeyskey[key...]计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合key中ZLEXCOUNTkeyminmax在有序集合中计算指定字典区间内成员数量ZRANGEkeystartstop[WITHSCORES]通过索引区间返回有序集合成指定区间内的成员ZRANGEBYLEXkeyminmax[LIMIToffsetcount]通过字典区间返回有序集合的成员ZRANGEBYSCOREkeyminmax[WITHSCORES][LIMIT]通过分数返回有序集合指定区间内的成员ZRANKkeymember返回有序集合中指定成员的索引ZREMkeymember[member...]移除有序集合中的一个或多个成员ZREMRANGEBYLEXkeyminmax移除有序集合中给定的字典区间的所有成员ZREMRANGEBYRANKkeystartstop移除有序集合中给定的排名区间的所有成员ZREMRANGEBYSCOREkeyminmax移除有序集合中给定的分数区间的所有成员ZREVRANGEkeystartstop[WITHSCORES]返回有序集中指定区间内的成员,通过索引,分数从高到底ZREVRANGEBYSCOREkeymaxmin[WITHSCORES]返回有序集中指定分数区间内的成员,分数从高到低排序ZREVRANKkeymember返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序ZSCOREkeymember返回有序集中,成员的分数值ZUNIONSTOREdestinationnumkeyskey[key...]计算给定的一个或多个有序集的并集,并存储在新的key中ZSCANkeycursor[MATCHpattern][COUNTcount]迭代有序集合中的元素(包括元素成员和元素分值)


安装python 模块

pip3 install redis


Python 线程池连接redis

普通连接redis



管道:一次可以执行多个命令


importredispool=redis.ConnectionPool(host='127.0.0.1',port=6379)#连接池#r=redis.Redis(host='127.0.0.1',port=6379)r=redis.Redis(connection_pool=pool)pipe=r.pipeline(transaction=True)r.set('foo','bar')r.set('zhangsan','heheheh')pipe.execute()


实现订阅和发布

服务端(发布端):

importredispool=redis.ConnectionPool(host="127.0.0.1",port='6379')rc=redis.Redis(connection_pool=pool)whileTrue:mes=str(input("请输入要发布的内容:"))rc.publish('fm100.5',mes)

客户端(订阅端):

importredispool=redis.ConnectionPool(host="127.0.0.1",port='6379')rc=redis.Redis(connection_pool=pool)ps=rc.pubsub()#打开ps.subscribe(['fm100.5'])#调频foriteminps.listen():#监听ifitem['type']=='message':data=item['data']print(data.decode('utf-8'))

微信公众号