Redis中的位运算

马谦马谦马谦
马谦马谦马谦
马谦马谦马谦
605
文章
12
评论
2017年11月24日21:44:19 评论

一、基本用法

任何一门程序语言都离不开位运算这个功能,redis虽然不是一门编程语言,但也是一个和编程密切关联的工具。因此位运算自然也是redis中不可或缺的功能。

redis中位运算相关的方法:

  • GETBIT key offset:获取第offset位的bit,不存的的比特位返回0。
  • SETBIT key offset value:给第offset位设置成value。
  • BITCOUNT key [start] [end]:计算key中1的个数。
  • BITOP operation destkey key [key]:执行位操作,位操作包含与(AND)或(OR)异或(XOR)以及 非(NOT)
  • BITPOS key value [start] [end]:查询key中第一次出现value的位置,startend表示字符的开始和结束位置。

二、使用示例

以字符串maqian为示例,对应的ASCII码和二进制位如下所示:

Redis中的位运算

对redis而言,它不会和我们一样给每个字符一一对应到二进制数据,对计算机而言,它能看到的就是图中第三行的数据。

2.1 获取比特

name设置值为maqian,获取前8个字节分别对应m的比特位:

2.2 计算1的个数

maqian 字符串中1的个数为5+3+4+4+3+5=24个,可以使用redis获取这个值:

2.3 修改比特位

把第m 的第六位变成1,即相当于把m的ascii码+2,此时字符表示的是o :

2.4 逻辑操作

2.5 查询第一个1的位置

 

 

 

 

马谦马谦马谦
  • 本文由 发表于 2017年11月24日21:44:19
  • 转载请务必保留本文链接:https://www.dyxmq.cn/databases/redis/redis-bit-operator.html
redis源码分析:链表实现 Redis

redis源码分析:链表实现

一、链表定义 链表在redis中的使用十分广泛,例如列表的底层实现之一就是链表,包括发布、订阅等等功能都是有用到链表的。redis中链表在adlist.h和adlist.c中实现,只用了300+行代码...
redis中的发布和订阅 Redis

redis中的发布和订阅

一、发布和订阅 除了任务队列以外,redis还有一种基于“发布/订阅”模式的消息传递,使得客户端可以订阅某个频道,当频道有消息产生时,会把消息传递到所有的订阅者。和列表不一样的是,发布和订阅可以是一对...
Redis小案例(二):redis实现消息队列 Redis

Redis小案例(二):redis实现消息队列

一、任务队列概述 消息队列,顾名思义就是一个用来传递任务的队列。消息队列在开发中十分常见,经常用在页面后台处理需要很长时间的操作时,例如发送邮件、短信以及进行复杂数据运算操作等,这些操作通常会阻塞页面...
Redis小案例(一):实现网站访问频率限制 Redis

Redis小案例(一):实现网站访问频率限制

网站中经常需要用到网站限流,例如限制用户恶意爬虫获取网页信息以及在网站访问流量大时限制访问频率等等,这里使用redis做一个简单的网站登录限制案例。 一、使用EXPIRE进行访问频率限制 逻辑:用户登...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: