redis的setbit命令

redis的setbit这个bit怎么理解,配合bitcount使用?

这个是SETBIT使用方法的简单说明
<img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL3BpYzQuemhpbWcuY29tLzg2NTA4NTJjMzQ4Y2YwOGZmNzExZTQ0Y2ExM2FhZjQ3X2IucG5n.jpg" data-rawwidth="958" data-rawheight="93" class="origin_image zh-lightbox-thumb" width="958" data-original="https://pic4.zhimg.com/8650852c348cf08ff711e44ca13aaf47_r.png">

在redis中,存储的字符串都是以二级制的进行存在的。

举例:
设置一个 key-value ,键的名字叫“andy” 值为字符‘a‘
<img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL3BpYzMuemhpbWcuY29tLzg1ZjlhMDdhNGNmYjgxNTAyOWY0Y2UyNjZkYWE3OGEyX2IucG5n.jpg" data-rawwidth="524" data-rawheight="99" class="origin_image zh-lightbox-thumb" width="524" data-original="https://pic3.zhimg.com/85f9a07a4cfb815029f4ce266daa78a2_r.png">
我们知道 ‘a‘ 的ASCII码是 97。转换为二进制是:01100001。offset的学名叫做“偏移” 。二进制中的每一位就是offset值啦,比如在这里 offset 0 等于 ‘0’ ,offset 1等于‘1‘ ,offset2等于‘1‘,offset 6 等于‘1‘ ,没错,offset是从左往右计数的,也就是从高位往低位。

我们通过SETBIT 命令将 andy中的 ‘a‘ 变成 ‘b‘ 应该怎么变呢?

也就是将 01100001 变成 01100010 (b的ASCII码是98),这个很简单啦,也就是将‘a‘中的offset 6从0变成1,将offset 7 从1变成0 。

<img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL3BpYzEuemhpbWcuY29tLzRhNjViZWZjMDU3MTI0YmIzNmM4ODA3NThiMjZiN2ZjX2IucG5n.jpg" data-rawwidth="521" data-rawheight="96" class="origin_image zh-lightbox-thumb" width="521" data-original="https://pic1.zhimg.com/4a65befc057124bb36c880758b26b7fc_r.png">
大家可能也发现了,每次SETBIT完毕之后,有一个(integer) 0或者(integer)1的返回值,这个是在你进行SETBIT 之前,该offset位的比特值。

这个时候,我们再get andy 一下,看看结果:
<img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL3BpYzIuemhpbWcuY29tLzk1OTFkNGE3M2YzNDcxODQ3YmJjNmFkZTIwZDdmOTRkX2IucG5n.jpg" data-rawwidth="340" data-rawheight="50" class="content_image" width="340">
果然,就从‘a‘ 变成 ‘b‘了。 

这就是redis 中 “SETBIT” 的基本用法。

BITCOUNT 就是统计字符串的二级制码中,有多少个‘1‘。 所以在这里,

BITCOUNT andy 得到的结果就是 3 啦。

以上。

转自 https://www.zhihu.com/question/27672245/answer/123641959

时间: 2024-10-16 00:53:25

redis的setbit命令的相关文章

NoSQL之Redis高级实用命令详解--安全和主从复制

Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim C++ C# JSON Ruby Linux Nginx Docker 所有分类  >  数据库相关  >  NoSQL数据库 NoSQL之Redis高级实用命令详解--安全和主从复制 NoSQL Redis   2014-01-09 22:52:47 发布 您的评价:       0.0   收

通过redis的monitor命令排除故障

项目里有10台服务器都在一个刀箱里,其中一台是redis缓存服务器,另外的是app服务器.通过监控发现这个刀箱的流量750M,其中缓存服务器的流量达105M,这么高的流量已经造成其它项目的服务器网络延时,丢包,已经影响了正常的业务.通过分析基本可以断定流量产生来自于app服务器对redis服务器数据调用,至于为什么为产生大流量,需要进一步分析,redis的monitor命令可以实时打印出 redis 服务器接收到的命令,我们就通过这些数据进行分析. 1.抓取几分钟的数据,然后手动终止命令(我取了

Redis 数据备份与恢复命令

Redis SAVE 命令用于创建当前数据库的备份. 语法 redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实例 redis 127.0.0.1:6379> SAVE  OK 该命令将在 redis 安装目录中创建dump.rdb文件. 恢复数据 如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可.获取 redis 目录可以使用 CONFIG 命令,如下所示: redis 127.0.0.1:637

redis学习笔记——命令执行流程

基础知识部分 如果需要掌握Redis的整个命令的执行过程,那么必须掌握一些基本的概念!否则根本看不懂,下面我就一些在我看来必备的基础知识进行总结,希望能为后面命令的整个执行过程做铺垫. 事件 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象.服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完

redis 用setbit(bitmap)统计活跃用户

getspool.com的重要统计数据是实时计算的.Redis的bitmap让我们可以实时的进行类似的统计,并且极其节省空间.在模拟1亿2千8百万用户的模拟环境下,在一台MacBookPro上,典型的统计如“日用户数”(dailyunique users) 的时间消耗小于50ms, 占用16MB内存.Spool现在还没有1亿2千8百万用户,但是我们的方案可以应对这样的规模.我们想分享这是如何做到的,也许能帮到其它创业公司. Bitmap以及Redis Bitmaps快速入门(Crash Cour

Linux下安装redis以及常用命令

1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar xzvf redis-4.0.8.tar.gz 3.安装 cd redis-4.0.8 make cd src make install PREFIX=/usr/local/redis 4.移动配置文件到安装目录下 cd ../ mkdir /usr/local/redis/etc mv redis.conf /usr/local/redi

redis常用语法命令

中文文档: http://redis.cn/commands.htmlredis常用语法命令1 设置keyset key value例如: set name "s_jun"设置多个key valuemset name "s_jun" age 19 sex man设置key的过期时间(ex:为秒单位)set game 'DNF' ex 5取值get key (取单个值)or mget key1 key2...key9(取多个值)2 删除keydel key1 key2

Jedis对Redis的常用命令操作

本篇主要总结一些Jedis对Redis的常用命令操作: 1.对key操作命令 2.对String操作命令 3.对List操作命令 4.对Set操作命令 5.对Hash操作命令 6.排序操作指令 一.项目中添加redis和junit的依赖. <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</ver

redis中setbit bitcount命令详解

bitmap,位图,即是使用bit. redis字符串是一个字节序列. 1 Byte = 8 bit SETBIT key offset value 设置或者清空key的value(字符串)在offset处的bit值. 那个位置的bit要么被设置,要么被清空,这个由value(只能是0或者1)来决定.当key不存在的时候,就创建一个新的字符串value.要确保这个字符串大到在offset处有bit值. offset 表示bit的位置数,从0开始计,1字节的bit数组最大为7 . SETBIT K