当前位置: 首页 > news >正文

那几家是做失物招领的网站prestashop和wordpress

那几家是做失物招领的网站,prestashop和wordpress,iis7重启 网站,宝塔wordpress伪静态1.NOSQL、Redis概述#xff0c;通用命令#xff0c;redis五大数据类型#xff0c;三大特殊数据类型 NOSQL概述#xff1a; (NOT ONLY SQL-不仅仅是SQL),泛指非关系型数据库#xff0c;为解决大规模数据集合多重数据种类带来的挑战#xff0c;尤其是大数据应用问题 常见no…    1.NOSQL、Redis概述通用命令redis五大数据类型三大特殊数据类型 NOSQL概述 (NOT ONLY SQL-不仅仅是SQL),泛指非关系型数据库为解决大规模数据集合多重数据种类带来的挑战尤其是大数据应用问题 常见nosql:redis,hbase。 和关系型数据的对比区别数据之间没有关联关系数据存储在内存中操作数据相对较快。关系型数据库数据之间存在关联关系数据存储在磁盘中操作数据非常耗时。 优点成本低、查询速度快、支持多种数据格式(基本数据类型、集合、对象、图片、文档等格式)、扩展性相对关系型数据库较好。 非关系型数据库优势复杂查询较方便事务的支持导致安全性很高。 总结关系型数据库和非关系型数据库并非对立而是互补的关系从而弥补对方的劣势。一般将数据存储在关系型数据库中非关系型数据库中备份关系型数据库的数据(热点数据、高频访问且不常修改的数据)。 主流的nosql: key-value存储数据库redis。典型用于内容缓存处理大量数据的高访问负载 列存储数据库Hbase。典型用于分布式的文件系统 文档型数据库Mongdb。典型用于web应用 图形数据库Neo4J。典型用于社交网络 Redis概述 C语言开发的高性能键值对数据库在内存中就是一个Map集合。支持多种键值数据类型。key为字符串value可是任意类型。 value类型分类 字符串类型-StringMapString,String 散列类型-hashMapString,MapString,String 列表类型-list:MapString,ListString 数据可重复 集合类型-set:MapString,SetString   数据不可重复 有序集合类型-sortedset:MapString,sortedsetString 数据不可重复支持排序 应用场景缓存、聊天室好友在线列表、任务队列(秒杀、抢购、12306抢票)、应用排行榜、网站访问统计、数据过期处理、分布式集群架构中session分离 相关指令 数据库操作指令 启动redis默认16个库(编号从0至15)select 编号 选择指定库 清空当前库FLUSHDB 清空全部库FLUSHALL 客户端显示中文./redis-cli -p 700 --raw 操作key相关指令 DEL KEY[KEY...] 删除单个或多个Key返回删除数量不存在的key忽略 EXISTS KEY;判断key是否存在,存在返回1否则返回0 EXPIRE KEY seconds;为key设置生存时间,秒为单位生存时间为0自动删除。成功返回1 KEYS PATTERN;查找符合pattern的key MOVE KEY DB;将Key移动到指定db中 PEXPIRE KEY milliseconds;为key设置生存时间毫秒为单位。成功返回1否则返回0 PEXPIREAT KEY milliseconds-timestap;为Key设置生存时间以毫秒为单位设置过期的时间戳 TTL KEY ;以秒为单位返回指定key的剩余存活时间 PTTL KEY ;以毫秒为单位返回指定key的剩余存活时间 RANDOMKEY;随机返回一个key RENAME KEY NEWKEY;将Key命名修改为newkey TYPE KEY ;返回KEY对应VALUE的类型。none(key不存在),string,list(列表),set(集合),zset(有序集合),hash(哈希表) 5种数据类型 String:基础存储类型在redis中二进制安全存入和取出数据相同最大容纳数据长度512M。 常用命令 set key value;例如set company sunny;key存在则进行覆盖返回 OK get key;返回key对应的值 del key;删除 key 哈希类型-hash适合存储值对象信息value是一个键值对key 无序 常用命令 hset key field value 为指定key设置field/value键值对。给同一个field设置后者会覆盖前者 hmset key1 field/value key2 field/value 为多个key设定field/value hget key field 返回指定Key中field的值 hmget key field1 field2 field3 返回指定Key中多个field的值 hdel key field [field … ] 删除1个或多个字段返回被删除字段的个数 hgetall key 获取Key的所有数据 列表类型-list有序可重复类似双端队列的数据结构可作为redis实现消息队列的数据结构 常用命令 lpush key values[value1 value2…] 在指定key关联的list头部添加这些元素如果key不存在则新建元素。添加成功返回元素个数 lpop key 返回key关联链表的头部元素 rpop key 从尾部弹出元素 lrange key start end 输出该key的所有数据。示例lrange key 0 10;输出key对应list的索引0至索引10的数据即前11个元素 列表类型-set(无序且不可重复) 常用命令 sadd key values[value1、value2…] 向key对应set中添加数据 smembers key 显示key对应set中所有数据 srem key members[member1、member2…] 删除key对应set中指定数据 有序列表类型-zset(sortedSet,可排序可保证不重复)value中的每个元素都会关联一个double类型的份数redis中正式通过分数来为元素实现从小到大的排序 特点可排序的set集合相当于java中的treeSet 常用命令 zadd key values[value1、value2…] 向key对应set添加元素 zrange key start end  通过索引区间返回指定范围内的元素升序 zrevrange key start end 通过索引区间返回指定范围内的元素降序 zrange key start end  [withscores]  通过索引区间返回指定范围内的元素及其对应score数字升序 zrevrange key start end [withscores] 通过索引区间返回指定范围内的元素及其对应score数字降序 redis通用命令 key pattern ;pattern表示格式作用是获取与pattern匹配的Key。* 表示任意1个或多个字符?表示任意1个字符 exists key 判断key是否存在存在返回1 否则返回0 type key ;返回key对应的value数据类型。none、string、list、set、zset、hash expire key time;设置key的存活时间 3种特殊数据类型 Hyperloglog 基数统计算法类似于set数据类型允许容错使用此类型。不允许容错使用set即可 Bitmap 位存储操作二进制位来记录。 Geospatial 地理位置 2.redis持久化机制、RDB持久化、AOF持久化 REDIS持久化概述 redis高性能原因是因为将数据保存在内存中为了保证redis重启后数据不丢失将数据从内存保存到硬盘中过程称为持久化。 持久化支持RDB和AOF两种方式可以单独使用1种也可以将2种进行结合使用。 默认支持RDB持久化无序配置。此机制是在固定时间间隔将内存的数据集快照写入磁盘。 AOF持久化以日志的形式记录服务器所处理的写操作在redis启动之初会读取此文件来重建redis数据库。以保证重启后数据完整。 持久化可通过配置来禁用 可同时使用RDB和AOF持久化 RDB持久化也称快照(Snapshot) RDB持久化特点将内存种数据以一定时间间隔将内存数据写入硬盘中默认持久化的方式保存的文件以.rdb为后缀 快照生成方式客户端方式(BGSAVE和SAVE指令)、服务器配置自动触发 客户端方式之BGSAVE操作(并行操作)客户端使用BGSAVE命令创建快照当redis服务器收到客户端发送的BGSAE命令服务器会调用fork创建1个子线程 子线程负责快照写入磁盘主线程继续处理命令请求   客户端方式之SAVE操作(串行操作)客户端使用SAVE命令创建快照redis服务器收到客户端发送的SAVE命令服务器在快照完毕之前不会响应其他命令。此模式不常用 配置自动触发和Mysql的redo机制类似。如果在redis.conf种设置了save配置选项redis会在选项满足之后自动触发一次BGSAVE命令如果设置多个save配置选项 其中一个满足也会执行一次BGSAVE命令 服务器接受客户端shutdown指令服务器收到客户端的shutdown指令后会执行一个save命令阻塞所有客户端不再执行任何客户端命令并再save命令执行完毕后关闭服务器 配置生成快照名称和位置: 修改生成快照名称dbfilename dump.rdb 修改生成位置 dir./ RDB(快照)持久化的缺点 无法保证系统高可用性质即无法避免最大程度的数据丢失。因为一旦在持久化之前出现服务宕机未来得及保存进入磁盘的数据就会丢失 AOF只追加日志文件 特点可将客户端执行的所有set命令记录到日志文件中AOF持久化会将被执行的写命令保存到AOF文件的末尾以此来记录数据变化 恢复内存数据只需要将AOF文件中包含的写命令从头到尾执行一次即可 redis服务器启动之初会读取该文件来重新构建redis数据库从而保证数据完整 开启AOF持久化: redis.conf默认配置中的AOF持久化机制是关闭的需要配置中开启。 开启步骤修改 appendonly yes 开启持久化修改appendfilename appendonly.aof; 指定生成文件名称 日志追加频率 always:每次写操作都写入磁盘可最大程度减少数据的丢失但是此同步策略需要对磁盘大量操作因此redis处理速度会受到磁盘性能的限制。谨慎使用 everysec:每秒执行一次同步显式的将多个命令存入磁盘。使用此方式和不使用此方式时性能相差无几同时每秒一次即便系统崩溃也只会丢失1S的数据。 推荐使用 no:由操作系统决定何时同步。不会对性能带来影响但是会丢失不定量数据。不推荐 修改同步频率通过 appendfsync always/everysec/no 指定 AOF文件的重写 AOF(日志文件)的缺点持久化文件越来越大为了压缩AOF持久化文件redis提供了AOF重写(ReWriter)机制 AOF重写可在一定程度上减小AOF文件的体积 触发重写方式 客户端方式触发重写执行 BGREWRITEAOF 命令不会阻塞redis服务 服务端方式配置自动重写修改redis.conf文件中的 auto-aof-rewrite-percentage和auto-aof-rewrite-min-size。 例如auto-aof-rewrite-percentage值为100和auto-aof-rewrite-min-size 64mb。在开启AOF持久化时当AOF文件大于64M并且AOF文件比上次重写后体积大了至少几倍自动触发 重写原理将内存中的数据库用命令的方式重写生成了一个AOF文件来替换原来的文件 重写流程 持久化总结 RDB和AOF两种方案可同时使用也可单独使用也可都不使用。使用那种取决于用户的数据和应用决定 无论是使用RDB还是AOF持久化文件都是保存在磁盘的有必要除了持久化外还应该对持久化文件进行备份(最好备份在多个地方) RDB和AOF的选择问题 对数据非常敏感选择AOF。但是文件体积较大恢复速度较慢 数据呈现阶段有效性选择rdb可做到阶段内数据无丢失恢复速度较快。但是利用RDB实现紧凑的持久化会使得redis性能降低很多 总之如果不能承受数分钟以内的数据丢失对业务数据非常敏感选择AOF;可以承受数分钟以内的数据丢失且追求大数据集的恢复速度选择RDB。 灾难恢复选用RDB 双重保险策略同时开启AOF和RDB重启后先使用AOF进行数据恢复降低丢失数据两者同时开启数据恢复时会选择忽略RDB选择AOF进行恢复从而避免数据不一致或重复问题 3.java操作redis、jedis连接池、使用redis缓存不常修改的数据 jedis基本使用 redis不仅可通过命令操作主流语言都有客户端支持。官方推荐java客户端使用jedis和redisson。企业中jedis使用居多 实现步骤引入jedis依赖创建jedis对象调用jedis对方的方法实现对string、list、set、zset、hash的操作 jedis连接池的基本概念jedis资源的创建和消费非常消耗性能jedis提供了池化技术jedispool在创建时初始化一些连接资源存储到池中使用jiedis连接资源时间无需创建从连接池中获取,使用完毕后将jedis还给连接池供其他请求使用。使用GenericObjectPoolConfig 和JedisPool来创建连接池 4.spring boot整合redis核心api springboot data redis 提供了stringredistemplate和redistemplate,stringredistemplate是redistemplate的子类。 区别在于stringredistemplate的key和value只能是string,而redistemplate的key和value可以是object任意类型的数据。 使用redistemplate默认是将对象序列化到redis中因此放入的对象必须实现对象序列化接口 serializable 实现步骤引入依赖配置连接使用redistemplate进行操作 5.redis事务、watch锁、redis实现分布式锁、数据的删除策略、淘汰策略 redis事务 定义一系列预定义命令保证成一个整体(队列)执行时一次性按照添加顺序依次执行中途不会中断或干扰。 本质一组命令的集合 没有隔离级别的概念所有命令在事务中并未直接执行只有在执行exec命令时才会执行 redis单条命令保证原子性事务不保证原子性 执行步骤开启事务(multi)执行操作提交事务(exec) 事务操作 开启事务 multi (设定事务开启位置后续所有指令均加入到事务中) 取消事务 discard 终止当前事务的定义在multi之后exec之前 执行事务 exec 设定事务的结束位置同时执行事务与multi成对出现。可保证事务的一致性 注意事项定义事务中命令存在语法错误则事务中所有命令都不会执行 如果命令格式语法正确但是无法正确执行则正确的命令会执行运行错误的命令不会执行(例如对list执行incr)已经执行完毕的命令对应数据不会自动回滚需要自行回滚。 watch锁 问题线程1监听某个key当事务还未执行完事务2操作了这个keywatch会通知线程1事务失败 基于特定条件的事务执行假如对已售空的商城进行补货多个采购员都可以进行为了避免数据重复操作所以在操作某一数据前先锁定要操作的数据一旦发生变化终止当前事务 基于特定条件的事务执行(锁)对key添加监视锁在执行exec操作前如果Key发生了变化则终止事务执行。watch key1[kye2...].取消所有key的监视 unwatch; watch锁操作 悲观锁认为什么时候都会出问题无论做什么都会加锁 乐观锁认为什么时候都不会出现问题所以不会加锁更新数据时候判断一下在此期间是否有人更改此数据(获取version,更新的时候比较version) redis中数据的删除策略 定时删除、惰性删除、定期删除 淘汰策略      6.mybatis自身本地缓存结合redis实现分布式缓存         redis实现分布式缓存 缓存计算机内存中的一段数据 内存中数据特点读写快、断电立即丢失 缓存解决的问题提高网站吞吐量网络运行效率快解决数据库访问压力 数据库中极少修改的数据适合使用缓存更多用于数据查询 本地缓存和分布式缓存的区别本地缓存保存在应用服务器内存中(mybatis的一级和二级缓存就是本地缓存)分布式缓存存储在应用服务器之外的数据 集群将一种服务创建多个节点放在一起共同对系统提供服务的过程称为集群 分布式多个不同服务集群共同对系统提供服务的系统称为分布式系统。 利用mybatis自身本地缓存结合redis缓存实现分布式缓存todo 7.主从复制简介、工作流程、常见问题 主从复制简介 redis集群实现高可用避免单机redis服务故障准备多台服务器互相连通将数据复制多个副本保存在多个服务器上连接在一起并保证数据式同步的。 即便其中1台服务宕机其他服务器依然可以继续提供服务实现redis的高可用同时实现数据冗余备份。 主从复制定义即将master中的数据及时、有效的复制到slave中.master支持读写在进行写时间将出现变化的数据自动同步至slave。 主从复制作用 读写分离master负责写slave负责读取提高服务器的读写负载能力 负载均衡基于主从结构配合读写分离由slave分担master负载并根据需求变化改变slave数量通过多个从节点分担数据读取负载大大提高了redis服务器并发量和吞吐量 故障恢复master出现问题slave提供服务实现快速的故障恢复 数据冗余实时数据热备份持久化之外的一种数据冗余方式slava和master数据同步 高可用基石基于主从机制构建哨兵模式和集群实现redis高可用方案 主从复制流程 建立连接准备阶段slave连接master。 连接的三种方式 客户端发送命令slaveof masterip masterport; 驱动服务器参数redis-server -slaveof masterip masterport 服务器配置slaveof masterip masterport 断开连接slaveof no one;断开连接后之前接受数据不会删除只是不在接收新的master数据     数据同步: master数据同步slave 命令传播:master后续执行写入操作将数据同步slave 8.哨兵机制Sentinel、哨兵原理 哨兵机制sentinel 哨兵概念是redis的高可用性解决方案由1个或多个sentinel实例构成的sentinel系统可监视多个主服务器以及这些主服务器下的所有子服务器。 当被监视的主服务器下线时自动将下线主服务器中的某个从服务器升级为新的主服务器。简单来说哨兵就是带有自动故障转移功能的主从架构。 哨兵是一个分布式系统用于对主从结构中的每台服务器进行监控当master出现故障时选择新的master,并将所有slave连接到新的master 哨兵作用 监控不断检查master和slave是否正常运行master存活检测,master和slave运行情况检测 通知当被监控的服务器出现问题时向其他(哨兵、客户端)发送通知 自动故障转移如果master宕机断开master和slave的连接从slave中选取一个作为新的master,将其他slave和新的master建立连接并告知客户端新的master地址 注意哨兵也是一台服务器只是不提供服务。通常哨兵配置数量为单数。(避免选举master同票) 启动哨兵机制      配置多个哨兵将redis中的sentinel.conf拷贝2份在sentinel.conf中修改端口以及设置master的端口地址最后通过 redis-sentinel sentinel-端口号.conf即可启动哨兵 哨兵机制原理 主从切换哨兵在主从切换中经历了 监控、通知、故障转移 3个阶段。 监控阶段启动哨兵服务之后哨兵之间会互相监控包括master及master下所有的slave节点信息。多个哨兵之间可相互通信之间通过发布订阅来互相通知 通知阶段哨兵之间相互通知哨兵通知客户端 故障转移阶段某个哨兵向master服务器发送指令此时master没反应也拿不到信息哨兵意识到master宕机将此消息告知另外2个哨兵另外两哨兵也向master发送请求也得不到响应此时master确定下线随后多个哨兵中会选出一个领头的哨兵将master清楚并在slave中选出一个新的master将slave切换为新的master 9.redis集群原理、缓存预热、缓存击穿、缓存穿透、缓存雪崩的解决方案 集群架构 集群架构概念 概念产生背景业务发展过程中遇到的瓶颈。redis提供服务OPS可达到10万/S,当前业务ops已达到10万/s内存单机容量为256G当前业务需求内存容量为1T。使用集群可解决上述问题 集群将同一个服务的多个节点放在一起共同对系统提供服务的过程称为集群。换言之集群就是将若干台网络连接起来并提供统一的管理方式对外呈现单机的服务效果。 分布式有多个不同服务集群共同对系统提供服务的系统称为分布式系统 集群架构作用 分散单台服务器的访问压力实现负载均衡 分散单台服务器的存储压力实现可扩展性 降低单台服务宕机带来的宕机灾难 redis集群原理 所有redis节点彼此互联通过二进制协议优化传输速度和带宽每个redis节点都包含自己的master和slave, 集群中节点宕机是集群中超过半数的节点检测失效时才失效 客户端只需要连接集群中任意一个节点即可 客户端执行set命令时会通过CRC16算法计算出其哈希槽的位置根据该位置存储到对应的node节点。执行get操作时会根据哈希槽的位置去指定节点内读取数据。 故障转移将宕机的master节点的哈希槽由选出来的slave来接管不会新创建哈希槽 redis集群搭建 https://blog.csdn.net/m0_37989980/article/details/107778257 二 redis企业解决方案 缓存预热 定义系统启动前提前将相关的缓存数据直接加载到缓存系统避免用户先查询数据库再将数据缓存的问题 解决问题解决用户请求先查询数据库再将数据缓存的问题 作用用户直接查询事先被预热的缓存数据加快查询速度 解决方案 统计访问频率较高的热点数据并将统计数据分类根据级别排序优先加载级别较高的热点数据热点数据主从预热 脚本程序固定触发脚本预热 缓存雪崩 定义同一时间大面积的缓存失效后面的请求都会直接请求数据库造成数据库短时间内接收大量请求而崩溃 后果数据库服务器崩溃 原因较短时间内缓存中较多的key集中过期 解决方案(道) 更多的页面静态化处理(模板动态数据)、构建多级缓存架构、针对慢SQL进行执行计划分析进而优化SQL、 限流降级短时间内牺牲用户体验限制一部分请求降低应用服务器压力请求低速运转后再逐步放开访问 解决方案(术): 数据有效期策略调整根据业务有效期进行分类错峰过期时间使用固定时间随机值的方式稀释集中过期的key 超热数据使用永久key 缓存击穿 定义缓存中没有但数据库中有的数据一般是缓存时间到期此时大量并发请求同一条数据缓存中没有查询数据库从而造成数据库崩溃 原因缓存中某一个热点key过期该Key访问量巨大多个请求都压在这个Keys上但是均为命中redis短时间内发起了大量对数据库中同一数据的访问 解决方案(术) 设置热点数据永不过期、现场调整Key的过期时间、后台定时刷新热点key有效期 缓存穿透(布隆过滤器解决) 定义缓存和数据库中都没有的数据导致所有请求都落在数据库上造成数据库短时间接到大量请求而崩掉 示例例如数据库及缓存中的数据都是从id为0开始自增有人恶意请求id-1的数据即缓存穿透 解决方案 接口层增加校验如用户鉴权校验id基础校验小于等于0的直接拦截 缓存和数据库中都没取到可以设置为key-null,有效期短一点30秒左右可防止用户针对同一个key进行暴力攻击 使用布隆过滤器判断请求的key是否存在 布隆过滤器 定义是一个很长的二进制向量(bit数组)和一系列哈希函数(hash),用于检索一个元素是否在一个集合中。 优点因为基于位数组和哈希算法空间效率和查询时间远超一般算法 缺点有一定的误识别率和删除困难但是可以通过增加位数组大小和hash函数来降低误识别率(无法避免) 添加数据过程初始化之后位数组中值都为0当增加变量会通过多个hash函数将元素映射到位数组中各个位上将对应位置设置为1 查询数据过程通过多个hash函数将元素映射到位数组中各个位上如果各个位都是1则元素可能存在但如果其中有位不为1则元素一定不存在 缓存降级 定义流量骤增造成响应速度较慢可对非核心缓存业务进行降级 目的保证核心服务可用。有些服务无法降级(如加入购物车、结算) 服务降级目的防止redis故障导致数据库一起发生雪崩问题因此可对不重要的缓存数据采用服务降级策略。 例如redis出现问题不去数据库查询数据而是直接返回默认值(兜底默认值) 10.布隆过滤器解决缓存穿透问题 人工智能学习网站https://www.captainai.net/itcoke/ 目的redis实现布隆过滤器 使用场景准确判断某个数据是否在大数据集合中并且不占用内存 简介一种数据结构一串很长的二进制向量组成可看作一个二进制数组初始默认值都是0 添加数据通过多个hash函数计算出在二进制数组中的位置将其设置为1 判断数据是否存在将元素通过hash函数算出在二进制数组中的位置看其是否为1如果都为1则可能存在否则一定不存在 优点二进制数据占用内存极少插入和查询速度很快 缺点随着数据增加误判率增加无法判断数据一定存在无法删除数据 redis实现布隆过滤器 在redis中bitmaps提供了一套命令来操作类似字符串中的每一位(setbit、getbit、bitcount等)因此redis实现布隆过滤器底层是通过bitmap数据结构。 Redission是在java中操作redis的库因此可利用Redission来实现布隆过滤器也可用guava来实现布隆过滤器
http://www.w-s-a.com/news/572865/

