制作APP时对于sorted set--有序且不重复的元素集合的使用,关于sorted-set类型与set类型非常相似,不允许出现重复的元素。其主要区别是sorted-set中提供了个分数(score)与每个成员对应Redis根据score对成员进行排序,而且插入是有序的,即插入后就自动排序。当App后台开发者需要有序且不重复的数据,选择sorted-set这种数据结构就非常合适。需要特别注意:sorted-set中的成员是不允许重复,但score是允许重复的。深圳APP开发公司先就sorted set应用以及内存优化方面的方法整理如下:
1、数据模型
sored-set的数据模型示意图7-11
APP制作对于sored-set应模型示意图7-11
2、应用场景
sorted-set类型适用于各种类型的排行榜。如图7-12所示的用户人气榜。
APP制作工具应用图7-12用户人气榜
用户如果需要使用sorted-set实现如图7-12的用户人气榜,首先通过下面的命令把用户的数据添加到Redis中。
ZADD Key score member
本例中sorted-set的Kev是“userTop”,添加数据的过程如下所示。
接着通过下面的命令返回索引在st art和stop之间的成员列表。
zrevrange key start stop [withscores]
其中start为O表示第个成员,stop为l表示最后个成员,WITHSCORES表示返回的结果中包含每个成员的分数),排序命令如下。
上面的返回结果己按照分数从大到小排序了
APP开发之内存优化
由于Redis在内容中存储数据的特性,Reids会占用大量的内存,Redis的开发者也考虑到这点,因此在Redis中提供了系列的参数和方法来监控、控制和优化内存。
1、监控内存使用的状况
在通过Redis的终端命令redis-cli中输入命令“iufo”可查看Redis的各种统计信息其中有关内存的统计信息如下
# Plemory
used_memc.ry:12660096
used_memc.ry_human:l2.07M
used_memc.ry_rss:14299136
used_memc.ry_peak:15534680
used_memc.ry_peak_hum an:18.82M
used_memc.ry_lua:31744
mem fracjmentati_.n rati::1.13
mem_allocator:jemallOC-3.2.0
在上面展示的参数中,3个重要的内存统计信息的说明如下:
·used_memory_hmuan:以可读格式返回Redis分配的内存总量。
·used_memory_ rss从操作系统的角度,返回Redis已分配的内存总量。这个值的结果,和top命令的输出一致。
·used_memory_peak_hmuan:以可读格式返回Redis的内存消耗峰值。
如果APP开发者在这里的统计数据中查看到内存使用过多,在不考虑使用Redis分布式存储的情况下,开发者务必要想办法优化Redis内存的使用情况。
2、优化存储结构
Redis的开发者在配置文件中提供了组参数来控制hash、list、set、sorted-set某些结构的内存存储方式。
在正常的情况下,hash中的value是Uhashmap的方式存储,如果hashmap的成员较少,或者hashmap的值的长度较少,会以类似于线性压缩表的万式( Redis中称为ziplist)的万式保存hash的数据,该控制参数对应于Redis配置文件中的下面两项:
hash-max-zUJlist-entrie0 51:
hash-max-zirllist-value e4
·hash-max-ziplist-entries:当hashmapih部的成员不超过512时,就采用ziplist的形式存储数据;当hashmapih部的成员超过512时,
就采用hasluuap的形式存储数据。
·hash-max-ziplist-value:当hashmap内部的成员的长度不超过64时,就采用ziplist的形式存储数据;当hashmapih部的成员的长度超过64时,就采用hashmap的形式存储数据。
APP开发公司提示:以上两个值任意一个超过了.hash的存储方式就会转换/jhashmap。当hash采用ziplist存储数据时,数据模型如下。
Redis配置文件中下面这些参数的含义也是类似,分别控制list和zset是否采用ziplist的存储方式set是否使用intset的存储方式来节省内存。
list-max-zirilist-entries 512
list-max-ziplist-value 64
set-max-zirilist-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
当list采用ziplist存储数据时,数据模型如下。
当zset采用ziplist存储数据时,数据模型如下。
注意set使用了intset的结构来节省内存,intset数据模型如图7-13所示。
上面的这些参数值不是没置得越大越好,例如,hash的数据结构中如果用hashmap存储数据,查找和操作的时间复杂度都是0(1),采用了ziplist后,由于ziplist是一个线性表结构,查找和操作的时间复杂度会变成0(n)。如果数据成员量不大,则影响不大,当数据成员量变大后,则会严重影响性能。开发者需要在时间和空间之间认真衡量怎么设置上面所述的参数。APP开发公司关于项目制作时对于sorted set的功能与应用方面的经验本文就分享到这里。博纳网络编辑整理谢谢关注。