本文我们介绍Redis的基础知识,数据类型与过期键删除策略。
什么是Redis
redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
Redis的优势
- 数据存在内存中,速度快
- 支持丰富数据类型,一共支持五种数据类型
- 支持事务,其操作都是原子性
- 具有丰富的特性,可用于缓存,消息等
Redis的数据类型
Redis一共支持五种数据类型,分别为字符串,哈希,列表,集合,有序集合,下面我们进行逐项讲解。
1 字符串(string)
string 是 redis 最基本的类型,一个 key 对应一个 value。string 类型是二进制安全的,意思是 redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象。该值最大能存储 512MB。
SET key value
该指令设置指定 key 的值
GET key
获取指定 key 的值
2 哈希
Redis hash是一个键值对的集合,是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。
HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。
HMSET key field1 value1 [field2 value2 ]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
HGET key field
获取存储在哈希表中指定字段的值。
3 列表(list)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
LPUSH key value1 [value2]
将一个或多个值插入到列表头部
LPOP key
移出并获取列表的第一个元素
4 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的。
SADD key member1 [member2]
向集合添加一个或多个成员
5 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数
Redis的过期键删除策略
如果Redis的一个键过期了,那应该怎么将其删除呢?
三种删除策略
- 定时删除:在设置键的过期时间的同时,创建一个定时器( timer ). 让定时器在键的过期时间来临时,立即执行对键的删除操作。
- 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
- 定期删除::每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库, 则由算法决定。
Redis的策略
Redis服务器实际使用的是惰性删除和定期删除两种策略: 通过配合使用这两种删除策略,服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。