Redis三种特殊的数据类型以及性能分析

redis的三种特殊的数据类型

redis内含五种基本的数据类型

字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)

除了这五种基本的数据类型以外还为我们提供了一些特殊的数据类型

bitmaps
hyperloglogs
地理空间(geospatial)

这些数据类型在日常生活中可以极大地提高便利性和系统性能。

bitmaps

bitmaps是redis为我们提供的一种位运算数据类型,内部只存在0和1两种数据,使用场景:

  • 在线/非在线人数统计
  • 活跃用户统计
  • 打卡情况统计
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> clear
127.0.0.1:6379> setbit date 1 1
(integer) 0
127.0.0.1:6379> setbit date 2 1
(integer) 0
127.0.0.1:6379> setbit date 3 1
(integer) 0
127.0.0.1:6379> setbit date 4 1
(integer) 0
127.0.0.1:6379> setbit date 5 1
(integer) 0
127.0.0.1:6379> setbit date 6 0
(integer) 0
127.0.0.1:6379> setbit date 7 0
(integer) 0
127.0.0.1:6379> getbit date 5
(integer) 1
127.0.0.1:6379> getbit date 7
(integer) 0
127.0.0.1:6379> bitcount date
(integer) 5

上面这一段可以用来统计一周的打卡情况:

  • setbit 向bitmaps中添加值
  • getbit 向bitmaps中获取值
  • bitcount 获取bitmaps中value为1的值的个数

hyperloglogs

hyperloglogs是redis为我们提供的一种计算基数的数据类型,相比于set可以节省更多内存,但是有0.81%的误差率,在允许少量误差的时候可以考虑使用,使用场景:

  • 文章/博客观看人数统计
  • 计数器
  • 共同好友数量
127.0.0.1:6379> pfadd xiaoming a b c d e
(integer) 1
127.0.0.1:6379> pfadd zhangsan d e f g
(integer) 1
127.0.0.1:6379> pfcount xiaoming
(integer) 5
127.0.0.1:6379> pfcount zhangsan
(integer) 4
127.0.0.1:6379> pfmerge common xiaoming zhangsan
OK
127.0.0.1:6379> pfcount common
(integer) 7

上面这一段可以用来统计共同好友情况:

  • pfadd 向hyperloglogs中添加值
  • pfcount 查看hyperloglogs中值的数量
  • pfmerge 合并两个hyperloglogs数据类型,获取基数

geospatial

geospatial是redis为我们提供的一种基于地理空间的数据类型,使用场景:

  • 查看附近的人
  • 查看两点间的直线距离

GEOADD:添加地址信息
GEODIST:计算两点之间直线距离
GEOHASH:查看两点hash值,两个值越相近则距离越近
GEOPOS:查看两点的经纬度信息
GEORADIUS:查看距离中心坐标一定半径内的key值
GEORADIUSBYMEMBER:查看指定key为中心一定半径内的key值

GEOADD

127.0.0.1:6379> geoadd city 116.397128 39.916527 beijing
(integer) 1
127.0.0.1:6379> geoadd city 121.48941 31.40527 shanghai
(integer) 1
127.0.0.1:6379> geoadd city 113.88308 22.55329 shenzhen
(integer) 1
127.0.0.1:6379> geoadd city 120.21201 30.2084 hangzhou
(integer) 1
--------------------------------------------------------------------
GEODIST

127.0.0.1:6379> geodist city beijing shanghai
"1052105.5643"
--------------------------------------------------------------------
GEOHASH

127.0.0.1:6379> geohash city beijing shanghai
1) "wx4g0dtf9e0"
2) "wtw6st1uuq0"
--------------------------------------------------------------------
GEOPOS

127.0.0.1:6379> geopos city beijing shanghai
1) 1) "116.39712899923324585"
   2) "39.91652647362980844"
2) 1) "121.48941010236740112"
   2) "31.40526993848380499"
--------------------------------------------------------------------
GEORADIUS

127.0.0.1:6379> georadius city 115 40 500 km
1) "beijing"
127.0.0.1:6379> georadius city 115 40 1500 km
1) "hangzhou"
2) "shanghai"
3) "beijing"
--------------------------------------------------------------------
GEORADIUSBYMEMBER

127.0.0.1:6379> georadiusbymember city shanghai 1000 km
1) "hangzhou"
2) "shanghai"

为什么使用redis会增加系统性能

因为Redis的瓶颈不是cpu的运行速度,而往往是网络带宽和机器的内存大小。再说了,单线程切换开销小,容易实现既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。
再加上其巧妙地数据结构,以其nosql(not only sql)的优势,自然速度就要比普通的sql要快上许多。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值