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的设置。

相关推荐
Kagol5 小时前
macOS 和 Windows 操作系统下如何安装和启动 MySQL / Redis 数据库
redis·后端·mysql
hzulwy6 小时前
Redis常用的数据结构及其使用场景
数据库·redis
ashane13147 小时前
Redis 哨兵集群(Sentinel)与 Cluster 集群对比
redis
Y第五个季节8 小时前
Redis - HyperLogLog
数据库·redis·缓存
Justice link9 小时前
企业级NoSql数据库Redis集群
数据库·redis·缓存
爱的叹息12 小时前
Spring Boot 集成Redis 的Lua脚本详解
spring boot·redis·lua
morris13119 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
爱的叹息21 小时前
spring boot集成reids的 RedisTemplate 序列化器详细对比(官方及非官方)
redis
weitinting1 天前
Ali linux 通过yum安装redis
linux·redis
纪元A梦1 天前
Redis最佳实践——首页推荐与商品列表缓存详解
数据库·redis·缓存