• 76060

    文章

  • 703

    评论

  • 18

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

Redis基本命令的一些细节

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

一、批量删除键

Redis的DEL不支持通配符,但是可以结合Linux的管道和xargs命令自己实现删除所有符合规则的键,比如删除所有符合“test:”开头的键,可以执行:

redis-cli KEYS "test:*" | xargs redis-cli DEL

二、创建键的规范

Redis对于键的名称并没有强制的要求,比较好的实践是“对象类型:对象ID:对象属性",例如"user:1:friends",对于符合单词推荐用"."分割。

为了节约存储空间,也可以使用"u:1:f"来表示"user:1:friends",但是这部分的节约不如可读性重要。

三、String类型的简单记录

一般场景:

  • 自增可以做计数器;
  • 生成自增ID(不常用);
  • 存储数据;

不常用的功能还有:

  • 增加/减少指定的整数/浮点数;
  • 向字符串尾部添加内容;
  • 获取字符串长度;
  • 一次设置/获取多个键(MSET/MGET);
  • 位操作;

四、Hash类型的简单记录

除了Hash,Redis其他的数据结构还不支持数据类型嵌套。

一般场景:

  • 存储一个对象,itemKey为属性名,itemValue为属性值;
  • 将多个计数器记录在一个Hash中;

不常用的功能:

  • 只获取itemKey或者itemValue(HKEYS);
  • 获取字段数量(HLEN);

五、List类型的简单记录;

List内部使用双向链表实现的。双端添加元素的时间复杂度是O(1)。

一般场景:

  • 存储对象ID;
  • 进行分页查询;

不常用的功能:

  • 获得/设置指定索引位置的元素值(LINDEX/LSET);
  • 裁剪成指定判断(LTRIM);
  • 向列表中插入元素(LINSERT);
  • 列表转移,从右边弹出写入左边(RPOPLPUSH);

六、Set类型的简单记录

无序集合,能保存2^32-1个字符串。集合内部使用散列表实现,操作的时间复杂度是O(1)。多个集合之间可以求并集,交集,差集。

 一般场景:

  • 存储tags;
  • 做一些互相关注的场景;

不常用的功能:

  • 获得集合中元素的个数(SCARD);
  • 进行集合运算并将结果存储(SDIFFSTORE/SINTERSTORE/SUNIONSTORE);
  • 随机获得集合中的元素(SRANDMEMBER);
  • 从集合中弹出一个元素(SPOP);

七、ZSet类型的简单记录

有序集合是使用散列表和跳跃表(Skip list)实现的,读取的时间复杂度是O(log(N))。 范围读取的时间复杂度是O(log n+m)。n是集合的基数,m是返回的元素数量。

  一般场景:

  • 存储排行榜;
  • 存储点击量排序;
  • 按修改时间排序;

不常用的功能:

  • 获取元素个数(ZCARD) ;
  • 获取指定分数范围内的元素个数(ZCOUNT);
  • 删除一个或多个元素(ZREM);
  • 按排名范围删除元素(ZREMRANGEBYRANK);
  • 按分数范围删除元素(ZREMRANGEBYSCORE);
  • 获得元素的排名(ZRANK/ZREVRANK);
  • 计算有序集合的交集(ZINTERSTORE);

八、地理位置的简单记录

暂无。


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤
注册梁钟霖个人博客