Redis安装、命令行使用及key过期简介

文章目录

简介

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

    1. "field1"
    2. "Hello"
    3. "field2"
    4. "Hi"
    5. "field3"
    6. "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

    1. "Hello"
    2. "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的设置。

相关推荐
芊言芊语9 分钟前
分布式缓存服务Redis版解析与配置方式
redis·分布式·缓存
攻城狮的梦1 小时前
redis集群模式连接
数据库·redis·缓存
Amagi.4 小时前
Redis的内存淘汰策略
数据库·redis·mybatis
无休居士5 小时前
【实践】应用访问Redis突然超时怎么处理?
数据库·redis·缓存
.Net Core 爱好者5 小时前
Redis实践之缓存:设置缓存过期策略
java·redis·缓存·c#·.net
码爸8 小时前
flink 批量压缩redis集群 sink
大数据·redis·flink
微刻时光9 小时前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
丁总学Java10 小时前
如何使用 maxwell 同步到 redis?
数据库·redis·缓存
蘑菇蘑菇不会开花~10 小时前
分布式Redis(14)哈希槽
redis·分布式·哈希算法
爱吃南瓜的北瓜10 小时前
Redis的Key的过期策略是怎样实现的?
数据库·redis·bootstrap