redis存储新闻列表_Redis详解(一)

本文主要介绍了Redis,一个高性能的Key-Value数据库,详细讲述了Redis的作用,如缓存、消息队列、计数器等。接着讲解了Redis的安装步骤,包括单机版的安装。接着详细阐述了Redis的数据类型,如String、Hash、List、Set和SortedSet。最后,文章讨论了Redis的配置,特别是数据持久化方案,包括RDB和AOF两种方式及其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1fb61807724c667f7db3847c535ddd8e.png

【75】

一、 Redis 介绍

1 Redis 简介

Remote Dictionary Server(Redis)是一个开源的使用 ANSI C 语言编写、支持网络、可

基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map),

列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

2Redis作用

1、缓存数据

最常用,对经常需要查询且变动不是很频繁的数据 常称作热点数据。

2、消息队列

相当于消息订阅系统,比如ActiveMQ、RocketMQ。如果对数据有较高一致性要求时,还是建议使用MQ。

3、计数器

比如统计点击率、点赞率,Redis具有原子性,可以避免并发问题。

4、电商网站信息

大型电商平台初始化页面数据的缓存。比如去哪儿网购买机票的时候首页的价格和你点进去的价格会有差异。

5、热点数据

比如新闻网站实时热点、微博热搜等,需要频繁更新。总数据量比较大的时候直接从数据库查询会影响性能。

Redis特点

  • 内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。
  • 支持事务

二、 安装 Redis 单机版

第一步 需要在 linux 系统中安装 gcc 命令:yum install -y gcc-c++

第二步 需要将下载好的 redis 压缩包添加到 linux 服务器中 版本:redis-3.0.0.tar.gz redis 的版本:副版本号奇数版本号是测试版,不建议在生产环境中使用。 偶数版本时稳定版建议在生产环境中使用。 3.0 版本更新比较大。集成了集群技术

第三步 解压压缩包 命令:tar -zxvf redis......

第四步 编译 redis 命令:进入 redis 的解压完毕的根目录下 执行命令:make

第五步 安装 redis 命 令 : 进 入 redis 的 解 压 完 毕 的 根 目 录 下 , 执 行 命 令 : make install PREFIX=/usr/local/redis

第六步:启动 redis 1,前端启动 在 bin 目录下执行命令: ./redis-server (ctrl+c)退出 redis

2.后端启动 (1)先将 redis 解压目录下的 redis.conf 文件拷贝到 安装好的 redis 的 bin 目录下 命令:cp redis.conf /usr/local/redis/bin

(2)修改拷贝过来的 redis.conf 配置文件 命令:vim redis.conf 将 daemonize no 改为 yes

(3)启动 redis 在 bin 目录下执行命令:./redis-server redis.conf

(4)查看 redis 启动是否成功 输入命令:ps aux|grep redis

(5) 关闭 redis 的命令 ./redis-cli shutdown

第七步:测试 redis 在 bin 目录下启动 redis 自带的客户端 ./redis-cli 常见 redis 命令: ping--->pong

三、 Redis 数据类型

1 String(字符串)

Redis 字符串是字节序列。Redis 字符串是二进制安全的,这意味着他们有一个已知的 长度没有任何特殊字符终止,所以你可以存储任何东西,512 兆为上限 示例: redis 127.0.0.1:6379> SET name kevin OK redis 127.0.0.1:6379> GET name "kevin"

incr 让当前键值以 1 的数量递增,并返回递增后的值

incrby 可以指定参数一次增加的数值,并返回递增后的值 decr 让当前键值以 1 的数量递减 并返回递减后的值

decrby 可以指定参数一次递减的数值,并返回递减后的值

incrbyfloat 可以递增一个双精度浮点数

append 作用是向键值的末尾追加 value。如果键不存在则将该键的值设置为 value。返 回值是追加后字符串的总长度。

mget/mset 作用与 get/set 相似,不过 mget/mset 可以同时获得/设置多个键的键值 del 根据 key 来删除 value flushdb 清除当前库的所有数据

77e38c40d84319e88c84a393659fc1b1.png

fe98094ea4753bf0e861b3a797522f15.png

2 Hash(hash 表)

2a94475549fd3df138e9fd212e64f1fe.png

Redis 的哈希是键值对的集合。 Redis 的哈希值是字符串字段和字符串值之间的映射, 因此它们被用来表示对象 示例:

redis 127.0.0.1:6379> HSET key field value

OK

redis 127.0.0.1:6379> HGET key field value

