2020/04/15 05-字符串和位操作

在这里插入图片描述
redis的地理数据无非就是坐标,就是在什么范围内的,经度纬度。可以理解为大字典,key当作字符串,因为redis是把它做二进制安全,实际上是当bytes看,能当bytes看就能当字符串,可以把它的key就当做字符串。
value比较丰富,string,列表,set,哈希,每一种使用的时候还是有些差异的

字符串最多能存512M
在这里插入图片描述
我们写了数据字符串进去,我们写了数字,但是它把数字转换成十进制再转化成字符串
在这里插入图片描述
字符串可以做为key也可以做为value,作为value,在设置的时候有很多命令,最常用的就是set和get,这些命令给了字符串类型,其他类型就不用了
set 值进去,只不过可以判断它的存在性,也可以设置过期时间,nx认为不存在,才设置成功,xx存在,才设置成功。
多值设置mset
msetnx 是不存在,多值设定成功, 是个原子操作,一个失败全部失败

在这里插入图片描述
redis如果作为缓存服务器,过期是你必须要考虑的问题,所有的key都应该设置过期时间,使用内存,redis依赖了jemallco模块,内存管理很重要。
过期有两种方式,在什么时间过期,在多少时间后过期

在这里插入图片描述
ttl可以看key的过期时间,所有的key都有过期时间

在这里插入图片描述
key的操作
在这里插入图片描述
getset一边拿一遍设置
mgetset多值版本的,很少用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
虚拟机如果报错,需要把下面的服务启动

在这里插入图片描述
现在redis启动了

在这里插入图片描述
select选择数据库,在某些集群式有要求的,必须使用0号库
在这里插入图片描述
append最后告诉你长度是5,这是追加字符串
在这里插入图片描述
追加字符串,如果存在就追加,不存在等同于set
在这里插入图片描述

在这里插入图片描述
切片操作,可以用getrange,从哪里到哪里,这里所有操作都是前后都包,不是在python里的前包后不包
在这里插入图片描述
这里所有的命令是前后都包

在这里插入图片描述
在这里插入图片描述
可以从不索引处往后超

在这里插入图片描述
偏移5个添加5个就是10,也就是前面填充的都是ascii码0
在这里插入图片描述
所有提到range的东西,都是前包后也包

在这里插入图片描述

扫描二维码关注公众号,回复: 10975418 查看本文章

在这里插入图片描述
提示不是数字,只有数字才存在自增自减。我们塞入数字,先转换成十进制的有符号的一个大整型数在转换成string称为一个key,所以在这里数字和字符串有时候不这么区分

在这里插入图片描述
**说明把这个数字转换成10进制,再转换成字符串,但是自增的时候,尝试把这个数字转换成有符号整形,尝试给你增1 **

在这里插入图片描述
-1到最后又是字符串

在这里插入图片描述
追加方式返回的是字符长度,这里可以字符串和数字间做转化,前提是真的可以转换成数字,不能转一定会抛出异常
在这里插入图片描述
incrby decrby可以做自增自减,一步迈多长,一般网页点击数可以先到redis,最后再想办法进mysql,因为丢个几次无所谓,所以不用写事务,保证数据存到mysql把必须成功
在这里插入图片描述

在这里插入图片描述
库操作里。flush都是危险操作
在这里插入图片描述

redis-cli 可以设置端口主机,还可以设置几号库,select,flushdb是把当前库清理了,flushall是把所有库清理掉,凡是跟删除相关的能不做就不做。
在这里插入图片描述
位图bitmap,实际上就是打标记
在这里插入图片描述
偶数都打标记,用列表,但是这样太浪费空间了,这里打标记就是是与否,用一个位就可以表示了,用字节来表示就很浪费,如果要记录的状态多达几亿种,
在这里插入图片描述
几亿种按照字节来存,太浪费空间了,我们可以按位bit;来组织状态,就用是与否就行,位图就是记状态打标记的问题
在这里插入图片描述
之前看到的的,u:1001 user编号位1001的员工做为key,key都是一般这么写的
在这里插入图片描述
value最多可以放512M字节,一个字节是8位,2^3
在这里插入图片描述
一个字节是8位,23,加起来就是232位
在这里插入图片描述
2的32次方就是43亿个位,也就是redis中,有一个字符串的最大极限,在512M内就可以表现出这么多种状态

