如何统计Redis中各种redis 单条数据大小的大小

redis中各种数据类型对应的jedis操作命令(1) - 北京-小林-攻城狮 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
redis中各种数据类型对应的jedis操作命令(1)
& 13:37:32
/ 个人分类:
&&一、常用数据类型简介:& & & redis常用五种数据类型:string,hash,list,set,zset(sorted&set).&&&&1、登录&&&&& redis-cli.exe -h 127.0.0.1 63792、列表所有key&&& 2.1&列表所有key& & & & && keys *&& & 2.2根据key 模糊搜索&&&&&&&& keys H_LOAN_6*&&& 2.3检测键值是否存在&&&&&&&& exists H_LOAN_FF7F6FDD-CE46-4562-AAA-566A5BFD11153、获取key的类型,方便以后操作&&&& type& H_LOAN_A101323F-B2ED-4807-AAA-C4、各种类型&&& 4.1:String 类型&&&&&&&&&&& get 键&& & & & && get B_LOAN_-B918-4B3C-AAAA-68DE7B2CB595&& 4.2Hash 类型&&&&&&&&&&& 显示全部 hgetAll键&&&&&&&&&& hgetAll &H_LOAN_BEF9-32D8-AAA-001D6A62EF62&&&&&&&&&& 返回hash的所有field&&&&&&&&&&& hkeys H_LOAN_FF7F6FDD-CE46-4562-AAA-566A5BFDBE15&&&&&&&&& hmget 键 & & & & & & & 域& & & & & hmget H_LOAN_BEF9-32D8-AAAA-001D6A62EF62 detail&& 4.3 zset(sorted set)类型&&&&&&&& ZSCORE &键 & & & & & & & & & & & & &&&&&&&&&&&&&&&&&&&&&&&&&&& 成员&&&&&&& ZSCORE &SS_LOAN_FENG_HL_0_100_0_48 &9B1B8F75-AAA-4116-BEBC-73DDBA579BD55、批量删除redis数据,方便P2P的初始化【】&&&&& redis-cli -h 127.0.0.1 keys "H_LOAN*" | xargs redis-cli -h 127.0.0.1 del &6、实时查看值变化【shell】&&&&&
watch -n 1 /q/tools/redis/redis-2.8.20/src/redis-cli -h 11.1.1.201 -p
6279 hget H_LOAN_4B911DC4-AAA-42CB-9D0D-69D status&6、redis 配置&&&&& config get * 或 info7、redis-benchmark 性能redis基准信息,redis服务器性能检测&redis-benchmark -h localhost -p 6379 -c 100 -n 100000&100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能&8、monitor& redis-serverredis-cli -h localhost -p 6380 monitor&Dump all the received r&监控host为localhost,端口为6380,redis的连接及读写操作&redis-cli -h localhost -p 6380 info&Provide information and st&提供host为localhost,端口为6380,redis服务的统计信息&1.String类型String是最简单的类型,一个key对应一个valueString类型的数据最大1G。String类型的值可以被视作integer,从而可以让“INCR”命令族操作(incrby、decr、decrby),这种情况下,该integer的值限制在64位有符号数。在list、set和zset中包含的独立的元素类型都是Redis&String类型。2.List类型链表类型,主要功能是push、pop、获取一个范围的所有值等。其中的key可以理解为链表的名字。在Redis中,list就是Redis&String的列表,按照插入顺序排序。比如使用LPUSH命令在list头插入一个元素,使用RPUSH命令在list的尾插入一个元素。当这两个命令之一作用于一个空的key时,一个新的list就创建出来了。List的最大长度是2^32-1个元素。3.Set类型集合,和数学中的集合概念相似。操作中的key理解为集合的名字。在Redis中,set就是Redis&String的无序集合,不允许有重复元素。Set的最大元素数是2^32-1。Redis中对set的操作还有交集、并集、差集等。4.ZSet(Sorted&Set)类型Zset是set的一个升级版本,在set的基础上增加了一个顺序属性,这一属性在添加修改元素时可以指定,每次指定后zset会自动安装指定值重新调整顺序。可以理解为一张表,一列存value,一列存顺序。操作中的key理解为zset的名字。Zset的最大元素数是2^32-1。对于已经有序的zset,仍然可以使用SORT命令,通过指定ASC|DESC参数对其进行排序。5.hash类型hash是最接近关系结构的数据类型,可以将数据库一条或程序中一个对象转换成hashmap存放在redis中。redis位图法统计活跃用户
redis位图法统计活跃用户:redis解决实际问题-----位图法统计活跃用户,在网上看到了这样的一个问题:1、一亿用户,用户有频繁登录的,也有不经常登陆的。
2、如何记录用户的登录信息
3、如何来查询活跃用户,【如一周内登录三次】
解决思路:
如果用数据库解决,将用户的登录信息都放在表中,这时,数据库的表会急剧增大
同时,要用到group,sum运算,计算较慢,频繁的访问数据库
设登录的用户为1,没有登录的用户为0
那么一亿的用户的登录状态信息存储容量就不是很大了
这样就表示2号和8号用户当天是登录的,其他用户都是没有登录的
至于如何来判断查询用户是否为活跃:
则可以将一周内的位图进行and计算
如,其中的7位用户在周一的登录状态是010 0010
周二的状态是110 0010
周三的状态是111 1100
判断此三天7位用户有哪些是连续登录的,执行and操作就可以了:010 0000
可以看出只有2号用户是三天连续登录的。
实际解决办法:
127.0.0.1:6379& setbit monday
(integer) 0
127.0.0.1:6379& setbit monday 2 1
(integer) 0
127.0.0.1:6379& setbit monday 7 1
(integer) 0
127.0.0.1:6379& setbit monday 5 1
(integer) 0
127.0.0.1:6379& setbit thurday
(integer) 0
127.0.0.1:6379& setbit thurday 5 1
(integer) 0
127.0.0.1:6379& setbit thurday 8 1
(integer) 0
127.0.0.1:6379& setbit thurday 7 1
(integer) 0
127.0.0.1:6379& setbit wednesday
(integer) 0
127.0.0.1:6379& setbit wednesday 2 1
(integer) 0
127.0.0.1:6379& setbit wednesday 5 1
(integer) 0
127.0.0.1:6379& setbit wednesday 8 1
(integer) 0
127.0.0.1:6379& setbit wednesday 7 1
(integer) 0
127.0.0.1:6379& bitop and time monday thurday wednesday
127.0.0.1:6379&
优点:1、节约空间,一亿人每天的登录情况,用一亿bit,约1200WByte,约10M的字符就能表示
2、计算方便最近看了一篇文章是关于Spool,中间说Spool利用Redis的bitmaps相关的操作,进行网站活跃用户统计工作。因为本人对redis研究不是很深,不知道这个过程大致是什么样,请大侠给详细列举例子说明一下,多谢!
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
Redis支持对String类型的value进行基于二进制位的置位操作。通过将一个用户的id对应value上的一位,通过对活跃用户对应的位进行置位,就能够用一个value记录所有活跃用户的信息。如下图所未,下图中的bitmap有9个位被置为1,表示这9个位上对应的用户是今天的活跃用户。其中第15位表示uid为15的用户,第一位表示uid为0的用户。(如果你的uid不是从1开始的,比如从100000开始,实际上你也可以相应的用uid减去初始值来表示其位数,比如1000000用户对应到bitmap的第一位)
具体的代码类似下面这样:
redis.setbit(play:yyyy-mm-dd, user_id, 1)
这样一次记录的复杂度是O(1),在Redis中速度非常快。而我们通过每天换用一个不同的key来将每天的活跃用户状态记录分开存。并且可以通过一些与或运算计算出N天活跃用户,和连接N天活跃用户这样的统计数据。如下图,第一行表示星期一的活跃用户情况,第二行表示周二的,以此类推。为样我们通过对N天的活跃用户记录取并集操作,就能得出在N天内活跃过的用户列表。
下面表格表示对应一天,一周,一个月统计时所花费的时间。Period
Time (ms)Daily
50.2Weekly
392.0Monthly
1624.8下面是具体的java代码片断:
1.算出一天的活跃用户数量
import redis.clients.jedis.Jimport java.util.BitS...
Jedis redis = new Jedis("localhost");...
public int uniqueCount(String action, String date) {
String key = action + ":" +
BitSet users = BitSet.valueOf(redis.get(key.getBytes()));
return users.cardinality();
2.计算某几个内活跃用户的数量(某一天活跃就算,所以是取并集)
import redis.clients.jedis.Jimport java.util.BitS...
Jedis redis = new Jedis("localhost");...
public int uniqueCount(String action, String... dates) {
BitSet all = new BitSet();
for (String date : dates) {
String key = action + ":" +
BitSet users = BitSet.valueOf(redis.get(key.getBytes()));
all.or(users);
return all.cardinality();
具体的用法还很多,比如你还可以对独特终端的用户单独记一个bitmap,这样就可以统计不同终端用户的活跃情况。有的同学会说用set也能实现同样的效果。但使用set在内存使用量上是会大很多的。
引用自 本答案完全来源于中文译文文章:/html/3501.html 英文原文://fast-easy-realtime-metrics-using-redis-bitmaps/
<dd style="float:cursor:" title="声誉值:
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (6584) 次}

我要回帖

更多关于 使用redis做数据统计 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信