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

自己如何免费制作一个网站2018wordpress主题

自己如何免费制作一个网站,2018wordpress主题,设计师要考什么证,wordpress百万文章1、String 1.1、介绍 String 是最基本的 key-value 结构#xff0c;key 是唯一标识#xff0c;value 是具体的值#xff0c;value其实不仅是字符串#xff0c; 也可以是数字#xff08;整数或浮点数#xff09;#xff0c;value 最多可以容纳的数据长度是 512M 1.2、…1、String 1.1、介绍 String 是最基本的 key-value 结构key 是唯一标识value 是具体的值value其实不仅是字符串 也可以是数字整数或浮点数value 最多可以容纳的数据长度是 512M 1.2、内部实现 String类型的底层数据结构实现是int和SDSSimple Dynamic String简单动态字符串 SDS SDS不仅可以保存文本数据还可以保存二进制数据 SDS获取字符串长度的时间复杂度是O(1) 而 SDS 结构里用 len 属性记录了字符串长度所以复杂度为 O(1) Redis的SDS API是安全的拼接字符串不会造成缓冲区溢出 SDS 在拼接字符串之前会检查 SDS 空间是否满足要求如果空间不够会自动扩容所以不会导致缓冲区溢出的问题 SDS数据结构 len记录buf数组中已使用字节的数量free记录buf数组中未使用字节的数量buf[]: 字节数组用于保存字符串 1.3、常用命令 1.3.1、基础操作 # 设置 key-value 类型的值 SET key value # 根据key获取对应的value GET key # 判断某个key是否存在 EXISTS key # 返回key所存储的字符串值的长度 STRLEN key # 删除某个key对应的值 DEL key1.3.2、批量操作 # 批量设置key - value MSET key1 value1 key2 value2 # 批量获取多个key对应的value MGET key1 key21.3.3、计数器 字符串的内容发为整数的时候可以使用计数器操作 # 设置一个number的key值为0整数 SET number 0 # 将key中存储的数字值增1 INCR number # 将key中存储的数字值增10 INCRBY number 10 # 将key中存储的数字值减1 DECR number 1 # 将key中存储的数字值减10 DECRBY number 101.3.4、过期操作 默认为永不过期 # 设置key在 10秒后过期该方法是针对已存在的key设置的过期时间 EXPIRE key 10 # 查看key还有多久过期 TTL key # 设置key-value并设置key过期时间为10秒 # 方式一 SET key value EX 10 # 方式二 SETEX key 10 value1.3.5、判断是否存在 不存在即插入 SETNX key value1.4、应用场景 缓存对象 缓存整个对象的JSON SET user:1 ‘{“name”:“PP”, “age”:18}’ 采用将 key 进行分离为 user:ID:属性采用 MSET 存储用 MGET 获取各属性值 MSET user:1:name PP user:1:age 18 user:2:name CC user:2:age 20 常规计数 业务场景 访问次数 点赞 转发 库存数量 分布式锁 SET命令的NX参数 如果key不存在显示插入成功可以用来表示加锁成功如果key存在则会显示插入失败可以用来表示加锁失败 对分布式锁加上过期时间分布式锁的命令SET lock_key unique_value NX PX 10000 lock_key就是key键unique_value 是客户端生成的唯一的标识NX 代表只在 lock_key 不存在时才对 lock_key 进行设置操作PX 10000 表示设置 lock_key 的过期时间为 10s这是为了避免客户端发生异常而无法释放锁 通过lua脚本保证解锁的原子性 共享Session信息 设计 借助 Redis 对这些 Session 信息进行统一的存储和管理这样无论请求发送到那台服务器服务器都会去同一个 Redis 获取相关的 Session 信息这样就解决了分布式系统下 Session 存储的问题 2、List 2.1、介绍 List 列表是简单的字符串列表按照插入顺序排序可以从头部或尾部向 List 列表添加元素。 列表的最大长度为 2^32 - 1也即每个列表支持超过 40 亿个元素 特点 高效的节点重排能力【按照插入顺序排序头插、尾插】 顺序访问节点 通过增删节点灵活调整链表长度 2.2、内部实现 listNode 结构 双端链表 链表节点带有prev和next指针 获取某个节点的前置节点和后置节点复杂度都是O(1) list 结构 无环链表 表头节点的prev指针和表尾节点的next指针都指向NULL 对链表的访问以NULL为终点 总结 带表头指针和表尾指针 通过list结构的head指针和tail指针 获取链表的表头节点和表尾节点的复杂度为O(1) 带链表长度计数器 list结构的len属性可以获取链表中节点数量 时间复杂度为O(1) 多态 链表节点使用void*指针来保存节点值 通过list结构的dup、free、match三个属性为节点值设置类型特定函数 链表可以保存各种不同类型的值 2.3、常用命令 LPUSH key value [ value … ] 将一个或多个值value插入到key列表的表头最左边头插最后插入的值在最前面 RPUSH key value [ value … ] 将一个或多个值value插入到key列表的表尾最右边保证最后插入的值在尾巴 LPOP 移除并返回key列表的头元素 RPOP 移除并返回key列表的尾元素 LRANGE key start stop 返回列表key中指定区间内的元素 区间以偏移量start 和 stop指定从0开始 BLPOP key [ key … ] timeout 从key列表表头弹出一个元素没有就阻塞timeout秒如果timeout 0 就一直阻塞 BRPOP key [ key … ] timeout 从key列表表尾弹出一个元素没有就阻塞timeout秒如果timeout 0 就一直阻塞 2.4、应用场景 消息队列 存取消息需求 消息保存 List LPUSH RPOPRPUSH LPOP 处理重复的消息 保证消息可靠性 生产者消费者 生产者使用 LPUSH key value[value…] 将消息插入到队列的头部如果 key 不存在则会创建一个空的队列再插入消息消费者使用 RPOP key 依次读取队列的消息先进先出 3、Hash 3.1、介绍 Hash 是一个键值对key - value集合其中 value 的形式如 value[{field1value1}...{fieldNvalueN}] Hash 特别适合用于存储对象 特点 一个键key可以和一个值value进行关联 每个键独一无二 3.2、内部实现 Redis的字典使用哈希表做为底层实现一个哈希表里面可以有多个哈希表节点每个哈希表节点保存了字典中的一个键值对 Dictht结构 table是一个数组数组中的每个元素都是一个指向dicyEntry结构的指针每个dictEntry结构保存着一个键值对size属性记录了哈希表的大小即table数组的大小used记录哈希表目前已有节点键值对的数量 DictEntry结构 key 保存键值对中的键v保存键值对中的值 dict结构 dictType结构 3.3、常用命令 HSET key field value 设置key 的键值对 案例 存 HGET key field 获取key中field的值 HMSET key field value [field value…] 在一个哈希表key中存储多个键值对 HMGET key field [field …] 批量获取数据 HDEL key field [field …] 删除哈希表key中的field键值 HLEN key 返回哈希表key中field的数量 HGETALL key 返回哈希表key中所有的键值 HINCRBY key field n 为哈希表key中field键的值加上增量n 3.4、应用场景 缓存对象 购物车 添加商品HSET cart:{用户id} {商品id} 1添加数量HINCRBY cart:{用户id} {商品id} 1商品总数HLEN cart:{用户id}删除商品HDEL cart:{用户id} {商品id}获取购物车所有商品HGETALL cart:{用户id} 3.5、解决键冲突 Redis的哈希表采用链地址法separate chaining来解决键冲突 每个哈希表节点都有一个next指针多个哈希表节点可以用next指针构成一个单向链表被分配到同一个索引上的多个节点可以用这个单向链表连接起来这就解决键冲突问题 4、Set 4.1、介绍 Set 类型是一个无序并唯一的键值集合它的存储顺序不会按照插入的先后顺序进行存储。 一个集合最多可以存储 2^32-1 个元素。概念和数学中个的集合基本类似可以交集并集差集等等所以 Set 类型除了支持集合内的增删改查同时还支持多个集合取交集、并集、差集。 特点 无序存储顺序不会按照插入的先后顺序进行存储 唯一Set只能存储非重复元素 4.2、内部实现 哈希表整数集合 intset 结构 contents 整数集合的每个元素都是contents数组的一个数组项item各个项在数组中按值的大小从小到大有序地排列数组中不包含任何重复项 length 记录了整数集合包含的元素数量即contents数组的长度 4.3、常用命令 常用操作 # 往集合key中存入元素元素存在则忽略若key不存在则新建 SADD key member [member ...] # 从集合key中删除元素 SREM key member [member ...] # 获取集合key中所有元素 SMEMBERS key # 获取集合key中的元素个数 SCARD key# 判断member元素是否存在于集合key中 SISMEMBER key member# 从集合key中随机选出count个元素元素不从key中删除 SRANDMEMBER key [count] # 从集合key中随机选出count个元素元素从key中删除 SPOP key [count]运算操作 # 交集运算 SINTER key [key ...] # 将交集结果存入新集合destination中 SINTERSTORE destination key [key ...]# 并集运算 SUNION key [key ...] # 将并集结果存入新集合destination中 SUNIONSTORE destination key [key ...]# 差集运算 SDIFF key [key ...] # 将差集结果存入新集合destination中 SDIFFSTORE destination key [key ...]4.4、应用场景 集合的主要几个特性无序、不可重复、支持并交差等操作。 因此 Set 类型比较适合用来数据去重和保障数据的唯一性还可以用来统计多个集合的交集、错集和并集等当我们存储的数据是无序并且需要去重的情况下比较适合使用集合类型进行存储。 但是要提醒你一下这里有一个潜在的风险。Set 的差集、并集和交集的计算复杂度较高在数据量较大的情况下如果直接执行这些计算会导致 Redis 实例阻塞。 在主从集群中为了避免主库因为 Set 做聚合计算交集、差集、并集时导致主库被阻塞我们可以选择一个从库完成聚合统计或者把数据返回给客户端由客户端来完成聚合统计。 点赞 Set 类型可以保证一个用户只能点一个赞这里举例子一个场景key 是文章idvalue 是用户id。 uid:1 、uid:2、uid:3 三个用户分别对 article:1 文章点赞了。 # uid:1 用户对文章 article:1 点赞SADD article:1 uid:1 (integer) 1 # uid:2 用户对文章 article:1 点赞SADD article:1 uid:2 (integer) 1 # uid:3 用户对文章 article:1 点赞SADD article:1 uid:3 (integer) 1uid:1 取消了对 article:1 文章点赞。 SREM article:1 uid:1 (integer) 1获取 article:1 文章所有点赞用户 : SMEMBERS article:1 1) uid:3 2) uid:2获取 article:1 文章的点赞用户数量 SCARD article:1 (integer) 2判断用户 uid:1 是否对文章 article:1 点赞了 SISMEMBER article:1 uid:1 (integer) 0 # 返回0说明没点赞返回1则说明点赞了共同关注 Set 类型支持交集运算所以可以用来计算共同关注的好友、公众号等。 key 可以是用户idvalue 则是已关注的公众号的id。 uid:1 用户关注公众号 id 为 5、6、7、8、9uid:2 用户关注公众号 id 为 7、8、9、10、11。 # uid:1 用户关注公众号 id 为 5、6、7、8、9SADD uid:1 5 6 7 8 9 (integer) 5 # uid:2 用户关注公众号 id 为 7、8、9、10、11SADD uid:2 7 8 9 10 11 (integer) 5uid:1 和 uid:2 共同关注的公众号 # 获取共同关注SINTER uid:1 uid:2 1) 7 2) 8 3) 9给 uid:2 推荐 uid:1 关注的公众号 SDIFF uid:1 uid:2 1) 5 2) 6验证某个公众号是否同时被 uid:1 或 uid:2 关注: SISMEMBER uid:1 5 (integer) 1 # 返回0说明关注了 SISMEMBER uid:2 5 (integer) 0 # 返回0说明没关注5、ZSet 5.1、介绍 Zset 类型有序集合类型相比于 Set 类型多了一个排序属性 score分值对于有序集合 ZSet 来说每个存储元素相当于有两个值组成的一个是有序集合的元素值一个是排序值。 有序集合保留了集合不能有重复成员的特性分值可以重复但不同的是有序集合中的元素可以排序。 5.2、内部实现 Zset 类型的底层数据结构是由压缩列表或跳表实现的 如果有序集合的元素个数小于 128 个并且每个元素的值小于 64 字节时Redis 会使用压缩列表作为 Zset 类型的底层数据结构如果有序集合的元素不满足上面的条件Redis 会使用跳表作为 Zset 类型的底层数据结构 在 Redis 7.0 中压缩列表数据结构已经废弃了交由 listpack 数据结构来实现了。 5.3、常用命令 基本操作 # 往有序集合key中加入带分值元素 ZADD key score member [[score member]...] # 往有序集合key中删除元素 ZREM key member [member...] # 返回有序集合key中元素member的分值 ZSCORE key member # 返回有序集合key中元素个数 ZCARD key # 为有序集合key中元素member的分值加上increment ZINCRBY key increment member # 正序获取有序集合key从start下标到stop下标的元素 ZRANGE key start stop [WITHSCORES] # 倒序获取有序集合key从start下标到stop下标的元素 ZREVRANGE key start stop [WITHSCORES]# 返回有序集合中指定分数区间内的成员分数由低到高排序。 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]# 返回指定成员区间内的成员按字典正序排列, 分数必须相同。 ZRANGEBYLEX key min max [LIMIT offset count] # 返回指定成员区间内的成员按字典倒序排列, 分数必须相同 ZREVRANGEBYLEX key max min [LIMIT offset count]运算操作 # 并集计算(相同元素分值相加)numberkeys一共多少个keyWEIGHTS每个key对应的分值乘积 ZUNIONSTORE destkey numberkeys key [key...] # 交集计算(相同元素分值相加)numberkeys一共多少个keyWEIGHTS每个key对应的分值乘积 ZINTERSTORE destkey numberkeys key [key...]5.4、应用场景 Zset 类型Sorted Set有序集合 可以根据元素的权重来排序我们可以自己来决定每个元素的权重值。比如说我们可以根据元素插入 Sorted Set 的时间确定权重值先插入的元素权重小后插入的元素权重大。 在面对需要展示最新列表、排行榜等场景时如果数据更新频繁或者需要分页显示可以优先考虑使用 Sorted Set。 排行榜 有序集合比较典型的使用场景就是排行榜。例如学生成绩的排名榜、游戏积分排行榜、视频播放排名、电商系统中商品的销量排名等。 我们以博文点赞排名为例PP发表了五篇博文分别获得赞为 200、40、100、50、150。 # arcticle:1 文章获得了200个赞ZADD user:pp:ranking 200 arcticle:1 (integer) 1 # arcticle:2 文章获得了40个赞ZADD user:pp:ranking 40 arcticle:2 (integer) 1 # arcticle:3 文章获得了100个赞ZADD user:pp:ranking 100 arcticle:3 (integer) 1 # arcticle:4 文章获得了50个赞ZADD user:pp:ranking 50 arcticle:4 (integer) 1 # arcticle:5 文章获得了150个赞ZADD user:pp:ranking 150 arcticle:5 (integer) 1文章 arcticle:4 新增一个赞可以使用 ZINCRBY 命令为有序集合key中元素member的分值加上increment ZINCRBY user:pp:ranking 1 arcticle:4 51查看某篇文章的赞数可以使用 ZSCORE 命令返回有序集合key中元素个数 ZSCORE user:pp:ranking arcticle:4 50获取小林文章赞数最多的 3 篇文章可以使用 ZREVRANGE 命令倒序获取有序集合 key 从start下标到stop下标的元素 # WITHSCORES 表示把 score 也显示出来ZREVRANGE user:pp:ranking 0 2 WITHSCORES 1) arcticle:1 2) 200 3) arcticle:5 4) 150 5) arcticle:3 6) 100获取小林 100 赞到 200 赞的文章可以使用 ZRANGEBYSCORE 命令返回有序集合中指定分数区间内的成员分数由低到高排序 ZRANGEBYSCORE user:pp:ranking 100 200 WITHSCORES 1) arcticle:3 2) 100 3) arcticle:5 4) 150 5) arcticle:1 6) 2006、BitMap 6.1、介绍 Bitmap即位图是一串连续的二进制数组0和1可以通过偏移量offset定位元素。BitMap通过最小的单位bit来进行0|1的设置表示某个元素的值或者状态时间复杂度为O(1)。 由于 bit 是计算机中最小的单位使用它进行储存将非常节省空间特别适合一些数据量大且使用二值统计的场景。 6.2、内部实现 Bitmap 本身是用 String 类型作为底层数据结构实现的一种统计二值状态的数据类型。 String 类型是会保存为二进制的字节数组所以Redis 就把字节数组的每个 bit 位利用起来用来表示一个元素的二值状态你可以把 Bitmap 看作是一个 bit 数组。 6.3、常用命令 bitmap 基本操作 # 设置值其中value只能是 0 和 1 SETBIT key offset value# 获取值 GETBIT key offset# 获取指定范围内值为 1 的个数 # start 和 end 以字节为单位 BITCOUNT key start endbitmap 运算操作 # BitMap间的运算 # operations 位移操作符枚举值AND 与运算 OR 或运算 |XOR 异或 ^NOT 取反 ~ # result 计算的结果会存储在该key中 # key1 … keyn 参与运算的key可以有多个空格分割not运算只能一个key # 当 BITOP 处理不同长度的字符串时较短的那个字符串所缺少的部分会被看作 0。返回值是保存到 destkey 的字符串的长度以字节byte为单位和输入 key 中最长的字符串长度相等。 BITOP [operations] [result] [key1] [keyn…]# 返回指定key中第一次出现指定value(0/1)的位置 BITPOS [key] [value]6.4、应用场景 Bitmap 类型非常适合二值状态统计的场景这里的二值状态就是指集合元素的取值就只有 0 和 1 两种在记录海量数据时Bitmap 能够有效地节省内存空间。 签到统计 在签到打卡的场景中我们只用记录签到1或未签到0所以它就是非常典型的二值状态。 签到统计时每个用户一天的签到用 1 个 bit 位就能表示一个月假设是 31 天的签到情况用 31 个 bit 位就可以而一年的签到也只需要用 365 个 bit 位根本不用太复杂的集合类型。 假设我们要统计 ID 100 的用户在 2022 年 6 月份的签到情况就可以按照下面的步骤进行操作。 第一步执行下面的命令记录该用户 6 月 3 号已签到。 SETBIT uid:sign:100:202206 2 1第二步检查该用户 6 月 3 日是否签到。 GETBIT uid:sign:100:202206 2 第三步统计该用户在 6 月份的签到次数。 BITCOUNT uid:sign:100:202206这样我们就知道该用户在 6 月份的签到情况了。 如何统计这个月首次打卡时间呢 Redis 提供了 BITPOS key bitValue [start] [end]指令返回数据表示 Bitmap 中第一个值为 bitValue 的 offset 位置。 在默认情况下 命令将检测整个位图 用户可以通过可选的 start 参数和 end 参数指定要检测的范围。所以我们可以通过执行这条命令来获取 userID 100 在 2022 年 6 月份首次打卡日期 BITPOS uid:sign:100:202206 1需要注意的是因为 offset 从 0 开始的所以我们需要将返回的 value 1 。 判断用户登陆态 Bitmap 提供了 GETBIT、SETBIT 操作通过一个偏移值 offset 对 bit 数组的 offset 位置的 bit 位进行读写操作需要注意的是 offset 从 0 开始。 只需要一个 key login_status 表示存储用户登陆状态集合数据 将用户 ID 作为 offset在线就设置为 1下线设置 0。通过 GETBIT判断对应的用户是否在线。 5000 万用户只需要 6 MB 的空间。 假如我们要判断 ID 10086 的用户的登陆情况 第一步执行以下指令表示用户已登录。 SETBIT login_status 10086 1第二步检查该用户是否登陆返回值 1 表示已登录。 GETBIT login_status 10086第三步登出将 offset 对应的 value 设置成 0。 SETBIT login_status 10086 0连续签到用户总数 如何统计出这连续 7 天连续打卡用户总数呢 我们把每天的日期作为 Bitmap 的 keyuserId 作为 offset若是打卡则将 offset 位置的 bit 设置成 1。 key 对应的集合的每个 bit 位的数据则是一个用户在该日期的打卡记录。 一共有 7 个这样的 Bitmap如果我们能对这 7 个 Bitmap 的对应的 bit 位做 『与』运算。同样的 UserID offset 都是一样的当一个 userID 在 7 个 Bitmap 对应对应的 offset 位置的 bit 1 就说明该用户 7 天连续打卡。 结果保存到一个新 Bitmap 中我们再通过 BITCOUNT 统计 bit 1 的个数便得到了连续打卡 7 天的用户总数了。 Redis 提供了 BITOP operation destkey key [key ...]这个指令用于对一个或者多个 key 的 Bitmap 进行位元操作。 operation 可以是 and、OR、NOT、XOR。当 BITOP 处理不同长度的字符串时较短的那个字符串所缺少的部分会被看作 0 。空的 key 也被看作是包含 0 的字符串序列。 假设要统计 3 天连续打卡的用户数则是将三个 bitmap 进行 AND 操作并将结果保存到 destmap 中接着对 destmap 执行 BITCOUNT 统计如下命令 # 与操作 BITOP AND destmap bitmap:01 bitmap:02 bitmap:03 # 统计 bit 位 1 的个数 BITCOUNT destmap即使一天产生一个亿的数据Bitmap 占用的内存也不大大约占 12 MB 的内存10^8/8/1024/10247 天的 Bitmap 的内存开销约为 84 MB。同时我们最好给 Bitmap 设置过期时间让 Redis 删除过期的打卡数据节省内存
http://www.hkea.cn/news/14400845/

