






















BitMap是一种新的数据类型。该数据类型本质上就是一个仅包含0和1的二进制字符串。其相关命令都是对这个字符串二进制位的操作。
用于描述该字符串的属性由三个:key、offset、bitValue。
============================================================
格式:setbit key offset value
注意:对于原BitMap中不存在的offset进行复制,字符串会自动伸展以确保它可以将value保存在指定offset上。
字符串伸展时,空白位置以0填充。需要注意的是,对使用较大offset的setbit操作。内存分配过程可能会造成Redis服务器阻塞。
格式:bitcount key 【start】 【end】
注意:start和end可以使用负数,-1表示最后一个字节,-2表示倒数第二个。
对于不存在的key。被当成空字符来处理,因此不存在的key进行bitcount操作的结果为0.
格式:bitpos key bit 【start】 【end】
格式:bitop operation destkey key【key...】
说明:operation 可以是and、or、not、xor 这四种:
除了not操作之外,其他操作都可以接收对一个或多个BitMap
除了not操作之外,其他对一个BitMap的操作其实就是一个复制。
如果参与运算的多个BitMap长度不同,较短的BitMap会以0作为补充位与较长的计算。
由于offset的取值范围很大,所以一般应用于大数据量的二值性统计。
例如平台活跃用户统计(访问或未访问)、支持率、考勤统计、图像二值化等。
不过,对于数据量较小的二值性统计并不适合BitMap,使用Set更为合适。
HyperLogLog 数据类型是一种超级日志记录。
该数据类型可以简单理解成一个set集合,集合元素为字符串。
实际上HyperLogLog 是一种基数计数概率算法,通过该算法可以利用极小的内存完成独立总数的统计。
格式:pfadd key element 【element...】
作用于多个key时,返回所有key的HyperLogLog 集合的并集的近似基数。
格式:pfcount key 【key...】
格式:pfmerge destkey sourcekey [sourcekey ...]
HyperLogLog 可对数据量超级庞大的日志数据做不精确(误差0.81%)的去重计数统计。
对于平台上每个页面每天的UV数据,非常适合使用HyperLogLog 进行记录。
Geospatial 地理空间,本质上还是一种集合,只不过集合元素是一种由三部分构成的数据结构,这种数据结构称为空间元素:
该类型可以设置、查询地理位置的经纬度,查询某范围内的空间元素,计算两个空间元素间的距离等。
格式:groadd key longitude latitude member 【 longitude latitude member...】
格式:geopos key member [member...]
格式:geodist key member1 member2 [unit]
格式:geohash key member 【member...】
说明:geohash是一种地址编码方法,它能把二维的空间经纬度数据编码成一个字符串,该值主要用于底层应用或者调试,实际作用不大。
georadius:以指定的经纬度为中心,返回指定地理空间中包含的所有位置元素中,与中心举例不超过半径的元素,返回时还可以携带额外信息:
命令默认返回未排序的位置元素。可通过以下两个参数指定返回位置元素的排序方式:
返回结果包含中心点元素。
格式:georadius key longitude latitude radius 【unit】【withcoord】【withdist】【withhash】【asc|desc】 [count]
格式:georadiusbymember key member radius 【unit】【withcoord】【withdist】【withhash】【asc|desc】 [count]
微信发现中的“附近”功能,钉钉签到功能等。

发布/订阅(pub/sub) 是一种消息通信模式:
发布者(消息生产者)生产和发送消息到存储系统;
订阅者(消息消费者),从存储系统接收和消费消息。
这个存储系统可以是文件系统FS、消息中间件MQ、数据库管理系统DBMS,也可以是Redis。
订阅者订阅消息后,只要存储系统中有该类消息,就可以不断的接收并消费这些消息。
当存储系统中没有消息后,订阅者就会阻塞。
当发布者将消息写入存储系统后,会立即唤醒订阅者。
当存储系统放满时,不同的发布者有不同的处理方式:有的会阻塞发布者发布,有的会将多余消息丢失。
不同的消息系统的发布/订阅方式不同:
RocketMQ、KAfka等消息中间件构成的消息系统,消息是以主题Topic分类的
Redis’则是以频道channel分类的。
格式:subscribe channel 【channel...】
格式:psubscribe pattern [pattern...]
比如:psubscribe news.*
说明:这里的模式只能使用通配符*。
格式:publish channel message
格式:unsubscribe 【channel 【channel...】】
说明:如果没有频道被指定,那么客户端退订所有频道,这种情况会返回一个信息,告知客户端所有被退订的频道。
punsubscribe:退订一个或多个符合给定模式的频道。效果和unsubscribe 相同。
pubsub:查看订阅/发布系统状态的内省命令集。
格式:pubsub channels 【pattern】
说明:pattern参数可选,如果不指定pattern参数,会列出所有的活跃频道,
如果给出pattern参数(只能使用通配符*),只列出相匹配的活跃频道。
Redis事务本质是一组命令的批处理。这组命令在执行过程中会被顺序地、一次性全部执行完毕,只要没出现语法错误,这组命令在执行期间是不会被中断的。
Redis事务不具有ACID特性,仅保证了数据的一致性!
Redis事务通过三个命令进行控制:


语法错误:整个事务作废,全部不执行;
运行时错误:错的报错,对的照常执行,无自动回滚;
WATCH 冲突:事务放弃,业务层循环重试;
使用乐观锁实现事务隔离。
Redis通过watch命令再配合事务实现了多线程下的隔离操作。

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。