相关文章:

  • 天津个人网站备案查询dz网站恢复数据库
  • 关于网站建设的期刊文献宣传片文案
  • 物业网站模板下载wordpress+菜单大小
  • 网站建设案例教程视频空间刷赞网站推广
  • 网站建设借鉴做外贸球衣用什么网站
  • 网站建设的前途微信公众号制作网站
  • 做网站之前要安装什么网站改进建议有哪些
  • 网站建设+管理系统开发山东专业网站建设公司
  • 基础微网站开发咨询中国印花图案设计网站
  • 找最新游戏做视频网站天津市招标投标公共服务平台
  • 电影订票网站怎么做注册地址出租多少钱
  • 做网站的规划和设想怎样做能让招聘网站记住密码
  • 建站知乎网站公告建设方案
  • 济南市住房和城乡建设局官方网站淮阳住房和城乡建设网站
  • 网站的设计特点有哪些seo推广要多少钱
  • wordpress开通多站点好处软件开发外包公司的设计一般多少钱
  • 为什么我的网站做不起来微信网页版登录手机版下载
  • 苏州市建设职业中心网站北京网站优化方法
  • 于飞网站开发溧阳 招网站开发
  • 网站中的宣传册翻页动画怎么做长沙有哪些网络平台公司
  • 如何做视频门户网站网站建设模板ppt
  • 青岛黄岛区网站开发百度云盘登录入口
  • 建设银行甘肃省行网站房地产市场调研报告
  • js 网站制作合肥公司网站建设
  • 最好建网站系统的软件wordpress调用模版
  • 个人网站备案地址阿里云增加网站
  • 自己做网站要办手续吗重庆短视频制作公司排名
  • 哪个全球购网站做的好汉中门户网官网
  • 网站建设有哪几种wordpress 项目选项
  • 成都网站建设开发公司哪家好验证码插件 wordpress