临安城市建设公司网站刚刚邯郸发生大事了

张小明 2026/1/1 19:17:15
临安城市建设公司网站,刚刚邯郸发生大事了,网站制作合肥,设计制作简单的手机网站Redis 8.4.0 完整教程 1. Redis简介与安装 1.1 Redis是什么 Redis#xff08;Remote Dictionary Server#xff09;是一个开源的内存数据结构存储系统#xff0c;可用作数据库、缓存和消息中间件。 Redis支持多种数据结构#xff0c;如字符串、哈希、列表、集合、有序集合等…Redis 8.4.0 完整教程1. Redis简介与安装1.1 Redis是什么RedisRemote Dictionary Server是一个开源的内存数据结构存储系统可用作数据库、缓存和消息中间件。Redis支持多种数据结构如字符串、哈希、列表、集合、有序集合等并提供了丰富的操作命令。1.2 Redis 8.4.0 新特性重回自由开源阵营显著的性能与效率提升超过30项性能改进关键修复与性能优化增强的安全性更好的集群管理功能新增多项实用功能改进的内存管理增强的复制机制优化的持久化性能1.3 安装Redis 8.4.01.3.1 Linux系统安装# 下载Redis 8.4.0源代码wgethttp://download.redis.io/releases/redis-8.4.0.tar.gz# 解压源代码tarxzf redis-8.4.0.tar.gz# 进入Redis目录cdredis-8.4.0# 编译Redismake# 安装Redismakeinstall# 创建Redis配置目录mkdir-p /etc/redis# 复制默认配置文件cpredis.conf /etc/redis/1.3.1.1 配置Redis# 编辑Redis配置文件vi/etc/redis/redis.conf# 在配置文件中进行以下设置# 1. 设置Redis密码# requirepass foobared# 改为requirepass your_strong_password# 2. 允许所有远程主机访问# bind 127.0.0.1 -::1# 改为bind0.0.0.0# 3. 线程优化Redis 6.0支持多线程io-threads4io-threads-do-readsyes# 4. 设置后台运行daemonizeyes# 5. 设置日志文件路径logfile /var/log/redis/redis-server.log# 6. 设置数据目录dir/var/lib/redis# 保存并退出编辑器1.3.1.2 创建Redis数据目录和日志目录# 创建数据目录mkdir-p /var/lib/redis# 创建日志目录mkdir-p /var/log/redis# 设置目录权限chown-R redis:redis /var/lib/redischown-R redis:redis /var/log/redischmod755/var/lib/redischmod755/var/log/redis1.3.1.3 创建Redis系统用户# 创建Redis用户useradd-r -s /bin/false redis1.3.1.4 设置Redis为系统服务# 复制Redis服务脚本到系统服务目录cputils/systemd-redis_server.service /etc/systemd/system/redis-server.service# 编辑服务脚本vi/etc/systemd/system/redis-server.service# 确保以下内容正确[Unit]DescriptionRedis In-Memory Data StoreAfternetwork.target[Service]UserredisGroupredisExecStart/usr/local/bin/redis-server /etc/redis/redis.confExecStop/usr/local/bin/redis-cli -a your_strong_passwordshutdownRestartalways[Install]WantedBymulti-user.target# 保存并退出编辑器# 重新加载系统服务systemctl daemon-reload# 启动Redis服务systemctl start redis-server# 设置Redis开机自动启动systemctlenableredis-server# 检查Redis服务状态systemctl status redis-server1.3.1.5 验证Redis安装# 使用密码连接Redisredis-cli -a your_strong_password# 测试Redis连接ping# 应返回 PONG# 退出Redis客户端exit1.3.2 Windows系统安装Redis官方提供了Windows版本的安装包我们可以从redis-windows仓库下载最新的8.4.0版本。1.3.2.1 下载Redis 8.4.0 Windows版本访问Redis Windows版本的GitHub发布页面https://github.com/redis-windows/redis-windows/releases/tag/8.4.0下载适合您系统的安装包对于64位Windows系统选择redis-8.4.0-windows-x64.zip对于32位Windows系统选择redis-8.4.0-windows-x86.zip1.3.2.2 安装Redis解压下载的ZIP文件到您想要安装的目录例如C:\Redis\解压后您将看到以下主要文件redis-server.exeRedis服务器程序redis-cli.exeRedis命令行客户端redis.windows.confRedis配置文件redis-benchmark.exeRedis性能测试工具redis-check-aof.exeAOF文件检查工具redis-check-dump.exeRDB文件检查工具1.3.2.3 配置Redis打开Redis配置文件redis.windows.conf进行以下重要配置可选设置Redis密码找到requirepass行取消注释并设置密码requirepass your_strong_password设置最大内存找到maxmemory行取消注释并设置合适的内存大小maxmemory 512mb设置内存淘汰策略找到maxmemory-policy行设置合适的淘汰策略maxmemory-policy allkeys-lru1.3.2.4 启动Redis方法一临时启动命令行方式打开命令提示符cmd或PowerShell导航到Redis安装目录cd C:\Redis启动Redis服务器redis-server.exe redis.windows.conf此时Redis服务器将在当前窗口运行关闭窗口则Redis服务器停止方法二安装为Windows服务推荐以管理员身份打开命令提示符cmd或PowerShell导航到Redis安装目录cd C:\Redis安装Redis服务redis-server.exe --service-install redis.windows.conf --loglevel verbose启动Redis服务redis-server.exe --service-start停止Redis服务如需redis-server.exe --service-stop卸载Redis服务如需redis-server.exe --service-uninstall1.3.2.5 测试Redis连接打开一个新的命令提示符或PowerShell窗口导航到Redis安装目录cd C:\Redis使用Redis客户端连接到Redis服务器redis-cli.exe如果设置了密码使用以下命令认证AUTH your_strong_password测试Redis连接ping成功连接将返回PONG测试设置和获取键值SET test_key Hello Redis 8.4.0 GET test_key成功将返回Hello Redis 8.4.0退出Redis客户端exit1.3.2.6 验证Redis服务状态打开Windows服务管理器按Win R键输入services.msc然后按回车在服务列表中查找Redis服务检查服务状态确保其显示为正在运行您可以右键点击服务选择属性来修改启动类型例如设置为自动以便开机自启1.4 启动Redis# 启动Redis服务器redis-server# 使用指定配置文件启动redis-server /path/to/redis.conf# 启动Redis客户端redis-cli1.5 Redis架构图TCP连接RDBAOF主从复制客户端应用Redis服务器内存数据存储持久化模块磁盘复制模块从服务器2. Redis基础命令2.1 连接与认证# 连接到本地Redis服务器redis-cli# 连接到远程Redis服务器redis-cli -hhost-p port# 使用密码认证redis-cli -a password# 在客户端中认证AUTH password2.2 服务器信息# 获取服务器信息INFO# 获取指定部分的信息INFO server INFO clients INFO memory INFO persistence INFO replication INFO cpu INFO stats2.3 键操作命令# 设置键值对SET key value# 获取键对应的值GET key# 检查键是否存在EXISTS key# 删除键DEL key# 重命名键RENAME key newkey# 查看所有键KEYS *# 查看键的类型TYPE key# 设置键的过期时间秒EXPIRE key seconds# 设置键的过期时间毫秒PEXPIRE key milliseconds# 查看键的剩余过期时间秒TTL key# 查看键的剩余过期时间毫秒PTTL key# 移除键的过期时间PERSIST key3. Redis数据类型详解3.1 字符串(String)字符串是Redis最基本的数据类型一个键最大能存储512MB。3.1.1 基本操作# 设置字符串值SET nameRedis# 将键name的值设置为Redis# 获取字符串值GET name# 返回键name的值Redis# 批量设置多个键值对MSET key1 value1 key2 value2# 同时设置多个键值对# 批量获取多个键的值MGET key1 key2# 同时获取多个键的值# 追加字符串APPEND name 8.2.1# 追加字符串到键name的值末尾结果为Redis 8.4.0# 获取字符串长度STRLEN name# 返回键name的值的长度3.1.2 数字操作# 递增1INCR counter# 将键counter的值递增1# 递减1DECR counter# 将键counter的值递减1# 递增指定数值INCRBY counter10# 将键counter的值递增10# 递减指定数值DECRBY counter5# 将键counter的值递减5# 递增浮点数INCRBYFLOAT counter0.5# 将键counter的值递增0.53.1.3 字符串数据结构图键 name值 Redis 8.4.0键 counter值 1003.2 哈希(Hash)哈希是一个键值对集合适合存储对象。3.2.1 基本操作# 设置哈希字段值HSET user:1 nameJohn# 设置哈希user:1的name字段为John# 获取哈希字段值HGET user:1 name# 获取哈希user:1的name字段值# 设置多个哈希字段值HMSET user:1 age30cityNew York# 同时设置哈希user:1的多个字段# 获取多个哈希字段值HMGET user:1 name age city# 同时获取哈希user:1的多个字段值# 获取所有哈希字段和值HGETALL user:1# 返回哈希user:1的所有字段和值# 获取所有哈希字段HKEYS user:1# 返回哈希user:1的所有字段# 获取所有哈希值HVALS user:1# 返回哈希user:1的所有值# 获取哈希字段数量HLEN user:1# 返回哈希user:1的字段数量# 检查哈希字段是否存在HEXISTS user:1 name# 检查哈希user:1是否存在name字段# 删除哈希字段HDEL user:1 city# 删除哈希user:1的city字段3.2.2 数字操作# 哈希字段值递增HINCRBY user:1 age1# 将哈希user:1的age字段值递增1# 哈希字段值递增浮点数HINCRBYFLOAT user:1 salary100.5# 将哈希user:1的salary字段值递增100.53.2.3 哈希数据结构图nameagecity键 user:1哈希对象字段: 值John31New York3.3 列表(List)列表是简单的字符串列表按照插入顺序排序。3.3.1 基本操作# 从列表左侧插入元素LPUSH mylista# 将元素a插入到列表mylist的左侧LPUSH mylistbc# 将元素b和c插入到列表mylist的左侧# 从列表右侧插入元素RPUSH mylistd# 将元素d插入到列表mylist的右侧# 从列表左侧弹出元素LPOP mylist# 从列表mylist的左侧弹出一个元素# 从列表右侧弹出元素RPOP mylist# 从列表mylist的右侧弹出一个元素# 获取列表长度LLEN mylist# 返回列表mylist的长度# 获取列表指定范围的元素LRANGE mylist0-1# 返回列表mylist的所有元素LRANGE mylist02# 返回列表mylist的前3个元素3.3.2 列表操作进阶# 获取列表指定索引的元素LINDEX mylist1# 返回列表mylist索引为1的元素# 设置列表指定索引的元素值LSET mylist1new_value# 设置列表mylist索引为1的元素值# 在列表指定元素前插入元素LINSERT mylist BEFOREbnew_elem# 在列表mylist中元素b前插入new_elem# 在列表指定元素后插入元素LINSERT mylist AFTERbnew_elem# 在列表mylist中元素b后插入new_elem# 移除列表中指定数量的指定元素LREM mylist0a# 移除列表mylist中所有的a元素LREM mylist2b# 移除列表mylist中前2个b元素# 修剪列表只保留指定范围的元素LTRIM mylist02# 只保留列表mylist的前3个元素3.3.3 列表数据结构图键 mylist列表对象左侧cbad右侧3.4 集合(Set)集合是字符串的无序集合不允许重复元素。3.4.1 基本操作# 向集合添加元素SADD myseta# 向集合myset添加元素aSADD mysetbcd# 向集合myset添加多个元素# 从集合移除元素SREM myseta# 从集合myset移除元素a# 获取集合所有元素SMEMBERS myset# 返回集合myset的所有元素# 检查元素是否在集合中SISMEMBER mysetb# 检查元素b是否在集合myset中# 获取集合大小SCARD myset# 返回集合myset的元素数量# 从集合随机弹出一个元素SPOP myset# 从集合myset随机弹出一个元素# 从集合随机获取指定数量的元素SRANDMEMBER myset2# 从集合myset随机获取2个元素不弹出3.4.2 集合运算# 集合交集SINTER set1 set2# 返回集合set1和set2的交集# 集合并集SUNION set1 set2# 返回集合set1和set2的并集# 集合并集存储到新集合SUNIONSTORE newset set1 set2# 将集合set1和set2的并集存储到newset# 集合差集SDIFF set1 set2# 返回集合set1和set2的差集set1中有而set2中没有的元素3.4.3 集合数据结构图键 myset集合对象bcd3.5 有序集合(Sorted Set)有序集合是字符串的有序集合不允许重复元素每个元素关联一个分数(score)用于排序。3.5.1 基本操作# 向有序集合添加元素ZADD myzset1a# 向有序集合myzset添加元素a分数为1ZADD myzset2b3c# 向有序集合myzset添加多个元素# 获取有序集合元素数量ZCARD myzset# 返回有序集合myzset的元素数量# 获取有序集合指定分数范围的元素数量ZCOUNT myzset13# 返回有序集合myzset中分数在1-3之间的元素数量# 增加有序集合元素的分数ZINCRBY myzset1a# 将有序集合myzset中元素a的分数增加13.5.2 有序集合排序操作# 按分数从小到大获取元素ZRANGE myzset0-1# 返回有序集合myzset的所有元素按分数从小到大排序ZRANGE myzset02# 返回有序集合myzset的前3个元素按分数从小到大排序# 按分数从大到小获取元素ZREVRANGE myzset0-1# 返回有序集合myzset的所有元素按分数从大到小排序# 按分数从小到大获取元素及分数ZRANGE myzset0-1 WITHSCORES# 返回有序集合myzset的所有元素及分数按分数从小到大排序# 获取元素的分数ZSCORE myzseta# 返回有序集合myzset中元素a的分数# 获取元素的排名按分数从小到大从0开始ZRANK myzseta# 返回有序集合myzset中元素a的排名# 获取元素的排名按分数从大到小从0开始ZREVRANK myzseta# 返回有序集合myzset中元素a的逆序排名3.5.3 有序集合范围操作# 按分数范围获取元素从小到大ZRANGEBYSCORE myzset13# 返回有序集合myzset中分数在1-3之间的元素ZRANGEBYSCORE myzset(13# 返回有序集合myzset中分数大于1且小于等于3的元素ZRANGEBYSCORE myzset -inf inf# 返回有序集合myzset的所有元素# 按分数范围删除元素ZREMRANGEBYSCORE myzset13# 删除有序集合myzset中分数在1-3之间的元素# 按排名范围删除元素ZREMRANGEBYRANK myzset02# 删除有序集合myzset中排名0-2的元素3.5.4 有序集合数据结构图abc键 myzset有序集合对象元素: 分数2233.6 其他数据类型3.6.1 HyperLogLog用于统计基数不重复元素的数量。# 添加元素到HyperLogLogPFADD myhllabc# 向HyperLogLog myhll添加元素# 获取HyperLogLog的基数估计值PFCOUNT myhll# 返回HyperLogLog myhll的基数估计值# 合并多个HyperLogLogPFMERGE newhll hll1 hll2# 将hll1和hll2合并到newhll3.6.2 Geo用于存储地理位置信息。# 添加地理位置GEOADD cities116.407439.9042Beijing# 添加北京的经纬度GEOADD cities121.473731.2304Shanghai# 添加上海的经纬度# 计算两个地理位置的距离GEODIST citiesBeijingShanghaikm# 计算北京到上海的距离单位为公里# 根据经纬度范围获取地理位置GEORADIUS cities116.407439.9042100km# 获取北京100公里范围内的城市# 获取地理位置的经纬度GEOPOS citiesBeijing# 获取北京的经纬度3.6.3 Bitmap用于位操作。# 设置位值SETBIT mybitmap01# 设置mybitmap的第0位为1# 获取位值GETBIT mybitmap0# 获取mybitmap的第0位的值# 统计位为1的数量BITCOUNT mybitmap# 统计mybitmap中位为1的数量# 位运算BITOP AND destbitmap bitmap1 bitmap2# 对bitmap1和bitmap2进行AND运算结果存储到destbitmap4. Redis持久化4.1 持久化概述Redis提供了两种持久化方式RDBRedis Database和AOFAppend Only File。4.2 RDB持久化RDB是Redis默认的持久化方式它会在指定的时间间隔内生成数据集的快照。4.2.1 RDB配置# 900秒内至少有1个键被修改执行RDB持久化 save 900 1 # 300秒内至少有10个键被修改执行RDB持久化 save 300 10 # 60秒内至少有10000个键被修改执行RDB持久化 save 60 10000 # RDB文件名称 dbfilename dump.rdb # RDB文件存储路径 dir ./4.2.2 RDB优缺点优点适合备份和灾难恢复恢复速度比AOF快文件体积小缺点可能会丢失最后一次快照后的所有数据执行快照时会阻塞主线程4.3 AOF持久化AOF持久化会记录服务器执行的所有写操作命令并在服务器启动时通过重新执行这些命令来恢复数据。4.3.1 AOF配置# 开启AOF持久化 appendonly yes # AOF文件名称 appendfilename appendonly.aof # AOF持久化策略 # always每次写操作都持久化到磁盘 # everysec每秒持久化一次 # no由操作系统决定何时持久化 appendfsync everysec # AOF重写策略 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb4.3.2 AOF优缺点优点数据安全性更高丢失数据更少支持appendfsync everysec模式每秒持久化一次最多丢失1秒的数据AOF文件是可读的可以手动修改和恢复缺点AOF文件体积比RDB大恢复速度比RDB慢4.4 持久化选择建议场景推荐持久化方式数据安全性要求高RDB AOF主要用于缓存禁用持久化或使用RDB大数据集RDB4.5 Redis持久化架构图RDB快照写命令加载加载Redis内存数据dump.rdb文件appendonly.aof文件Redis启动5. Redis主从复制5.1 主从复制概述主从复制是Redis实现高可用的基础它允许将一个Redis服务器的数据复制到多个从服务器上。5.2 主从复制的作用数据冗余实现数据的热备份负载均衡读写分离主服务器处理写请求从服务器处理读请求故障恢复当主服务器出现故障时可以将从服务器升级为主服务器高可用基础是哨兵模式和集群模式的基础5.3 配置主从复制5.3.1 方法一修改配置文件在从服务器的配置文件中添加# 指定主服务器的IP和端口 replicaof masterip masterport # 如果主服务器有密码需要配置密码 masterauth masterpassword5.3.2 方法二使用命令在从服务器的客户端中执行# 设置主服务器REPLICAOF masterip masterport# 设置主服务器密码CONFIG SET masterauth masterpassword5.4 主从复制原理从服务器连接到主服务器发送SYNC命令主服务器收到SYNC命令后执行BGSAVE生成RDB文件并记录此时开始的所有写命令主服务器将RDB文件发送给从服务器从服务器接收并加载RDB文件恢复数据主服务器将记录的写命令发送给从服务器从服务器执行这些写命令与主服务器数据保持一致之后主服务器每次执行写命令都会将命令发送给从服务器执行5.5 主从复制架构图复制数据复制数据复制数据复制数据主服务器从服务器1从服务器2从服务器3从服务器46. Redis哨兵模式6.1 哨兵模式概述哨兵模式是Redis的高可用解决方案它可以监控Redis主从服务器并在主服务器出现故障时自动将从服务器升级为主服务器。6.2 哨兵模式的作用监控监控主从服务器是否正常运行通知当服务器出现故障时向管理员或其他应用程序发送通知自动故障转移当主服务器出现故障时自动将从服务器升级为主服务器配置管理当故障转移发生后通知客户端更新主服务器的地址6.3 配置哨兵模式6.3.1 哨兵配置文件sentinel.conf# 哨兵监听的主服务器名称为mymasterIP为127.0.0.1端口为6379投票数为2 sentinel monitor mymaster 127.0.0.1 6379 2 # 主服务器的密码 sentinel auth-pass mymaster password # 主服务器多久没有响应就认为主服务器下线毫秒 sentinel down-after-milliseconds mymaster 30000 # 故障转移超时时间毫秒 sentinel failover-timeout mymaster 1800006.3.2 启动哨兵# 启动哨兵redis-sentinel /path/to/sentinel.conf# 使用redis-server启动哨兵redis-server /path/to/sentinel.conf --sentinel6.4 哨兵模式工作原理哨兵定期向主从服务器发送PING命令检测服务器是否正常运行如果主服务器在指定时间内没有响应哨兵会将其标记为主观下线其他哨兵也会检测主服务器如果超过指定数量的哨兵都认为主服务器下线就会将其标记为客观下线哨兵们会选举出一个领导者负责执行故障转移领导者哨兵会从从服务器中选择一个最合适的升级为主服务器领导者哨兵会通知其他从服务器复制新的主服务器领导者哨兵会通知客户端更新主服务器的地址6.5 哨兵模式架构图监控监控监控复制数据复制数据通信通信通信连接连接连接哨兵1主服务器哨兵2哨兵3从服务器1从服务器2客户端7. Redis集群7.1 集群模式概述Redis集群是Redis的分布式解决方案它将数据分布在多个节点上实现了数据的分片存储和高可用。7.2 集群模式的特点数据分片将数据分布在多个节点上每个节点存储部分数据高可用性支持自动故障转移当某个节点出现故障时其他节点会自动接管其工作水平扩展可以通过添加节点来扩展集群的容量和性能无中心架构集群中的每个节点都是平等的没有主从之分7.3 集群数据分片Redis集群使用哈希槽Hash Slot来分配数据整个集群共有16384个哈希槽。每个键通过CRC16算法计算出哈希值然后对16384取模得到对应的哈希槽每个节点负责处理一部分哈希槽当添加或删除节点时哈希槽会在节点之间重新分配7.4 配置集群模式7.4.1 配置文件在每个节点的配置文件中添加# 开启集群模式 cluster-enabled yes # 集群配置文件由Redis自动生成和更新 cluster-config-file nodes.conf # 集群节点超时时间毫秒 cluster-node-timeout 150007.4.2 启动节点# 启动第一个节点redis-server /path/to/redis.conf --port7000# 启动第二个节点redis-server /path/to/redis.conf --port7001# 启动第三个节点redis-server /path/to/redis.conf --port7002# 启动第四个节点redis-server /path/to/redis.conf --port7003# 启动第五个节点redis-server /path/to/redis.conf --port7004# 启动第六个节点redis-server /path/to/redis.conf --port70057.4.3 创建集群# 创建集群使用redis-cli的--cluster选项redis-cli --cluster create127.0.0.1:7000127.0.0.1:7001127.0.0.1:7002127.0.0.1:7003127.0.0.1:7004127.0.0.1:7005 --cluster-replicas17.5 集群模式架构图数据分片数据分片数据分片复制复制复制Gossip协议Gossip协议Gossip协议Gossip协议Gossip协议Gossip协议集群节点1槽0-5460客户端集群节点2槽5461-10922集群节点3槽10923-16383从节点1从节点2从节点38. Redis事务与Lua脚本8.1 Redis事务Redis事务允许将多个命令打包执行要么全部执行要么全部不执行。8.1.1 事务命令# 开始事务MULTI# 标记事务的开始# 执行命令此时命令会被放入事务队列不会立即执行SET key1 value1 SET key2 value2 GET key1# 执行事务EXEC# 执行事务队列中的所有命令# 取消事务DISCARD# 取消事务清空事务队列8.1.2 事务的特点原子性事务中的所有命令要么全部执行要么全部不执行隔离性事务执行期间其他客户端的命令不会插入到事务执行序列中没有持久性Redis事务的持久性取决于Redis的持久化配置8.2 Lua脚本Lua脚本是Redis支持的一种脚本语言可以在Redis服务器端执行复杂的操作。8.2.1 执行Lua脚本# 使用EVAL命令执行Lua脚本EVALreturn redis.call(SET, KEYS[1], ARGV[1])1mykey myvalue# 使用EVALSHA命令执行已缓存的Lua脚本SCRIPT LOADreturn redis.call(SET, KEYS[1], ARGV[1])EVALSHAscript_sha11mykey myvalue# 检查Lua脚本是否已缓存SCRIPT EXISTSscript_sha1# 清除所有已缓存的Lua脚本SCRIPT FLUSH8.2.2 Lua脚本的优势原子性Lua脚本在执行期间不会被其他命令打断减少网络开销将多个命令合并为一个脚本执行减少了网络往返次数复用性可以将常用的操作封装为Lua脚本方便复用灵活性可以实现Redis内置命令无法实现的复杂逻辑8.3 事务与Lua脚本的比较特性事务Lua脚本原子性支持支持复杂逻辑不支持支持网络开销较大较小复用性不支持支持调试难度较易较难9. Redis发布订阅9.1 发布订阅概述Redis发布订阅是一种消息通信模式发送者publisher发送消息订阅者subscriber接收消息。9.2 发布订阅命令# 订阅频道SUBSCRIBE channel1 channel2# 订阅channel1和channel2频道# 发布消息PUBLISH channel1Hello, Redis!# 向channel1频道发布消息Hello, Redis!# 订阅模式PSUBSCRIBE ch*# 订阅所有以ch开头的频道# 取消订阅UNSUBSCRIBE channel1# 取消订阅channel1频道PUNSUBSCRIBE ch*# 取消订阅所有以ch开头的频道9.3 发布订阅架构图发布消息发布消息接收消息接收消息发布消息接收消息接收消息发布者1频道channel1发布者2订阅者1订阅者2发布者3频道channel210. Redis内存管理10.1 内存管理概述Redis是内存数据库内存管理对Redis的性能和稳定性至关重要。10.2 内存配置# 设置Redis最大使用内存 maxmemory 1gb # 设置内存淘汰策略 maxmemory-policy volatile-lru10.3 内存淘汰策略策略描述noeviction当内存不足时新写入操作会报错allkeys-lru移除最近最少使用的键allkeys-random随机移除某个键volatile-lru移除最近最少使用的键只针对设置了过期时间的键volatile-random随机移除某个键只针对设置了过期时间的键volatile-ttl移除剩余过期时间最短的键volatile-lfu移除最不经常使用的键只针对设置了过期时间的键allkeys-lfu移除最不经常使用的键10.4 内存优化建议设置合理的maxmemory和maxmemory-policy使用适当的数据类型例如存储整数时使用字符串类型Redis会自动编码为整数存储对象时使用哈希类型而不是多个字符串类型存储大量相同前缀的键时考虑使用哈希类型或压缩列表定期清理过期键使用Redis集群进行水平扩展考虑使用Redis的持久化机制将不常用的数据持久化到磁盘10.5 内存分析工具# 获取内存使用信息INFO memory# 查看键的内存使用情况MEMORY USAGE key# 查看内存分配情况MEMORY STATS# 查看内存碎片率MEMORY FRAGMENTATION RATIO11. Redis性能优化11.1 性能优化概述Redis的性能优化涉及多个方面包括硬件、配置、数据结构设计、命令使用等。11.2 硬件优化使用高性能的CPU和内存使用SSD存储提高持久化性能确保网络带宽充足减少网络延迟11.3 配置优化# 关闭持久化如果主要用于缓存 appendonly no # 设置合理的maxmemory和maxmemory-policy maxmemory 1gb maxmemory-policy allkeys-lru # 开启慢查询日志便于分析性能问题 slowlog-log-slower-than 10000 slowlog-max-len 128 # 调整TCP连接参数 tcp-keepalive 300 timeout 0 # 调整线程数Redis 6.0 io-threads 411.4 数据结构优化选择合适的数据类型避免使用大键使用压缩列表和整数集合合理使用哈希槽集群模式11.5 命令使用优化减少命令的执行次数使用批量命令避免使用O(N)复杂度的命令例如KEYS * 使用SCAN代替HGETALL 使用HMGET或HSCAN代替LRANGE 0 -1 使用LLEN和LRANGE分批获取合理使用管道Pipeline使用Lua脚本减少网络开销11.6 性能监控# 查看Redis的性能统计信息INFO stats# 查看慢查询日志SLOWLOG GET# 使用redis-cli的--latency选项测试延迟redis-cli --latency -hhost-p port# 使用redis-cli的--stat选项查看实时统计信息redis-cli --stat -hhost-p port12. Redis安全配置12.1 安全配置概述Redis默认配置的安全性较低需要进行适当的配置来提高安全性。12.2 安全配置建议设置强密码# 设置Redis密码 requirepass strong_password绑定特定IP# 只允许本地访问 bind 127.0.0.1禁用危险命令# 重命名危险命令 rename-command FLUSHDB rename-command FLUSHALL rename-command CONFIG rename-command KEYS 使用防火墙限制访问定期更新Redis版本开启AOF持久化提高数据安全性配置合理的持久化策略12.3 安全审计# 查看当前连接的客户端CLIENT LIST# 查看Redis的配置CONFIG GET *# 查看Redis的日志tail-f /path/to/redis.log13. Redis应用场景13.1 缓存Redis最常用的场景是作为缓存使用用于存储热点数据减少数据库的访问压力。使用示例importredisimportmysql.connector# 连接Redisrredis.Redis(hostlocalhost,port6379,db0)# 连接MySQLdbmysql.connector.connect(hostlocalhost,userroot,passwordpassword,databasetest_db)cursordb.cursor()defget_user(user_id):# 先从Redis获取userr.get(fuser:{user_id})ifuser:returneval(user)# 如果Redis没有从MySQL获取cursor.execute(fSELECT * FROM users WHERE id {user_id})usercursor.fetchone()ifuser:# 将数据存入Redis设置过期时间为1小时r.setex(fuser:{user_id},3600,str(user))returnuser13.2 会话存储Redis可以用于存储用户会话信息支持分布式部署。13.3 消息队列Redis的列表和发布订阅功能可以用于实现简单的消息队列。使用列表实现消息队列# 生产者向队列发送消息LPUSH queue message1 LPUSH queue message2# 消费者从队列获取消息RPOP queue使用发布订阅实现消息队列# 消费者订阅频道SUBSCRIBE channel# 生产者向频道发布消息PUBLISH channel message13.4 计数器Redis的原子递增命令可以用于实现各种计数器。使用示例# 页面访问计数INCR page:visits# 获取当前访问量GET page:visits# 设置过期时间EXPIRE page:visits8640013.5 排行榜Redis的有序集合可以用于实现各种排行榜。使用示例# 添加用户分数ZADD leaderboard100user1 ZADD leaderboard200user2 ZADD leaderboard150user3# 获取排行榜前10名ZREVRANGE leaderboard09WITHSCORES# 获取用户排名ZREVRANK leaderboard user113.6 分布式锁Redis可以用于实现分布式锁确保多个进程或线程在同一时间只能有一个执行特定操作。使用示例importredisimporttime rredis.Redis(hostlocalhost,port6379,db0)defacquire_lock(lock_name,expire_time10):获取分布式锁whileTrue:# 使用SETNX命令尝试获取锁resultr.setnx(lock_name,time.time()expire_time)ifresult:returnTrue# 检查锁是否过期current_timetime.time()lock_valuer.get(lock_name)iflock_valueandfloat(lock_value)current_time:# 锁已过期尝试获取锁old_valuer.getset(lock_name,current_timeexpire_time)ifold_valuelock_value:returnTruetime.sleep(0.1)defrelease_lock(lock_name):释放分布式锁r.delete(lock_name)# 使用分布式锁ifacquire_lock(my_lock):try:# 执行需要加锁的操作print(Executing critical section...)time.sleep(5)finally:# 释放锁release_lock(my_lock)14. Redis最佳实践14.1 数据设计选择合适的数据类型设计合理的键名例如使用冒号分隔命名空间和键名user:123:name键名要简洁明了不要太长避免使用特殊字符避免使用大键单个键的值不要超过10MB合理设置过期时间14.2 命令使用减少命令的执行次数使用批量命令避免使用O(N)复杂度的命令合理使用管道Pipeline使用Lua脚本减少网络开销14.3 性能优化设置合理的maxmemory和maxmemory-policy开启慢查询日志便于分析性能问题定期监控Redis的性能指标考虑使用Redis集群进行水平扩展14.4 高可用设计使用主从复制实现数据冗余使用哨兵模式实现自动故障转移使用Redis集群实现分布式部署考虑使用多可用区部署提高容灾能力14.5 安全性设置强密码绑定特定IP禁用危险命令使用防火墙限制访问定期更新Redis版本15. 常见问题与解决方案15.1 Redis连接超时问题客户端连接Redis超时解决方案检查Redis服务器是否正常运行检查网络连接是否正常检查Redis配置的bind参数是否正确检查防火墙设置是否允许Redis端口访问调整Redis的timeout参数15.2 Redis内存不足问题Redis内存使用率过高出现OOM错误解决方案增加Redis服务器的内存设置合理的maxmemory和maxmemory-policy清理过期键和无用数据考虑使用Redis集群进行水平扩展优化数据结构设计减少内存占用15.3 Redis持久化失败问题Redis持久化失败导致数据丢失解决方案检查磁盘空间是否充足检查磁盘权限是否正确调整AOF重写策略考虑使用RDB AOF的持久化方式定期备份Redis数据15.4 Redis集群节点故障问题Redis集群中的某个节点出现故障解决方案检查节点的日志找出故障原因如果是硬件故障更换硬件并重启节点如果是软件故障修复后重启节点等待集群自动进行故障转移如果故障转移失败手动执行故障转移16. 总结Redis是一个功能强大的内存数据结构存储系统具有高性能、高可用、支持多种数据结构等特点。本教程详细介绍了Redis 8.4.0的安装、配置、数据类型、持久化、主从复制、哨兵模式、集群模式、事务、Lua脚本、发布订阅、内存管理、性能优化、安全配置和应用场景等内容。通过学习本教程读者可以全面了解Redis的各种功能和最佳实践并能够根据实际需求选择合适的Redis架构和配置。在实际应用中还需要根据具体情况进行调整和优化以充分发挥Redis的性能和可靠性。Redis的发展非常迅速新的版本不断推出新的功能和优化。建议关注Redis的官方网站和社区及时了解最新的发展动态和最佳实践。官方网站https://redis.io/GitHub仓库https://github.com/redis/redis希望本教程有所帮助祝大家在Redis的学习和应用中取得成功
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