hset 存储一个哈希键值对的集合 hset key field value

hget 获取一个哈希键的值 hget key field

hmset 存储一个或多个哈希是键值对的集合

hmset key field1 value1 ......fieldN keyN

hmget 获取多个指定的键的值

hmget key field1 ... fieldN

hexists 判断哈希表中的字段名是否存在 如果存在返回 1 否则返回 0

hexists key field

hdel 删除一个或多个字段 hdel key field

hgetall 获取一个哈希是键值对的集合 hgetall key

hvals 只返回字段值 hvals key

hkeys 只返回字段名 hkeys key

hlen 返回 key 的 hash 的元素个数 hlen key

eecb87d0772a8323bb048b2633da1049.png

3 List(链表)

c71dcfae3ec80ef66b02b881a21b8a8e.png

Redis 的链表是简单的字符串列表,排序插入顺序。您可以添加元素到 Redis 的列表的 头部或尾部 示例:

redis 127.0.0.1:6379> lpush tutoriallist redis 
(integer) 1 
redis 127.0.0.1:6379> lpush tutoriallist mongodb 
(integer) 2 
redis 127.0.0.1:6379> lpush tutoriallist rabitmq 
(integer) 3 
redis 127.0.0.1:6379> lrange tutoriallist 0 10 
1) "rabitmq" 
2) "mongodb" 
3) "redis 
  • lpush key value 向链表左侧添加
  • rpush key value 向链表右侧添加
  • lpop key 从左边移出一个元素
  • rpop key 从右边移出一个元素

llen key 返回链表中元素的个数 相当于关系型数据库中 select count(*) lrange key start end

lrange 命令将返回索引从 start 到 stop 之间的所有元素。Redis 的列 表起始索引为 0。 lrange 也支持负索引 lrange nn -2 -1 如 -1 表示最右边第一个元素 -2 表示最右边第二 个元素,依次类推。

lindex key indexnumber 如果要将列表类型当做数组来用,lindex 命令是必不可少的。 lindex 命令用来返回指定索引的元素,索引从 0 开始

如果是负数表示从右边开始计算的索引,最右边元素的索引是-1。 Lset key indexnumber value 是另一个通过索引操作列表的命令,它会将索引为 index 的元素赋值为 value。

5c1692d9c165fafcaa5f598b9ac32bd7.png

4 Set(集合)

d7a9fd18d0d6ff86a5922bc5e9b73edb.png

Redis 的集合是字符串的无序集合。示例:

redis 127.0.0.1:6379> sadd tutoriallist redis 
(integer) 1 
redis 127.0.0.1:6379> sadd tutoriallist mongodb 
(integer) 1 
redis 127.0.0.1:6379> sadd tutoriallist rabitmq 
(integer) 1 
redis 127.0.0.1:6379> sadd tutoriallist rabitmq 
(integer) 0 redis 127.0.0.1:6379> smembers tutoriallist 
1) "rabitmq" 
2) "mongodb" 
3) "redis" 

sadd key value 添加一个 string 元素到,key 对应的 set 集合中,成功返回 1,如果元素已经

在集合中返回 0

scard key 返回 set 的元素个数,如果 set 是空或者 key 不存在返回 0

smembers key 返回 key 对应 set 的所有元素,结果是无序的

sismember key value 判断 value 是否在 set 中,存在返回 1,0 表示不存在或者 key 不存 在

srem key value 从 key 对应 set 中移除给定元素,成功返回 1,如果 value 在集合中不存 在或者 key 不存在返回 0

0ecc583e482fb7dbd128019f7056b63b.png

5 SortedSet(有序集合)zset

Redis 的有序集合类似于 Redis 的集合,字符串不重复的集合。 示例:

redis 127.0.0.1:6379> zadd tutoriallist 0 redis 
(integer) 1 
redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb 
(integer) 1 
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq 
(integer) 1 
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq 
(integer) 0 
redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000 
1) "redis" 
2) "mongodb" 
3) "rabitmq" 

zadd key score value 将一个或多个 value 及其 socre 加入到 set 中

zrange key start end 0 和-1 表示从索引为 0 的元素到最后一个元素(同 LRANGE 命令 相似)

zrange key 0 -1 withscores 也可以连同 score 一块输出,使用 WITHSCORES 参数 zremrangebyscore key start end 可用于范围删除操作

a1ed7fa612205c741e204c70009a44cc.png

6 Redis 中的其他命令

ping 测试 redis 是否链接 如果已链接返回 PONG

echo value 测试 redis 是否链接 如果已链接返回 echo 命令后给定的值

keys * 返回所有的 key 可以加*通配

exists key 判断 string 类型一个 key 是否存在 如果存在返回 1 否则返回 0

expire key time(s) 设置一个 key 的过期时间 单位秒。时间到达后会删除 key 及 value

ttl key 查询已设置过期时间的 key 的剩余时间 如果返回-2 表示该键值对已经被删除

persist 移除给定 key 的过期时间

select dbindex 选择数据库(0-15)

move key dbIndex 将当前数据库中的 key 转移到其他数据库中 dbsize 返回当前数据库中的 key 的数目

info 获取服务器的信息和统计

flushdb 删除当前选择的数据库中的 key

flushall 删除所有数据库中的所有

key quit 退出连接

99507eb1a471d9954c353969774548e3.png

四、 Redis 的配置以及持久化方案

1 redis.conf 文件

8abe513d262b6367752463c0dbbc07d7.png

46fee9bf87746a695c0da0c4942742a3.png

4e62f1e85ea2ef383519bc960ed05caf.png

5bce64b5d8a326e58e0931aa816faad3.png

4da906acbd2ea022729893f93adc358e.png

7f90b981b4ad0ece501d0216a20b5669.png

2eaf59a51da9dc860753c3657d0d78bf.png

24c69005103ed339f8b07890cb0c3f80.png

2 Redis 的数据持久化

2.1 RDB 方式

对内存中数据库状态进行快照

RDB 方式:将 Redis 在内存中的数据库状态保存到磁盘里面,RDB 文件是一个经过压 缩的二进制文件,通过该文件可以还原生成 RDB 文件时的数据库状态(默认下,持久化到 dump.rdb 文件,并且在 redis 重启后,自动读取其中文件,据悉,通常情况下一千万的字 符串类型键,1GB 的快照文件,同步到内存中的 时间是 20-30 秒)

RDB 的生成方式:

1)执行命令手动生成 有两个 Redis 命令可以用于生成 RDB 文件,一个是 SAVE,另一个是 BGSAVE SAVE 命令会阻塞 Redis 服务器进程,直到 RDB 文件创建完毕为止,在服务器进程阻塞期间,服 务器不能处理任何命令请求,BGSAVE 命令会派生出一个子进程,然后由子进程负责创建 RDB 文件,服务器进程(父进程)继续处理命令请求,创建 RDB 文件结束之前,客户端发 送的 BGSAVE 和 SAVE 命令会被服务器拒绝

2)通过配置自动生成 可以设置服务器配置的 save 选项,让服务器每隔一段时间自动执行一次 BGSAVE 命 令,可以通过 save 选项设置多个保存条件,但只要其中任意一个条件被满足,服务器就会 执行 BGSAVE 命令

例如: save 900 1 save 300 10 save 60 10000

那么只要满足以下三个条件中的任意一个,BGSAVE 命令就会被执行

  • 服务器在 900 秒之内,对数据库进行了至少 1 次修改
  • 服务器在 300 秒之内,对数据库进行了至少 10 次修改
  • 服务器在 60 秒之内,对数据库进行了至少 10000 次修改

2.2 AOF 方式

AOF 持久化方式在 redis 中默认是关闭的,需要修改配置文件开启该方式。

AOF:把每条命令都写入文件,类似 mysql 的 binlog 日志

AOF 方式:是通过保存 Redis 服务器所执行的写命令来记录数据库状态的文件。

AOF 文件刷新的方式,有三种:

appendfsync always - 每提交一个修改命令都调用 fsync 刷新到 AOF 文件,非常非常 慢,但也非常安全

appendfsync everysec - 每秒钟都调用 fsync 刷新到 AOF 文件,很快,但可能会丢失 一秒以内的数据

appendfsync no - 依靠 OS 进行刷新,redis 不主动刷新 AOF,这样最快,但安全性就 差 默认并推荐每秒刷新,这样在速度和安全上都做到了兼顾

AOF 数据恢复方式 服务器在启动时,通过载入和执行 AOF 文件中保存的命令来还原服务器关闭之前的数 据库状态,具体过程:

载入 AOF 文件

创建模拟客户端

从 AOF 文件中读取一条命令

使用模拟客户端执行命令

循环读取并执行命令,直到全部完成

如果同时启用了 RDB 和 AOF 方式,AOF 优先,启动时只加载 AOF 文件恢复数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值