Redis数据操作--字符串
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,| 储存文字,储存数字(整数,浮点数),二进制数| 字符串操作-- 设置字符串 set key value # 如果字符串键key已经存在, 那么使用新值覆盖原来的旧值-- 获取字
千家信息网最后更新 2024年11月30日Redis数据操作--字符串
| 储存文字,储存数字(整数,浮点数),二进制数| 字符串操作-- 设置字符串 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。
字符
字符串
二进制
命令
索引
多个
字节
中文
数字
数据
整数
情况
解释
文件
点数
逻辑
长度
两个
范围
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库加密的层次
sql移动系统数据库的表
dm数据库查询命令
数据库保存python对象
计算机网络技术专业的横向发展
湖北应用软件开发排行榜
在数据库中单表修改语法格式
简笔画涂色软件开发
石家庄戴尔服务器回收
360网站服务器
软件开发工具大纲解析
中学网络安全宣传栏图片
服务器有没有做防护能看到么
乌海计算机软件开发
服务器的下行流量是什么
梦想世界港服 服务器
中国网络安全方面的成绩
开讲啦病理数据库完整版
股票软件开发佰金
网络技术信息自主创新标语
苏州应用软件开发平台
影响java服务器性能的指标
剑网3怎么查看当前服务器帮会
社团数据库系统的er图
苹果软件开发收费标准
公共wifi网络安全检测
同望软件开发商
企业合同管理服务器
自行软件开发管理规范
怎么攻击黑彩服务器