您的位置:首页 > 汽车 > 新车 > 桂林北站到龙脊梯田_智能建筑网站_电商运营推广是做什么的_服务营销论文

桂林北站到龙脊梯田_智能建筑网站_电商运营推广是做什么的_服务营销论文

2025/5/16 10:12:01 来源:https://blog.csdn.net/yanghaitao5000/article/details/146545511  浏览:    关键词:桂林北站到龙脊梯田_智能建筑网站_电商运营推广是做什么的_服务营销论文
桂林北站到龙脊梯田_智能建筑网站_电商运营推广是做什么的_服务营销论文

Redis(Remote Dictionary Server)作为高性能的键值存储系统,凭借其丰富的数据类型和原子性操作,成为现代分布式系统中不可或缺的组件。

1、Redis支持的数据类型

Redis支持的数据类型可归纳为以下9类:

  1. String(字符串)
  2. Hash(哈希表)
  3. List(列表)
  4. Set(集合)
  5. Sorted Set(有序集合)
  6. Bitmap(位图)
  7. HyperLogLog(基数统计)
  8. Geospatial(地理空间)
  9. Stream(流)

2、Go 语言对这些常见数据类型的读写示例

字符串(String)

package mainimport ("fmt""github.com/go-redis/redis/v8"
)func main() {client := redis.NewClient(&redis.Options{Addr: "localhost:6379",})// 写入字符串err := client.Set(ctx, "key1", "value1", 0).Err()if err != nil {fmt.Println("写入错误:", err)}// 读取字符串value, err := client.Get(ctx, "key1").Result()if err != nil {fmt.Println("读取错误:", err)}fmt.Println("读取结果:", value)
}

哈希(Hash)

func main() {// 写入哈希err := client.HSet(ctx, "hash1", "field1", "value1", "field2", "value2").Err()if err != nil {fmt.Println("写入错误:", err)}// 读取哈希result, err := client.HGetAll(ctx, "hash1").Result()if err != nil {fmt.Println("读取错误:", err)}fmt.Println("读取结果:", result)
}

集合(Set)

func main() {// 写入集合_, err := client.SAdd(ctx, "set1", "value1", "value2", "value3").Result()if err != nil {fmt.Println("写入错误:", err)}// 读取集合result, err := client.SMembers(ctx, "set1").Result()if err != nil {fmt.Println("读取错误:", err)}fmt.Println("读取结果:", result)
}

有序集合(Sorted Set)

func main() {// 写入有序集合z := &redis.Z{Score: 10, Member: "value1"}_, err := client.ZAdd(ctx, "zset1", z).Result()if err != nil {fmt.Println("写入错误:", err)}// 读取有序集合result, err := client.ZRangeWithScores(ctx, "zset1", 0, -1).Result()if err != nil {fmt.Println("读取错误:", err)}fmt.Println("读取结果:", result)
}

3、什么是持久化

持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

4、Redis 持久化方式

Redis支持RDB和AOF两种持久化机制:

4.1、RDB(快照方式)

RDB(快照方式): RDB方式是一种快照式的持久化方法,将某一时刻的数据持久化到磁盘中。这种方式就是将内存中数据以快照的方式写入到二进制文件中 ,默认的文件名为dump.rdb

RDB 配置:

 Redis 的配置文件redis.conf中,可以对 RDB 持久化进行相关配置。比如:

save 900 1​
save 300 10​
save 60 10000

上述配置表示:在 900 秒内,如果至少有 1 个键发生了变化,就触发一次 RDB 持久化;在 300 秒内,如果至少有 10 个键发生了变化,触发 RDB 持久化;在 60 秒内,如果至少有 10000 个键发生了变化,也触发 RDB 持久化。​

RDB 优点:

RDB是一个紧凑的单一文件,方便传送,适用于灾难恢复。

与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些。

RDB 缺点:

RDB 持久化是按照一定的时间间隔进行的,如果在两次持久化之间 Redis 发生故障,那么这期间的数据将会丢失。RDB方式需要保存珍整个数据集,是一个比较繁重的工作,通常需要设置5分钟或者更久做一次完整的保存。

4.2、AOF(日志追加)

AOF(日志追加): AOF方式是将执行过的写指令记录下来,当 Redis 重启时,会重新执行 AOF 文件中的命令,从而恢复到故障前的数据状态。这种方式 redis 会将每一个收到的写命令都通过 write 函数追加到文件中

(默认appendonly.aof)

AOF 配置

在redis.conf文件中,通过修改以下配置来启用和配置 AOF 持久化:

appendonly yes​
appendfsync everysec

appendonly yes表示启用 AOF 持久化。appendfsync参数用于设置 AOF 文件的同步策略,有三个可选值:​
always:每执行一条写命令,就立即将其同步到 AOF 文件中,这种方式可以保证数据的完整性,但会影响 Redis 的性能,因为频繁的磁盘 I/O 操作会带来较大的开销。​
everysec:每秒将缓冲区中的写命令同步到 AOF 文件中,这是默认的配置值,在性能和数据安全性之间取得了较好的平衡。​
no:由操作系统决定何时将缓冲区中的写命令同步到 AOF 文件中,这种方式性能最高,但数据安全性最低,因为在操作系统缓冲区数据还未同步到磁盘时,如果服务器发生故障,数据可能会丢失。​

AOF 优点:

  • 数据安全性高:由于 AOF 是实时记录写命令,相比 RDB,它可以最大程度地减少数据丢失,在生产环境中更适合对数据完整性要求较高的场景。​
  • 服务性能影响小:AOF只是追加日志文件,因此对服务器性能影响较小,速度比RDB要快,消耗的内存较少。

AOF 缺点:

  • AOF 文件体积大:随着时间的推移,AOF 文件会不断增大,因为它记录了所有的写命令。这不仅会占用大量的磁盘空间,还会影响数据恢复的速度。即使通过AOF重写(通过删除 AOF 文件中冗余的命令,将其压缩成一个较小的文件),文件体积仍然很大。
  • 数据恢复慢:在恢复数据时,Redis 需要逐条执行 AOF 文件中的命令,相比 RDB 直接加载内存快照文件,AOF 的恢复速度较慢,尤其是当 AOF 文件非常大时。

5、RDB持久化触发机制

触发RDB持久化过程分为手动触发和自动触发:

5.1、手动触发

手动触发持久化的操作有二个:save和bgsave。它们主要区别体现在:是否阻塞 Redis 主线程的执行。

5.2、自动触发

自动触发持久化,本质是 Redis 通过判断,如果满足设置的触发条件,自动执行一次 bgsave 命令。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com