redis知多少

Redis是一个速度非常快的非关系数据库(non-relational database)。

Redis始于实用主义——它是一个程序员因为找不到合适的工具来解决手头上的问题而发明的。

Redis是key-value形式的数据库。

数据类型

Redis里比较常用的5大数据类型:

  • String(字符串)
  • List(列表)
  • Set(集合)
  • SortedSet(有序集合)
  • Hash(哈希表)

String

字符串可以存储以下三种类型的值:

  • 字节串
  • 整数
  • 浮点数

可以对整数和浮点数执行自增或者自减操作。

1
2
3
4
5
6
7
8
9
set key1 1
INCR key1 // 2
INCRBY key1 10 // 12
DECR key1 // 11
DECR key1 6 // 5

set key2 1.2
INCRBYFLOAT key2 1.3 // 2.5
INCRBYFLOAT key2 -1.1 // 1.4

通过上面的例子可以看到如何操作string自增/自减

redis也可以对字节串的一部分内容进行读取或写入的操作。

1
2
3
APPEND key-name value 追加字节串
GETRANGE key-name start end 获取指定位置的字节串
SETRANGE key-name offset value 设置指定位置的字节串

List

redis列表允许用户从序列的两端推入或者弹出元素,获取列表元素,以及执行各种常见的列表操作。

常用的列表命令如下:

1
2
3
4
5
6
7
RPUSH key-name value [value ...] 	// 右端push
LPUSH key-name value [value ...] // 左端push
RPOP key-name // 右端pop
LPOP key-name // 左端pop
LINDEX key-name offset // 返回列表中偏移量为index的元素
LRANGE key-name start end // 列表指定位置的元素
LTRIM key-name start end // 对列表修剪

Set

redis集合以无序的方式存储各不相同的元素,支持添加,删除,查询等功能。

常用的集合命令如下:

1
2
3
4
5
6
7
8
SADD key-name item [item ...] 	// 添加元素
SREM key-name item [item ...] // 移除元素
SISMEMBER key-name item // 查询元素是否存在
SCARD key-name // 查询集合的元素数量
SMEMBERS key-name // 返回集合的所有元素
SRANDMEMBER key-name [count] // 随机返回集合一个或多个元素
SPOP key-name // 随机移除一个元素,并返回这个元素
SMOVE source-key dest-key item // 移动元素

SortedSet

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

常用的有序集合命令如下:

1
2
3
4
5
ZADD key-name score member // 添加元素
ZREM key-name member [member ...] // 删除给定元素
ZRANK key-name member // 返回member在集合里的排名
ZRANGE key-name start stop // 返回集合排名在start和stop中的元素
ZSCORE key-name member // 返回member在集合中的分值

有序集合支持正向和反向排序,也指出集合间交集和并集处理。

Hash

redis哈希:多个键值对存储到一个redis键里面,类似于关系数据库中的行,文档数据库中的文档,

常用的哈希命令如下:

1
2
3
4
5
6
7
8
9
10
HMGET key-name key [key ...] // 获取指定键的值
HMSET key-name key value [key value ...] // 设置键值对
HDEL key-name key [key ...] // 删除指定的键值对
HLEN key-name // 返回哈希键值对的数量
HEXISTS key-name key // 检查是否存在给定的键
HKEYS key-name // 返回哈希所有的键
HVALS key-name // 返回哈希所有的值
HGETALL key-name // 返回哈希所有键值对
HINCRBY key-name key increment // 给指定的键自增(整数)
HINCRBYFLOAT key-name key increment // 给指定的键自增(浮点数)

常用命令

Sort排序

redis sort命令可以看作是sql语言里的order by子句。可以对列表,集合,有序集合进行排序。

处理过期时间

命令 示例 描述
PERSIST PERSIST key 移除键的过期时间
TTL TTL key 查看key还有多少秒过期(time to live)
EXPIRE EXPIRE key seconds 给key设置多少秒过期
EXPIREAT EXPIREAT key timestamp 设置key的过期时间为给定的时间戳
PTTL PTTL key 查看key还有多少毫秒过期(time to live)
PEXPIRE PEXPIRE key milliseconds 给key设置多少毫秒过期
PEXPIREAT PEXPIREAT key timestamp-milli 设置key的过期时间为给定的时间戳(毫秒级)

其他相关资料: