redis
Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
基础数据类型
对于redis来说主要有 五种基础数据类型,所有的key 也就是键都是字字符串,值可以有 字符串 列表 集合 有序列表 哈希
字符串
一个键对应一个值
1
set del get incr decr incrby
列表(双端列表)
1
rpush rpop lpush lpop lrange
使用列表的技巧
- lpush+lpop=Stack(栈)
- lpush+rpop=Queue(队列)
- lpush+ltrim=Capped Collection(有限集合)
- lpush+brpop=Message Queue(消息队列)
集合
集合通过哈希实现主要是添加和删除集合中的元素
1
sadd scard smembers sismember
哈希
哈希对于一个统一的键可以存储不同的元素对象 适合构造和存储对象
1
hset hget hgetall hdel
有序集合
有序集合对于实现将给定分值的成员添加到集合数据中间去,其主要实现是跳表和压缩链表
1
zadd zrem
在redis sorted sets里面当items内容大于64的时候同时使用了hash和skiplist两种设计实现。这也会为了排序和查找性能做的优化。 添加和删除都需要修改skiplist,所以复杂度为O(log(n))。 但是如果仅仅是查找元素的话可以直接使用hash,其复杂度为O(1) 其他的range操作复杂度一般为O(log(n)),当然如果是小于64的时候,因为是采用了ziplist的设计,其时间复杂度为O(n)
主要用于进行排行榜的实现
一些不是特别常见的特性
- 基数统计
- bitmap
- geo 地理信息