|储存文字,储存数字(整数,浮点数),二进制数|字符串操作--设置字符串setkeyvalue#如果字符串键key已经存在,那么使用新值覆盖原来的旧值--获取字符串getkey#返回字符串键key储存的值--仅在键不存在的情况下进行设置setnxkeyvalue#仅在键key不存在的情况下,将键key的值设置为value,效果和setkeyvalueNX一样。NX的意思为"Notexists"。#键不存在并且设置成功时命名返回1;因为键已经存在而导致设置失败时,命令返回0。--同时设置或获取多个字符键的值msetkeyvalue...(keyvalue)mgetkeyvalue...(keyvalue)#多个get,set同时执行一样--一次设置多个不存在的键msetnxkeyvalue[keyvalue...]#只有在所有给定键都不存在的情况下,给所有给定键设置值,效果和同时执行多个setnx一样。如果给定的键至少有一个是存在的,那么msetnx将不执行任何设置操作。--设置新值并返回旧值getsetkeynew-value#将字符串键的值设置为new-value,并返回字符串键在设置新值之前储存的旧值(oldvalue)。--追加内容到字符串末尾appendkeyvalue#将值value推入到字符串键key已储存内容的末尾--返回值得长度strlenkey#返回字符串键key储存的值的长度|键的命名#因为Redis的数据不能同时出现两个同名的键,所以我们通常会使用field1::field2::field3这样的格式来区分同一类型的多个字符串键。最好统一使用符号。如:网站用户对应的邮件地址:huangz::email键,peter::email键来区分。(也可以选用自己喜欢的其他分隔符)|字符串索引(正,负)--范围设置setrangekeyindexvalue#从索引index开始,用value复写(overwrite)给定值key所储存的字符串值。只接受正数索引。命令返回复写之后,字符串的长度--范围取值getrangekeystartend#返回键key储存的字符串值中,位于start和end两个索引之间的内容(闭区间),范围取值的索引可以是正数或者负数。|设置和获取数字#只要储存在字符串键里面的值可以被解释为64位整数,或者IEEE-754的64位浮点数,那么用户就可以对这个字符串键执行对数字值的命令。#10086可以被解释为整数;3.14可以被解释为浮点数;+123可以被解释为整数;1234....(很多)值太大,没办法使用64位整数来储存;2.0e7这样的科学计数法无法被Redis解释;123ABC包含文字,不可以被解释;--增加或者减少数字的值(整数)#对于一个保存着数字的字符串键key,我们可以使用incrby,decrby命令来增加或者减少它的值incrbykeyincrement将key储存的值加上增量,返回key的值decrbykeyincrement将key储存的值减去减量,返回key的值#如果执行过程中key不存在,name命令会线将键key初始化为0,然后再执行增加或者减少操作--增一和减一(整数)incrkey等同于incrbykey1decrkey等同于decrbykey1#因为针对数字值得增一和减一操作非常常见,所以Redis特别创建了这两个值得命令(计数器API的实现)counter.py文件:Counter(name,redis_client),Counter.incr(),Counter.get(),Count.reset(id生成器API的实现)id_generator.py文件:IdGenerator(name,redis_client),IdGenerator.gen()IdGenerator.int()--浮点数的自增和自减#为字符串键key储存的值加上浮点数增量increment,返回key值附:没有响应的decrbyfloat,但可以通过给定负值来达到decrbyfloat的效果。redis>setnum10redis>incrbyfloatnum3.14redis>incrbyfloatnum-2.04注意事项:即使字符串键储存的是数字值,它也可以执行append、strlen、setrange的命令,Redis会先将数字值转换成字符串,然后再执行命令|二进制数据操作--设置和获取二进制数据#set,get,setnx,append等命令设置二进制数据#因为Redis自带的客户端redis_cli没办法方便的设置二进制数据#所以这里使用Python客户端来进行>>importredis>>r=redis.Redis()>>r.set('bits',0b10010100)#将字符串键bits的值设置为二进制10010100>>True>>bin(int(r.get('bits')))#获取字符串键bits储存的二进制值(需要进行转换)>>'0b10010100'>>r.append('bits',0b111)#将0b111(也即是十进制的7)推入到bits已有二进制位的末尾>>4>>bin(int(r.get('bits')))#推入之前的值为0b10010100=148'0b10111001111'#推入之后的值为0b1011100111=1487--二进制位的索引#和储存文字时的索引不同,当字符串键储存的是二进制位时,二进制的索引会从左到右依次递减。--设置二进制位的值setbitkeyindexvalue#将给定索引上的二进制位的值设置为value,命令返回被设置的位原来储存的旧值redis>setbitbits21(integer)0--获取二进制位的值getbitkeyindex#返回给定索引上的二进制位的值--计算值为1的二进制位的数量bitcountkey[start][end]#计算并返回字符串键储存的值中,被设置为1的二进制位的数量start和end参数的设置,来限制一个范围,可以使用负数值。--二进制位的运算bitopoperationdestkeykey[key...]#对一个或多个保存二进制位的字符串键执行位元操作,并将结果保存到destkey上。operation可以是AND,OR,NOT,XORADN:对一个或多个key求逻辑并OR:对一个或者多个key求逻辑或XOR:对一个或多个key求逻辑异或#逻辑运算法则:a^b=(a'andb)or(aandb')NOT:对给定key求逻辑非#命令的返回值为计算结果的字节长度b:01001101b2:10110101redis>bitopandb1-and-b2#00000101(integer)1redis>bitoporb1-or-b2b2#11111101(integer)1redis>bitopxorb1-xor-b2b1b2#11111000(intefer)1redis>bitopnotnoy-b1b1#10110010(integer)1#实现在线人数统计online_count.py#使用Redis缓存热门图片cache=Cache(redis_client)#设置缓存的客户端file=open('reids-logo.jpg','r')#打开文件data=file.read()#读取文件数据file.close()#关闭文件cache.put('redis-logo',data)#以redis-logo为名字,将图片缓存起来cache.get('redis-logo')#取出redis-logo图片的数据|储存中文时的注意事项--strlen,setrange,getrange不适用于中文#一个英文字符只需要使用单个字节来储存,而一个中文字符却需要使用多个字节来储存。#strlen,setrange,getrange都是为英文设置的,它们只会在字符为单个字节的情况下正常工作,而一旦我们储存的是类似中文这样多字节字符,那这三个命令就不再适用了。--strlen示例$redis-cli--raw#在redis-cli中使用中文时,必须打开--raw选项,才能正常显示中文redis>setmsq'世界你好'OKredis>getmsgredis>strlenmsg#这里strlen显示了'世界你好'的字节长度为12字节12#但我们真正想知道的是msg键里面包含多少个字符--setrange和getrange示例setrange和getrange的情况也是类似的:因为这两个命令所使用的索引是根据字节而不是字符来编排的,所以调用setrange或者getrange来处理中文,得不到我们想要的结果。--结论#不要使用strlen、setrange和getrange来处理中文。#例外情况:如果你想知道被储存的中文包含多少个字节,那么可以使用strlen。