Redis_字符串建_BitMap 操作_3|学习笔记

简介: 快速学习 Redis_字符串建_BitMap 操作_3

开发者学堂课程【Redis 数据库入门Redis_字符串建_BitMap 操作_3】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/15/detail/47


Redis_字符串建_BitMap 操作_3


内容介绍:

一、命令

二、位操作


一、命令

设置某一位上得值

  • SETBIT key offset value
  • Offset 偏移量,从0开始
  • 获取某一位上得值
  • GETBIT key offset

offset 偏移量后面跟 value 的值

在127.0.0.1:6379>SET temp 0b011设置 temp 键,二进制的011然后SETBIT temp 0,0的位置,就是第一个1的位置。将1的位置设置为默认值,因没有,所以要补全参数(ERR wrong number of argument for ‘setbit’ command)。

接着127.0.0.1:6379>SETBIT temp 0 1,在127.0.0.1:6379>SET temp 0b011这里,0已经是1,所以设置为1没有任何反应,返回( integer )0。接着127.0.0.1:6379>SETBIT temp 0 0,在0的位置设置为0,返回( integer )1,表示为设置好了。偏移量是从右开始,因为是二进制计数,所以从右开始。

接着127.0.0.1:6379> get temp,“0b011”没有变,返回客户端检查

代码如下:

r,set(‘testbin’,0b01100010)

print r, get(‘testbin’)

r,set(0b0011,0b01100011)

print r.get(0b0011)

print r.get(3)

print r.get(‘3’)

以上去还有待考证。

返回指定值0或者1在指定区间上第一次出现的位置

  • BITPOS key bit [start] [end]

代码如下:

BITPOS key bit [start] [end]

summary: Find first bit set or clear in a string

since:2.8.7

group:string

以上后面在进行操作。

set str1 ab

setbit str1 6 1

setbit str1 7 0

get str1

这个结果是什么?

set str1 ab 这个例子表示操作 ab。

image.png

如果用二进制表示 ab,a为01100001,b 为01100010。将 ab 字符串值赋给 s1,如果进行 SETBIT 进行设置字符串对应的二进制。

观察是否有变化:

127.0.0.1:6379>set s1 ab

ok

127.0.0.1:6379>SETBIT s1 0 1

(integer)0

127.0.0.1:6379>get s1

“\xe1b”

127.0.0.1:6379>set s1 ab

ok

127.0.0.1:6379>SETBIT s1 -1 1

(error)ERR bit offset is not an integer or out of range(-1超出范围)

127.0.0.1:6379>SETBIT s1 0 1

(integer)0

127.0.0.1:6379>get s1

“\xe1b”

如果 ab 是二进制表示分别为01100001,01100010。如果进行 SETBIT 就是 out set为0的位置设为1,就显示为“\xe1b”的效果。无法显示字母。(就是学会将 ab 对应的二进制对应的位数进行设置)

接着再试 bitpos:

127.0.0.1:6379> set s1 ab

ok

127.0.0.1:6379>bitpos s1 1 0 -1 (1出现的位置,从开始到结束)

(integer)1

127.0.0.1:6379>bitpos s1 0 0 -1(bitpos,0在里面出现的第一个位置,)

(integer)0

0出现的位置是0,1出现的位置是1。对应的是a的二进制第一和第二位的位置。


二、位操作

1、operation 可以是AND(与)、OR(或)、NOT(非)、XOR(异或)这四种操作中的任意一种

统计指定位区间上值为1的个数    (BITCOUNT是用来统计二进制里1的个数)

BITCOUNT key [start] [end]

从左向右从0开始,从右向左从-1开始,注意官方start,end是位,测试后是字节

image.png

对于上图来说,首先设置ab是s1,然后 bitcount s1,进行数二进制里1的个数。1的个数为6个。

代码如下:

127.0.0.1:6379>set s1 ab

ok

127.0.0.1:6379>BITCOUNT s1

(integer)6

bitcount s1 0 0指的是开始和结束的区间范围里有多少个1。

2、Python 演示位操作

3进行 bitcount 值为8。bitmap的下一个值是8,值得大小是8。3不是0b0011。因为 bitcount 是统计1的个数,这里3是 key,所以 bitcount 不是统计  key 上的1的个数,是统计 key 对应的 value 值上的1的个数。所以3对应的键等价于0b0011,0b01100011等价于99,所以 bitcount 的是99字符串上对应的的1。9所对应的二进制为10011001

代码如下:

print r.bitcount(‘3’)(不是看3有多少位,是看3的键所对应的值有多少位)(用客户端写法比较产生误区,用命令就不容易产生误区,因为直接产生键,还有键所对应的值)

r.set(‘key1’,’a’)

r.set(‘key2’,’b’)

r.bitop(‘OR’,’key3’,’key1’,’key2’)

print r.get(‘key3’)

位数:

127.0.0.1:6379>help BITCOUNT

BITCUONT key [start] [end]

summary: count set bits in a string(有多少个位数)

since:2.6.0

group:string

相关文章
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
504 5
|
7月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
256 32
|
存储 缓存 NoSQL
redis数据结构-字符串
redis数据结构-字符串
132 1
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
1794 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
384 3
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
176 4
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
1425 3
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
216 3
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
338 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
157 2