文章目录
- 简介
- 安装
- 常用命令介绍
-
- 删除key通用命令
- [string 类型](#string 类型)
- [List 类型](#List 类型)
- [Hash 类型](#Hash 类型)
- [Set 类型](#Set 类型)
- redis过期策略
简介
Redis 是一种开源内存缓存数据库,可以用作数据库、缓存、消息代理和流引擎。Redis 提供数据结构,例如 string、hash、list、set、带范围查询的排序集、位图、超级日志、地理空间索引和流。Redis 具有内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供高可用性。
可以对这些类型运行原子操作 ,例如附加到字符串; 增加哈希中的值;将元素推入列表;计算集合的交、 并、差;或获取排序集中排名最高的成员。
为了实现最佳性能,Redis 使用 内存数据集。根据用户场景,Redis 通过定期将数据集转储到磁盘 或将每个命令附加到基于磁盘的日志来持久保存数据。如果只需要内存缓存,还可以禁用磁盘持久性。
Redis 支持异步复制,具有非阻塞同步和自动重新连接功能。
安装
大多数 Linux 发行版都提供了 Redis 软件包。
Centos安装方法如下:
yum install redis
如果正在运行一个非常小的发行版(例如 Docker 容器),可能需要安装lsb-release,安装最新版命令如下:
apt install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
使用redis-cli进入命令行界面,如果redis设置了密码,进入命令行命令如下
redis-cli -a "password"
常用命令介绍
删除key通用命令
del mykey
1、注意:这种删法对小key无问题,但是对于热点key、大key可能会造成cpu抖动,影响业务稳定性,建议使用正常消费逻辑消费处理
2、在正常业务使用中,应避免使用模糊查询/删除,此处将对模糊查询/删除不做介绍
string 类型
redis> GET nonexisting
(nil)
redis> SET mykey "Hello"
"OK"
redis> GET mykey
"Hello"
redis>
List 类型
LPUSH
将指定值插入存储列表的头部key。如果key不存在,则在执行推送操作之前将其创建为空列表。
lPOP
删除并返回存储在 的列表的第一个元素key。
LRANGE
LRANGE key start stop
返回存储列表中的指定元素key。偏移量start和stop是从零开始的索引,0是列表的第一个元素(列表的头部),1是下一个元素,依此类推。
这些偏移量也可以是负数,表示从列表末尾开始的偏移量。例如,-1是列表的最后一个元素、-2倒数第二个元素等等。谨慎使用
redis> LPUSH mylist "Hello" "World"
(integer) 2
redis> LPOP mylist
"Hello"
redis> LLEN mylist
(integer) 1
redis> LRANGE mylist 0 -1
1) "World"
Hash 类型
-
HSET
将设置hash中key的值。
此命令会覆盖哈希中存在的指定key的值。如果key不存在,则创建一个包含哈希值的新密钥。 -
HGET
获取hash中单个key的值 -
HGETALL
获取hash中所有key和值,在返回值中,每个字段名称后面都跟着它的值,因此返回的长度是哈希大小的两倍。谨慎使用 -
HDEL
删除hash中指定key的值,如果不存在则视为空值,并返回0 -
HLEN
返回存储在散列中包含的key的数量。redis> HSET myhash field1 "Hello"
(integer) 1
redis> HGET myhash field1
"Hello"
redis> HSET myhash field2 "Hi" field3 "World"
(integer) 2
redis> HGET myhash field2
"Hi"
redis> HGET myhash field3
"World"
redis> HGETALL myhash- "field1"
- "Hello"
- "field2"
- "Hi"
- "field3"
- "World"
Set 类型
set集合和list列表十分的相似,都可以存储多个key。但是list列表可以存储重复值,而set集合中不可重复。
-
SREM
从集合中删除指定的成员key,如果key不存在,则将其视为空集,并且此命令返回 0。 -
SMEMBERS
获取集合内全部的元素,成功返回全部元素,如果数据量很大,这条命令要谨慎使用redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SADD myset "World"
(integer) 0
redis> SMEMBERS myset- "Hello"
- "World"
redis> SREM myset "Hello"
(integer) 1
redis过期策略
过期策略是Redis一个重要的功能,无论存储的值的类型如何,它都可设置过期。key超时时间,也称为"生存时间"或"TTL"。当生存时间过去时,key将自动销毁。
关于key过期的一些重要注意事项:
-
可以使用秒或毫秒精度进行设置。
-
过期时间分辨率始终为 1 毫秒。
-
有关过期的信息会被复制并保留在磁盘上,当 Redis 服务器保持停止状态时,时间实际上已经过去(这意味着 Redis 会保存密钥过期的日期)。
使用以下EXPIRE命令设置key的过期时间:
> set key some-value
OK
> expire key 5
(integer) 1
> get key (immediately)
"some-value"
> get key (after some time)
(nil)
Redis过期事件的时间安排
Redis 通过两种方式使与生存时间相关的key过期:
当通过命令访问key并发现key已过期时。
通过后台系统在后台逐步查找过期key,收集从未访问过的key。
当一个key被访问并且被上述系统之一发现过期时,就会生成这些事件expired,因此不能保证 Redis 服务器在key立刻过期时执行清理动作。
如果没有对key进行连续操作,并且有很多key设置了TTL,则key清理的时间与expired生成过期事件的时间之间存在显着的延迟。
基本上,expired事件是在 Redis 服务器删除key时生成的。
redis驱逐策略
maxmemory当达到限制时,Redis 将根据以下策略实施不同的行动。
可以使用的策略:
noeviction:达到内存限制时不会保存新值。
allkeys-lru:保留最近使用的密钥;删除最近最少使用 (LRU) 的键
allkeys-lfu:保留常用的键;删除最不常用 (LFU) 的键
volatile-lru:删除最近最少使用的键,并将expire字段设置为true,仅逐出设置了过期时间的数据
volatile-lfuexpire :删除字段设置为 的最不常用的键true。
allkeys-random:随机删除键以为添加的新数据腾出空间。
volatile-random:随机删除expire字段设置为 的键true。
volatile-ttl:删除expire字段设置为true且最短剩余生存时间 (TTL) 值的键。
根据应用程序的访问模式,选择正确的逐出策略非常重要,但是可以在应用程序运行时在运行时重新配置策略,并使用 Redis 输出监视缓存未命中和命中的数量来调整INFO的设置。