1、数据结构:
(1)String
值:可以是字符串、整数或者浮点数
功能:对整个字符串或者字符串的其中一部分执行操作;
对整数和浮点数执行自增(increment)或者自减(decrement)操作
命令:GET、SET、DEL
INCR、DECR、INCRBY(加上整数amount)、DECRBY、INCRBYFLOAT(加上浮点数amount)
APPEND、GETRANGE、SETRANGE、GETBIT、SETBIT、BITCOUNT、BITOP
(2)List
值:一个链表,链表上的每个节点都包含了一个字符串
功能:从链表的两端推入或者弹出元素;
根据偏移量对链表进行修剪(trim);
读取单个或者多个元素;
根据值查找或者移除元素
命令:RPUSH、LPUSH、LPOP、RPOP、LRANGE、LINDEX、LTRIM
BLPOP、BRPOP
RPOPLPUSH、BRPOPLPUSH
(3)Set
值:包含字符串的无序收集器(unordered collection),并且被包含的每个字符串都不相同
功能:添加、获取、移除单个元素;
检查一个元素是否存在于集合中
计算交集、并集、差集
从集合里面随机获取元素
命令:SADD、SMEMBERS(返回所有元素)、SISMEMBER(检查该元素是否存在)、SREM(移除一个或多个元素,并返回移除数量)
SCARD(集合元素数量)、SRANDMEMBER、SPOP、SMOVE
SDIFF、SDIFFSTORE、SINTER、SINTERSTORE、SUNION、SUNIONSTORE
(4)Hash
值:包含键值对的无序散列表
功能:添加、获取、移除单个键值对
获取所有键值对
命令:HSET、HGET、HGETALL、HDEL
HMGET、HMSET、HDEL、HLEN
HEXISTS、HKEYS、HVALS、HGETALL、HINCRBY、HINCRBYFLOAT
(5)Zset 有序集合
值:字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定
功能:添加、获取、删除单个元素
根据分值范围(range)或者成员来获取元素
命令:ZADD、ZRANGE、ZRANGEBYSCORE、ZREM、ZCARD、ZINCRBY、ZCOUNT、ZRANK、ZSCORE
ZREVRANK、ZREVRANGE、ZRANGEBYSCORE、ZREVRANGEBYSCORE、ZREMRABGEBYRANK、ZREMRABGEBYSCORE、ZINTERSTORE、ZUNIONSTORE
2、发布和订阅
缺点:
(1)客户端读取消息的速度不够快的情况下,消息积压会使得redis输出缓存区的体积变得越来越大,可能导致redis变慢、崩溃或被操作系统杀死。新版redis不会出现这种问题:client-output-buffer-limit pubsub配置
(2)客户端断线过程中的消息会丢失
命令:
SUBSCRIBE (订阅一个频道)UNSUBSCRIBE (退订频道)PUBLISH(向给定频道发送消息)PSUBSCRIBE、PUNSUBSCRIBE
3、事务
特点:在不被打断(interruption)的情况下对多个键执行操作
命令:WATCH、MULTI、EXEC、UNWATCH、DISCARD
4、持久化
(1)快照(snapshotting)
配置:save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
dbfilename dump.rdb
方式:redis会调用fork来创建一个子进程,子进程负责将快照写入硬盘,父进程继续处理命令
缺点:当redis占用的内存越大,创建子进程的时间越多
容易丢数据
(2)只追加文件(append-only file,AOF)
配置:appendonly no
appendfsync everysec(always、no)
no-appendfsync-on-rewrite no
auto-aof-rewirte-percentage 100
auto-aof-rewrite-min-size 64mb
方式:将被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化
缺点:生成的AOF文件占用空间较大,auto-aof-rewrite时同样面临创建子进程耗时的问题
5、主从复制(旧版redis)

6、工具
分布式锁、计数信号量(semaphore)、任务队列(优先级任务、延迟任务)、消息拉取
9、降低内存占用
相关命令:debug object(可查看编码格式)
9.1 短结构
9.1.1 压缩列表(ziplist)
列表:
底层实现:双向链表 doubly linked list
list-max-ziplist-entries 512 (表示当list长度小于512时使用压缩列表)
list-max-ziplist-value 64 (表示当list中的所有元素长度小于64时使用压缩列表)
散列:
底层实现:散列 hashtable
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
有序集合:
底层实现:散列+跳跃表skiplist
zset-max-ziplist-entries 512
zset-max-ziplist-value 64
9.1.2 整数集合(intset)
集合:
底层实现:散列 hashtable
set-max-intset-entries 512 (表示当集合的成员数量在512内,并且这些整数处于有符号整数范围之内)
9.2 分片(sharding)
注:一种字典压缩算法