Redis 是一个开源的,遵守 BSD 协议的内存数据结构存储,常用作数据库、缓存和消息代理Redis相比MongoDB提供了更多的数据结构,如:字符串,哈希,列表,集合,排序集合范围查询,位图,超对数,地理空间索引和流等,下面我们就来聊聊关于redis数据结构及场景?接下来我们就一起去了解一下吧!
redis数据结构及场景
Redis介绍Redis 是一个开源的,遵守 BSD 协议的内存数据结构存储,常用作数据库、缓存和消息代理。Redis相比MongoDB提供了更多的数据结构,如:字符串,哈希,列表,集合,排序集合范围查询,位图,超对数,地理空间索引和流等。
常用数据结构- String:这是最简单的类型,就是普通的set和get,做简单的KV缓存,string类型使用最简单,也最广泛,使用时候尽量不要直接存储JSON格式,因为会浪费大量内存空间,可以使用ProtoBuf或者ProtoStuff格式压缩并用Base64处理后再存储,会节约非常多空间。
使用场景:高并发大流量下的缓存,一般Key-Value类型都可以使用,对象存储压缩后存储。
- Hash:类似 map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在 redis 里,然后每次读写缓存的时候,可以操作 hash 里的某个字段。
使用场景:用户信息、电商购物车商品存储和优惠券列表。
- List:有序列表,通过 list 存储一些列表型的数据结构。通过 lrange 命令,读取某个闭区间内的元素,可以基于 list 实现分页查询,基于 redis 实现简单的高性能分页。
使用场景:类似粉丝列表、文章的评论列表、内容列表。
- Set:无序集合,存储string类型元素,自动去重。直接基于 set 将系统里需要去重的数据扔进去,自动就给去重了。另外,单台服务器直接在JVM内存用HashSet就可以去重,如果某个系统部署在多台机器上,就可以用Redis的set对数据快速的全局去重。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 2^32-1( 4294967295 ) , 即可存储 40 多亿个成员。
使用场景:对数据全局去重、两个列表交集并集和全集的计算、如:求两个博主的共同粉丝列表。
- Sortedset:有序集合和无序集合一样也是 string 类型元素的集合,且不允许重复的元素。不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数 ( score ) 却可以重复。
使用场景:热点新闻、微博热点、音乐排行、TopN需要排名的场景等。
- GeoHash:地理信息,存储地图上地标的经纬度信息,可以根据经纬度和半径画圈搜索地标,如:搜索酒店、餐厅、地点、打车等需要使用地理位置画圈的功能。后续会专门介绍。
- HyperLogLog:是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费12 KB 内存,就可以计算出接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
- BitMap:位图,就是字节数组(byte array),用二进制表示,只有 0 和 1 两个数字,它用每一个二进制位来存放或者标记某个元素对应的值。通常是用来判断某个数据存不存在的,因为是用bit为单位来存储所以Bitmap本身会极大的节省储存空间。
使用场景:高并发时的用户签到、在线状态、独立统计等。
Redis常用网址Redis 官网:https://redis.io/
Redis 在线测试:http://try.redis.io/
Redis 命令手册:https://redis.io/commands
觉得有用就收藏分享,关注我更多有价值的文章会第一时间推荐给你![玫瑰][玫瑰][玫瑰]
,