您的位置:首页 > 数据库 > Redis

Redis基本数据类型

2017-04-24 22:53 211 查看


概述

Redis的键值可以使用数据类型:字符串,散列表,列表,集合,有序集合,位图,计数器,地理空间


1.字符串(string)

存储整数和字符串,有些人也用来存储json/pb等序列化数据,并不推荐,浪费内存。


2.哈希表(hashes)

存储配置对象(比如存储读取修改用户、商品属性),优点是可以存取部分key,对于以常变化的或部分key要求atom操作的适合。

我们经常将一些结构化的信息打包成hasmap,在客户端序列化存储为一个字符串值(一般为json)格式,比如用户的昵称、年龄、积分等。这时候在需要修改其中某一项时,通常需要将字符串(json)取出来,然后进行返序列化,修改某一项的值,再序列化成字符串(json)存储回去。简单修改一个属性就干这么多事情,消耗很大的,也不适用于一些可能并发操作的场合(比如两个并发操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项的值。


3.列表(list)

可以用来存最新用户动态,时间轴,优点是有序,缺点是元素可重复,不去重。微博时间轴、消息对列


4.集合(sets)

无序,唯一,对于要求严格唯一性的可以使用,可以用来去重。比如在微博应用中,可以将一个用户所有的关注存在一个集合中,将其所有粉丝存在一个集合。因为Redis非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现 如共同关注、共同喜好、二度好友的功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存到一新的集合中

1 共同好友  2 利用唯一笥,可以统计访问网站的所有独立IP  3好友推荐,根据tag求交集,大于某个门槛就可以推荐


5.有序集合(sorted sets)

集合的有序版,很好用,排名之类的复杂场景可以考虑。和sets相比,Sorted Sets是将Set中的元素增加了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如现代战争存储全班同学成绩的SortedSets,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候 ,就已经进行了天然的排序。另外还可以用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择score的倒序来获取工作任务。让重要的任务优先执行

示例:1.带有权重的元素,比如一个游戏的用户得分排行榜  2.一般用到的场景不算太多


6.位图(bit maps)

这个不是新增的数据类型,只是可以把字符串类型按照单个位的形式操作。可以用来统计活跃用户,实现用户签到功能,性能颇高。不过统计活跃用户建议是增量读取日志或者引入消息中间件异步刷到redis,非业务必须功能最好不要影响线上业务,特别是这种门户业务更是重中之重。


7.计数器(hyperloglogs)

添加元素只记录元素个数,并不会存储元素本身,节省空间并且避免重复count,这个感觉直接用incr就可以实现 。基于基数估算的算法,只能比较准确地人教版出基数。


8.地理空间(geospatial indexes)

用来做地理位置查询,比如两点之间的距离,一个点附近有多少元素,适合点比较固定的场景,或者只考虑当前位置的场景,像附近的人这种就不适合,一是需要考虑某段时间内的点,二是点经常更新,压力比较大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis 基本类型