Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。
Redis中的数据都是以键值对的形式出现。
String
String类型是最简单也最长的类型。他可以存储字符串,整数,浮点数,序列化后的对象,图片(Base64编码后)。
常用命令
SET key value:设置一个键值对,将键key的值设置为value。
GET key:获取指定键的值。
MSET key1 value1 key2 value2 …… :设置多个键值对的值
MGET key1 key2 key3 : 获取多个键的值
INCR key:将指定键的值递增1。
DECR key:将指定键的值递减1。
INCRBY key increment:将指定键的值递增increment。
DECRBY key decrement:将指定键的值递减decrement。
STRLEN key:获取指定键的值的长度。
EXPIRE key seconds(通用):设置一个带有过期时间的键值对
SETEX key seconds value:设置一个带有过期时间的键值对,将键key的值设置为value,并在seconds秒后自动过期。
基本操作
SET key value
OK
GET key
"value"
EXISTS key
(integer) 1
STRLEN key
(integer) 5
DEL key
(integer) 1
GET key
(nil)
设置过期时间
SETEX key 30 value # 设置值并设置过期时间
OK
TTL key
(integer) 27
使用场景
- 常规数据:缓存,token,序列化后的对象,图片的Base64编码等。使用String存储序列化后的对象会比用Hash更省内存
- 计数:用户在一段时间内的请求数,可以用于限流。
-
分布式锁:利用Redis中的setnx来实现分布式锁。通过将一个唯一标识作为键,将值设置为某个特定的标识符,从而实现对资源的互斥访问。(不推荐)
List
在Redis中,List是以双向链表形式去呈现的。value值就是这个双向链表,可以将这个key值当作这个链表的名字。可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。我们将他当成队列就可以。
常用命令
RPUSH key value1 value2 ... | 在指定列表的尾部(右边)添加一个或多个元素 |
LPUSH key value1 value2 ... | 在指定列表的头部(左边)添加一个或多个元素 |
LSET key index value | 将指定列表索引 index 位置的值设置为 value |
LPOP key | 移除并获取指定列表的第一个元素(最左边) |
RPOP key | 移除并获取指定列表的最后一个元素(最右边) |
LLEN key | 获取列表元素数量 |
LRANGE key start end | 获取列表 start 和 end 之间 的元素 |
PUSH和POP的用法
RPUSH myList value1
(integer) 1
RPUSH myList value2 value3
(integer) 3
LPOP myList
"value1"
LRANGE myList 0 1
1) "value2"
2) "value3"
LRANGE myList 0 -1
1) "value2"
2) "value3"
LRANGE用法
RPUSH myList value1 value2 value3
(integer) 3
LRANGE myList 0 1
1) "value1"
2) "value2"
LRANGE myList 0 -1
1) "value1"
2) "value2"
3) "value3"
//通过 LLEN 查看链表长度:
LLEN myList
(integer) 3
应用场景
要求顺序的业务。