在这里插入图片描述
对于某一个key来讲偏移多少设定一个值,偏移多少位,相当于一个字符串在位上写0 还是1的问题,位操作就是0和1的问题
在这里插入图片描述
0可以不写是默认值,直接set key,offset是标准0,不写都是0,一般都是标1的,setrange也是故意偏移多少个,写了东西,全是ascii码0,是真正的0在这里插入图片描述
按位看是一个字节的ascii码0,按位看8位都是0
在这里插入图片描述
getbit 从某一位,偏移从0开始,从某一位上读取的0还是1,位操作是操作某个key
在这里插入图片描述
这个位的position位置,对于某个key来说,出现的0或者1,出现的位置是从左向右找,找到第一次出现的位置,给定start就从start之后找。
一般都是问它第一次出现1的位置在哪里

在这里插入图片描述
bitcount指的是从头开始向后找,start end指的是闭区间,从头开始向后找,找到1出现的次数,测试到的其实是按字节统计的,0-0,其实是第一个字节出现的1的个数
在这里插入图片描述
指的是第一个字节的统计
在这里插入图片描述
0到-1就是闭区间,从头到尾,相当于没写,指的是按位统计有多少个1,不是按字符串统计有多少个1,

在这里插入图片描述
在这里插入图片描述
getbit是按字节算的,其他是按位算的,这里指的是索引为0的位置的,7是,二进制是0111

在这里插入图片描述
会把一个数值转换成10进制,10进制非常大的整数有符号的,然后再转换成字符串,这里是1是因为是ascii码
在这里插入图片描述
这么看就上当了,8位后三位才是,不能按这个算
在这里插入图片描述
这里是16进制的
在这里插入图片描述
37的16进制,凑够8位,最少存一个字节,应该是有5个1
在这里插入图片描述
这样就正好一样,0就是30,1就是31,41,61,这样既有可以进行位计算,我们现在是在字符串上拆开来当位看,一个字符串有512M的字节能看成2^32次方个位,43亿个位必须把它当ascii码来看
在这里插入图片描述

在这里插入图片描述
最后统计下,5个
在这里插入图片描述
这里相当于进一个位,相当于把a61 ,把1抹成0,把上一位写成1,相当于a的ascii码+1就是b,如果想拿字符串做任意操作,可以由你来做,可以支持位操作,你想操作哪位就操作哪位,由你自己来定义
在这里插入图片描述
现在是一个字节
在这里插入图片描述

如果按位统计,0到0如果是闭区间,就是第一位应该是空着的,0,一个7是5,两个7就是10
在这里插入图片描述
在这里插入图片描述
说明是按字节统计的,大多数我们做统计,从哪开始到哪结束,总共有多少个1,统计你打了多少标记1
在这里插入图片描述
除了可以set外,还可以get,还可以count做计数,对一个或多个保存二进制的字符串的key进行位源操作,并且将结果保存在目标key上

位操作

进行位操作这里就是与和或,必须给一个目标key=destkey,后面是有几个key要进行计算

在这里插入图片描述
可以做与,或,非,异或4种操作,异或是相异出1,同或是相同出1
在这里插入图片描述
除了not之外,都可以接受多个key。
字符串按刚才的意思都可以看成是一个512M字节的连续的位,这样一个序列,在这个序列上,如果跟别人进行位操作的时候,比如你只有1个字节,别人有10个字节,就把你当10个字节看,后面 的9个直接全是0

在这里插入图片描述
空的key被看作是包含0的字符串序列,就是给一个key,这个key实际上是没有的,这里就当这个key里的数据为空,为空就是全0,512M字节都是0。
很少拿空的做,因为做位于运算就惨了

在这里插入图片描述
在这里插入图片描述
**bitcont s1求一下全长里的0和1的次数
bitcount s1 0 0这是第一个字节,就是问a里有多少个1
bitcount s1 1 1这是在问b里有多少个1 **

在这里插入图片描述
a 是16进制61,b是62,63正好是c

在这里插入图片描述
1+2永远等于三,这是位或得到的3,因为10,01都是1
在这里插入图片描述
前面的6是0110,0110,1+1,1+1还是1,前面不动就还是6

在这里插入图片描述
后面就展开计算,加完之后就是c
在这里插入图片描述
**通过 这种或运算,让他理解在内存中是什么样子的,如果是c就认为是几个字节,第一个字节有了c,后面513个字节都补0,是从左到右的
**
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
cn有了,写个中进去,有是三个字节

在这里插入图片描述
默认也是用的UTF-8字符集,如果存了2个字节,就是GBK或者unicode
在这里插入图片描述
在这里插入图片描述
做或运算就可以看到是什么了
在这里插入图片描述
中字,gbk和utf-8的1的数目是不一样
在这里插入图片描述
当字符串有了之后,就可以自增自减,还可以做位操作,下面就是应用
在这里插入图片描述

发布了243 篇原创文章 · 获赞 6 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_42227818/article/details/105545565