千家信息网

Redis高级应用的示例分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下Redis高级应用的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Redis高级实用特性分6部分
千家信息网最后更新 2026年11月02日Redis高级应用的示例分析

小编给大家分享一下Redis高级应用的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Redis高级实用特性分6部分:

1、安全性

设置客户端连接后进行任何其他操作时,需要使用密码

修改redis.conf配置文件,requirepass password指令就是用来设置密码的

修改完配置文件后要重启redis服务

重启后,发现在命令行执行操作时,会有以下提示。此时需要用auth password 来授权

127.0.0.1:6379> keys *(error) NOAUTH Authentication required.127.0.0.1:6379> auth redis123OK127.0.0.1:6379> keys *(empty list or set)

如果不希望在命令行输入密码来完成授权,则可以在登录客户端时,输入密码

[root@localhost init.d]# /usr/local/redis/bin/redis-cli -a redis123127.0.0.1:6379> keys *(empty list or set)

2、主从复制

Redis主从复制配置和使用非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本

主从复制的工作原理:

1、slave与master建立连接后,发送sync同步命令

2、master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存

3、后台完成保存后,将此文件发送给slave

4、slave将此文件保存到硬盘上

主从复制的特点:

a、Master可以拥有多个slave

b、多个slave可以连接同一个master外,还可以连接到其他slave(这个特性是为了防止master出现故障后,slave无法进行同步,如果slave还连接了其他slave,那么master挂掉后,这个slave就会变成master,接管服务)

c、主从复制不会阻塞master,在同步数据时,master可以继续处理client请求

d、提高系统的伸缩性

主从复制的配置:

在slava的配置文件中加入以下配置:

slaveof 192.168.1.1 6379 #指定master的ip和端口

masterauth PASSWORD # 这是master的密码

注意:主从配置的注意事项:

master、slave的配置文件中bind 127.0.0.1 这条配置改成eth0网卡的ip地址,否则redis的端口默认监听在127.0.0.1上。这样slave 到master的端口不通。

更改bind 的IP地址后,进入客户端时使用命令:

$redis_home/bin/redis-cli -h 172.16.206.140

即使用-h参数指定eth0网卡的IP地址,默认是127.0.0.1

3、事务处理

Redis对事务的处理目前还比较简单,Redis只能保证一个client发起的事物中的命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的命令

例如:

172.16.206.142:6379> set age 27OK172.16.206.142:6379> 172.16.206.142:6379> get age"27"172.16.206.142:6379> multiOK172.16.206.142:6379> set age 37QUEUED172.16.206.142:6379> set age 47\QUEUED172.16.206.142:6379> set age 47QUEUED172.16.206.142:6379> exec1) OK2) OK3) OK172.16.206.142:6379> get age"47"

discard:取消一个事务

172.16.206.142:6379> get age"47"172.16.206.142:6379> multiOK172.16.206.142:6379> set age 100QUEUED172.16.206.142:6379> set age 200QUEUED172.16.206.142:6379> discardOK172.16.206.142:6379> get age"47"

事务回滚:

Redis不支持事务回滚,当队列中有两个事务,一个完成了另外一个没有完成,那么没有完成的那个事务不会影响整个事务。

172.16.206.142:6379> set name zengOK172.16.206.142:6379> get age"47"172.16.206.142:6379> multiOK172.16.206.142:6379> incr ageQUEUED172.16.206.142:6379> incr nameQUEUED172.16.206.142:6379> exec1) (integer) 482) (error) ERR value is not an integer or out of range172.16.206.142:6379> get name"zeng"172.16.206.142:6379> 172.16.206.142:6379> get age"48"

乐观锁:

watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key,这样就可以对指定的key加乐观锁了。

4、持久化机制

Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。Redis支持两种持久化方式:

1、snapshotting(快照)也是默认方式

2、Append-only file(aof)的方式

Snapshotting方式:

快照是默认的持久化方式,这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.可以通过配置设置自动做持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照

save 900 1 #900秒内如果超过1个key被修改,则发起快照保存

save 300 10 #300秒内如果超过10个key被修改,则发起快照保存

save 60 10000

aof方式:

由于快照方式是在一定时间间隔内做一次,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。

aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过 write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容

appendonly yes //启用aof持久化方式

#appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化

appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中

#appendfsync no //完全依赖os,性能最好,持久化没有保证

5、发布订阅消息

发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,Redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此消息

测试:

Redis server开三个会话窗口,并进入redis客户端命令行

终端一订阅tv1、tv2两个频道

> subscribe tv1 tv2Reading messages... (press Ctrl-C to quit)1) "subscribe"2) "tv1"3) (integer) 11) "subscribe"2) "tv2"3) (integer) 2

终端二订阅tv2频道

> subscribe tv1Reading messages... (press Ctrl-C to quit)1) "subscribe"2) "tv1"3) (integer) 1

终端三向tv1频道发布消息hello

>publish tv1 hello(integer) 2

结果:

终端一、二都收到消息:

1) "message"2) "tv1"3) "hello"

6、虚拟内存的使用

Redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。

配置如下:

vm-enabled yes #开启vm功能

really-use-vm yes #确定使用虚拟内存,这条配置需要手动添加

vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径

vm-max-memory 1000000 #redis使用的最大内存上线

vm-page-size 32 #每个页面的大小32字节

vm-pages 134217728 #最多使用多少个页面

vm-max-threads 4 #用于执行value对象换入的工作线程数量

以上是"Redis高级应用的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

命令 内存 数据 配置 文件 方式 事务 快照 消息 订阅 主从 数据库 多个 密码 客户 客户端 磁盘 类型 终端 频道 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网企业 新华互联网科技学校 今日互联网科技 北京互联网科技有限公司 善班互联网科技 万易互联网科技有限公司 电子科技大学互联网 亿账通互联网科技 科技大学互联网专业好不好 济南和联互联网科技有限公司 济南华为互联网科技产业总部基地 中国科技互联网公司收入 阿里互联网科技公司 上海宁丞科技互联网 世界互联网科技公司市值排名 互联网科技研发水平 允成互联网科技有限公司融资 北京市互联网新科技 从那以后互联网科技有限公司 易企秀互联网科技是做什么的 互联网科技活动banner 上海互联网科技有限公司 温州喔噻互联网科技有限公司 互联网与医疗科技 工业互联网展湾科技股份有限公司 华中科技大学互联网的牛人 沐思想互联网科技有限公司 互联网风格科技公司名称 保山浩联互联网科技有限公司 长沙易易互联网科技有限公司
0