温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Redis数据操作--字符串

发布时间:2020-08-04 16:48:56 来源:网络 阅读:669 作者:缪克拉 栏目:关系型数据库
| 储存文字,储存数字(整数,浮点数),二进制数 |  字符串操作 -- 设置字符串     set key value     # 如果字符串键key已经存在,     那么使用新值覆盖原来的旧值 -- 获取字符串     get key     # 返回字符串键key储存的值 -- 仅在键不存在的情况下进行设置     setnx key value     # 仅在键key不存在的情况下,将键key的值设置为value,     效果和set key value NX一样。NX的意思为"Not exists"。     # 键不存在并且设置成功时命名返回1;     因为键已经存在而导致设置失败时,命令返回0。 -- 同时设置或获取多个字符键的值     mset key value...(key value)     mget key value...(key value)     # 多个get,set同时执行一样 -- 一次设置多个不存在的键     msetnx key value [key value...]     # 只有在所有给定键都不存在的情况下,给所有给定键设置值,     效果和同时执行多个setnx一样。如果给定的键至少有一个是     存在的,那么msetnx将不执行任何设置操作。 -- 设置新值并返回旧值     getset key new-value     # 将字符串键的值设置为new-value,并返回字符串键在设置新值     之前储存的旧值(old value)。 -- 追加内容到字符串末尾     append key value     # 将值value推入到字符串键key已储存内容的末尾 -- 返回值得长度     strlen key     # 返回字符串键key储存的值的长度 | 键的命名     # 因为Redis的数据不能同时出现两个同名的键,所以     我们通常会使用field1::field2::field3这样的格式来区分     同一类型的多个字符串键。最好统一使用符号。     如:网站用户对应的邮件地址: huangz::email键,peter::email     键来区分。     (也可以选用自己喜欢的其他分隔符) | 字符串索引(正,负) -- 范围设置     setrange key index value     # 从索引index开始,用value复写(overwrite)给定值key     所储存的字符串值。只接受正数索引。     命令返回复写之后,字符串的长度 -- 范围取值     getrange key start end     # 返回键key储存的字符串值中,位于start和end两个索引     之间的内容(闭区间),范围取值的索引可以是正数或者负数。 | 设置和获取数字     # 只要储存在字符串键里面的值可以被解释为64位整数,或者IEEE-754     的64位浮点数,那么用户就可以对这个字符串键执行对数字值的命令。     # 10086 可以被解释为整数;3.14可以被解释为浮点数;+123可以被解释     为整数;1234....(很多) 值太大,没办法使用64位整数来储存;2.0e7这样     的科学计数法无法被Redis解释;123ABC包含文字,不可以被解释; -- 增加或者减少数字的值(整数)     # 对于一个保存着数字的字符串键key,我们可以使用incrby,decrby命令     来增加或者减少它的值     incrby key increment 将key储存的值加上增量,返回key的值     decrby key increment 将key储存的值减去减量,返回key的值     # 如果执行过程中key不存在,name命令会线将键key初始化为0,     然后再执行增加或者减少操作 -- 增一和减一(整数)     incr key 等同于incrby key 1     decr key 等同于decrby key 1     # 因为针对数字值得增一和减一操作非常常见,所以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>set num 10     redis>incrbyfloat num 3.14     redis>incrbyfloat num -2.04     注意事项:即使字符串键储存的是数字值,它也可以执行append、strlen、     setrange的命令,Redis会先将数字值转换成字符串,然后再执行命令 | 二进制数据操作 -- 设置和获取二进制数据     # set,get,setnx,append等命令设置二进制数据     # 因为Redis自带的客户端redis_cli没办法方便的设置二进制数据     # 所以这里使用Python客户端来进行     >> import redis     >> 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 -- 二进制位的索引     # 和储存文字时的索引不同,当字符串键储存的是二进制位时,二进制的索引     会从左到右依次递减。 -- 设置二进制位的值     setbit key index value     # 将给定索引上的二进制位的值设置为value,     命令返回被设置的位原来储存的旧值     redis> setbit bits 2 1     (integer) 0 -- 获取二进制位的值     getbit key index     # 返回给定索引上的二进制位的值 -- 计算值为1的二进制位的数量     bitcount key [start][end]     # 计算并返回字符串键储存的值中,被设置为1的二进制位的数量     start和end参数的设置,来限制一个范围,可以使用负数值。 -- 二进制位的运算     bitop operation destkey key [key ...]     # 对一个或多个保存二进制位的字符串键执行位元操作     ,并将结果保存到destkey上。     operation可以是AND,OR,NOT,XOR     ADN: 对一个或多个key求逻辑并     OR: 对一个或者多个key求逻辑或     XOR: 对一个或多个key求逻辑异或       # 逻辑运算法则:a^b=(a' and b) or (a and b')     NOT: 对给定key求逻辑非     # 命令的返回值为计算结果的字节长度     b:01001101  b2:10110101     redis> bitop and b1-and-b2  # 00000101     (integer) 1     redis> bitop or b1-or-b2 b2  # 11111101     (integer) 1     redis> bitop xor b1-xor-b2 b1 b2  # 11111000     (intefer) 1     redis> bitop not noy-b1 b1  # 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> set msq '世界你好'     OK     redis> get msg     redis> strlen msg  # 这里strlen显示了'世界你好'的字节长度为12字节     12                           # 但我们真正想知道的是msg键里面包含多少个字符 --setrange和getrange示例     setrange和getrange的情况也是类似的:因为这两个命令所使用的索引     是根据字节而不是字符来编排的,所以调用setrange或者getrange来     处理中文,得不到我们想要的结果。 --结论     # 不要使用strlen、setrange和getrange来处理中文。     # 例外情况:如果你想知道被储存的中文包含多少个字节,那么可以使用     strlen。
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI