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

相关推荐
咖啡啡不加糖3 小时前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
MickeyCV3 小时前
使用Docker部署MySQL&Redis容器与常见命令
redis·mysql·docker·容器·wsl·镜像
肥仔哥哥19304 小时前
springCloud2025+springBoot3.5.0+Nacos集成redis从nacos拉配置起服务
redis·缓存·最新boot3集成
呼拉拉呼拉6 小时前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超6 小时前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
我命由我123458 小时前
Spring Boot 项目集成 Redis 问题:RedisTemplate 多余空格问题
java·开发语言·spring boot·redis·后端·java-ee·intellij-idea
篱笆院的狗10 小时前
如何使用 Redis 快速实现布隆过滤器?
数据库·redis·缓存
小鸡脚来咯11 小时前
redis分片集群架构
数据库·redis·架构
什么都想学的阿超11 小时前
【Redis系列 03】掌握Redis编程艺术:事务、管道与Lua脚本完全指南
redis·junit·lua
想用offer打牌14 小时前
面试官问:Redis和MySQL数据一致,为什么还需要MySQL?🤠
数据库·redis·mysql