redis学习

redis 面试问题收集

redis如何优雅地删除大键

redis官方文档

Manual

Data types

Strings

Strings 是redis最基本的redis值类型。redis Strings 是二进制安全,这意味者,redis string 可以包含任意种类的数据,例如一个jpeg图片或者一个序列化的ruby obj。
String value 的最大长度为512MB。
你可以用redis String 来做一些有趣的事情,例如:

  • 使用INCR,DECR,INCRBY等命令将Strings 用作计数器
  • 使用Strings向Strings追加内容
  • 使用GETRANGE,SETRANGE将Strings用作随机访问向量数组
  • 使用GETBIT,SETBIT来创建redis的布隆过滤器,使用很少的空间来编码大量的数据

Lists

从时间复杂度的角度来看Redis Lists,它能够支持从头尾常数时间级别的插入和删除,即使是大批量的。访问两端非常快,但是访问大列表的中间需要O(N)。
你可以用列表来做一下事情:

  • 在社交网络中用作时间线,使用LPUSH来取回一些最近的插入时间
  • 你可以使用LPUSH和LTRIM来创建一个不会超过某个给定范围的元素
  • Lists可以用作实现一个原始的消息传递,例如ruby 库中非常著名的Resque
  • 你可以使用Lists来做更多的事情,这个类型支持很多命令,包括阻塞命令例如BLPOP
ziplist
/* Each entry in the ziplist is either a string or an integer. */
typedef struct {
    /* When string is used, it is provided with the length (slen). */
    unsigned char *sval;
    unsigned int slen;
    /* When integer is used, 'sval' is NULL, and lval holds the value. */
    long long lval;
} ziplistEntry;

/*
 * ZIPLIST OVERALL LAYOUT
 * ======================
 *
 * The general layout of the ziplist is as follows:
 *
 * <uint32_zlbytes> <uint32_zltail> <uint16_zllen> <entry> <entry> ... <entry> <uint8_zlend>
 *
 * ZIPLIST ENTRIES
 * ===============
 * <prevlen> <encoding> <entry-data>
 * prevlen 小于253时,使用一个unsigned int,大于254时,使用5个字节,第一个字
 * 节使用FE来表示后面有个大整数
 */

Sets

Hashes

posted @ 2022-07-07 14:42  Fake_coder  阅读(28)  评论(0编辑  收藏  举报