温州专业微网站制作公司不备案的网站有那些

GNU Make使用中的常见问题与解决方案 1. 跨平台路径分隔符处理 在不同操作系统中,路径分隔符有所不同。在POSIX系统中使用 / ,而在Windows系统中使用 \ 。为了使Makefile具有更好的跨平台兼容性,可以采用以下方法: - 定义变量替代路径分隔符 :可以定义一个变量来…

张小明 2025/12/27 13:43:33 网站建设

网站关于我们怎么做网站开发需要解决的问题

精通Bodymovin插件:从AE动画到网页交互的完全实战指南 【免费下载链接】bodymovin-extension Bodymovin UI extension panel 项目地址: https://gitcode.com/gh_mirrors/bod/bodymovin-extension Bodymovin插件是连接Adobe After Effects与数字世界的桥梁&am…

张小明 2025/12/28 7:09:10 网站建设

网上做网站任务网络推广业务

你是否在Typst项目中遇到过字体显示异常、符号错位或排版混乱的困扰?🚀 让我们一起探索Typst字体兼容性的完整解决方案,帮你快速掌握从问题诊断到前瞻规划的全流程实战方法。 【免费下载链接】typst A new markup-based typesetting system t…

张小明 2025/12/27 12:53:10 网站建设

网站空间邮箱每年要续费吗江门网站制作开发

优化缓存使用:提升应用性能的关键策略 1. 缓存基础与存储层次结构 在理想情况下,系统中的所有数据都能存储在最快的内存中,为各数据段提供一致的性能。然而,目前这并不现实,开发者需要权衡哪些数据元素应优先获得更快的访问权限。 存储遵循分层结构,每层比下一层更快,…

张小明 2025/12/28 7:53:37 网站建设

排名网站建设机器人编程培训机构

NetSonar终极指南:如何快速诊断网络问题 【免费下载链接】NetSonar Network pings and other utilities 项目地址: https://gitcode.com/gh_mirrors/ne/NetSonar NetSonar是一款功能强大的跨平台网络诊断工具,能够帮助用户快速定位网络故障、实时…

张小明 2025/12/28 17:42:30 网站建设

.net 网站优化wordpress示例页面

顾名思义,所谓的指针函数,也就是函数返回值类型为指针类型(返回地址)的函数,函数格式差不多就是下面这个造型:数据类型 *函数名(形参1, …, 形参n );或者更直观更易看懂的造型:(数据类型 *) 函数…

张小明 2026/1/1 14:24:42 网站建设