Redis知识梳理
Redis是速度非常快的非关系型内存键值数据库,可以存储键和五种不同类型的值之间的映射。
键的类型只能为字符串,值支持五种数据类型为:字符串、列表、集合、有序集合、散列表。
- STRING
set hello world
OKget hello
“world”del hello
(integer) 1get hello
(nil)
- LIST
rpush list-key item
(integer) 1
rpush list-key item2
(integer) 2
rpush list-key item
(integer) 3lrange list-key 0 -1
1) “item”
2) “item2”
3) “item”lindex list-key 1
“item2”lpop list-key
“item”lrange list-key 0 -1
1) “item2”
2) “item”
- SET
sadd set-key item
(integer) 1
sadd set-key item2
(integer) 1
sadd set-key item3
(integer) 1
sadd set-key item
(integer) 0smembers set-key
1) “item”
2) “item2”
3) “item3”sismember set-key item4
(integer) 0
sismember set-key item
(integer) 1srem set-key item2
(integer) 1
srem set-key item2
(integer) 0smembers set-key
1) “item”
2) “item3”
- HASH
hset hash-key sub-key1 value1
(integer) 1
hset hash-key sub-key2 value2
(integer) 1
hset hash-key sub-key1 value1
(integer) 0hgetall hash-key
1) “sub-key1”
2) “value1”
3) “sub-key2”
4) “value2”hdel hash-key sub-key2
(integer) 1
hdel hash-key sub-key2
(integer) 0hget hash-key sub-key1
“value1”hgetall hash-key
1) “sub-key1”
2) “value1”
- ZSET
zadd zset-key 728 member1
(integer) 1
zadd zset-key 982 member0
(integer) 1
zadd zset-key 982 member0
(integer) 0zrange zset-key 0 -1 withscores
1) “member1”
2) “728”
3) “member0”
4) “982”zrangebyscore zset-key 0 800 withscores
1) “member1”
2) “728”zrem zset-key member1
(integer) 1
zrem zset-key member1
(integer) 0zrange zset-key 0 -1 withscores
1) “member0”
2) “982”
Redis 可以为每个键设置过期时间,当键过期时,会自动删除该键。
对于散列表这种容器,只能为整个键设置过期时间(整个散列表),而不能为键里面的单个元素设置过期时间。
可以设置内存最大使用量,当内存使用量超出时,会施行数据淘汰策略。
作为内存数据库,出于对性能和内存消耗的考虑,Redis 的淘汰算法实际实现上并非针对所有 key,而是抽样一小部分 key 从中选出被淘汰key。
使用 Redis 缓存数据时,为了提高缓存命中率,需要保证缓存数据都是热点数据。可以将内存最大使用量设置为热点数据占用的内存量,然后启用allkeys-lru淘汰策略,将最近最少使用的数据淘汰。
Redis是内存型数据库,为了保证数据在断电后不会丢失,需要将内存中的数据持久化到硬盘上。
通过使用 slaveof host port 命令来让一个服务器成为另一个服务器的从服务器。一个从服务器只能有一个主服务器,并且不支持主主复制。
分片可以将数据划分为多个部分,可以将数据存储到多台机器里面,也可以从多台机器里面获取数据,这种方法在解决某些问题时可以获得线性级别的性能提升。
Redis 服务器是一个事件驱动程序。
一个事务包含了多个命令,服务器在执行事务期间,不会改去执行其它客户端的命令请求。
事务中的多个命令被一次性发送给服务器,而不是一条一条发送,这种方式被称为流水线,它可以减少客户端与服务器之间的网络通信次数从而提升性能。Redis最简单的事务实现方式是使用 MULTI和EXEC命令将事务操作包围起来。