相关文章:

  • 清远专业网站制作公司wordpress 网站打开速度慢
  • 佛山做网站开发东莞如何编写网站建设
  • 山西笑傲网站建设推广拓者吧室内设计吧
  • 网站建设的需求新手学网络运营要多久
  • 吴川网站建设余姚网站建设维护最新招聘信息
  • 电影网站如何做会同县做网站
  • 景观设计师如何做网站wordpress折叠菜单插件
  • 自适应网站建设哪家好代理网站是什么
  • 域名有关的网站wordpress网站搭建教程视频
  • 专业做化妆品的网站有哪些合肥模板建站多少钱
  • 企业网站改一下多少钱织梦个人网站模版
  • 贵州住房和城乡建设厅网站网站建设违约合同
  • 网站怎么做才是对搜索引擎友好重庆电商网站建设费用
  • 网站建设与企业管理心得体会name域名的网站
  • 网站域名备案注册证书wordpress 回收站在哪个文件夹
  • 给一个公司做网站需要什么内容做图像网站
  • 企业网站建设专业wordpress 留言页面
  • 企业网站策划案模板大连专业企业建站找哪家
  • 房地产网站cms贵阳公司电话号码大全
  • 模型网站大全免费怎样做影视网站不侵权
  • 如何攻击织梦做的网站方法html5在线代码编辑器
  • 自助建站系统搭建网站wordpress更改页面设置
  • 自己怎么手机做网站wordpress实现pdf浏览器
  • 西宁手机网站微站建设wordpress 提问
  • 电子商务网站建设ppt模板广州网站建设新锐
  • 电子商务网站开发实例做新媒体应该关注什么网站
  • 网站备案包括哪些宁夏做网站
  • 有趣的网站代码wordpress squarespace
  • 杭州国外网站推广公司怎么做自己的音乐网站
  • 电子商务网站建设的大纲手机微网站开发的目的和意义