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

网站开发与设计实验报告总结wordpress 突然502

网站开发与设计实验报告总结,wordpress 突然502,网站开发设计实训实训总结,公司网站建设方案所需素材redis的基本数据类型 1、redis1.1、数据库分类1.2、NoSQL分类1.3、redis简介1.4、redis应用1.5、如何学习redis 2、redis的安装2.1、Windows安装2.2.1、客户端redis管理工具 2.2、Linux安装#x1f525;2.2.1、redis核心文件2.2.2、启动方式2.2.3、redis桌面客户端1、redis命令… redis的基本数据类型 1、redis1.1、数据库分类1.2、NoSQL分类1.3、redis简介1.4、redis应用1.5、如何学习redis 2、redis的安装2.1、Windows安装2.2.1、客户端redis管理工具 2.2、Linux安装2.2.1、redis核心文件2.2.2、启动方式2.2.3、redis桌面客户端1、redis命令行客户端2、图形化桌面客户端 3、数据类型3.1、概况3.2、String类型3.2.1、常用的命令3.2.2、非常用命令3.2.3、应用场景 3.3、Hash类型3.3.0、内部实现3.3.1、常用的命令3.3.2、应用场景 3.4、List类型3.4.0、内部实现3.4.1、常用的命令3.4.2、非常用命令3.4.3、应用场景 3.5、Set类型3.5.0、内部实现3.5.1、常用的命令3.5.2、非常用命令3.5.4、应用场景 3.6、Zset类型3.6.1、内部实现3.6.1、常用的命令3.6.2、非常用命令3.6.4、应用场景 4、Key的设计4.1、唯一性4.2、可读性4.3、时效性4.4、灵活性 5、设置密码5.1、通过配置文件设置密码5.2、通过命令行设置密码5.3、更改密码5.4、取消密码4.4、灵活性 参考视频适合后端编程人员的Redis实战教程、redis应用场景、分布式缓存、Session管理、面试相关 1、redis 1.1、数据库分类 目前数据库分关系型数据库与非关系型数据库 常用的关系型数据库 OracleMySQLSqlServerDB2 常用的非关系数据库RedisMongoDBElasticSearch HbaseNeo4j 那啥是非关系数据库呢此处涉及到新名词NoSQL NoSQL最常见的解释是non-relational Not Only SQL也被很多人接受。NoSQL仅仅是一个概念泛指非关系型的数据库区别于关系数据库它们不保证关系数据的ACID特性。 如商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈音频、视频存储等相关使用传统的关系型数据库实现就显得非常复杂虽然能实现相应功能但是在性能上却不是那么乐观。NoSQL这个技术门类的出现更好的解决了这些问题它告诉了世界不仅仅是sql。 1.2、NoSQL分类 分类举例典型应用场景数据模型优点缺点键值(key-value)存储数据库redis内容缓存主要用于处理大量数据的高访问负载也用于一些日志系统等。通常用HashTable来实现查找速度快数据无结构化列存储数据库HBase分布式的文件系统将同一列数据存在一起查找速度块更容易进行分布式扩展功能相对局限文档型数据库MongoDB查询性能不高且缺乏统一的查询语法图形数据库Infinite Graph社交网络专注于构建关系图谱图结构利用图数据结构相关算法对整个图进行计算才能得到需要的信息 1.3、redis简介 redis是以key-value形式存储和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求。 优点 对数据高并发读写(直接是内存中进行读写的)对海量数据的高效率存储和访问对数据的可拓展性和高可用性单线程操作,每个操作都是原子操作,没有并发相关问题 缺点 无法做太复杂的关系数据库模型redis(ACID处理非常简单) redis 定位是缓存提高数据读写速度减轻对数据库存储和访问压力。redis是一个内存型的数据库 1.4、redis应用 任务队列如秒杀、抢购、购票排队等 即时信息查询如各位排行榜、各类网站访问统计、公交到站信息 为热点数据加速查询主要场景如热点商品、热点新闻 消息队列、分布式锁 1.5、如何学习redis redis 在线入门 http://try.redis.io/ redis 中文资料官网 http://www.redis.cn/ redis 中文教程https://www.runoob.com/redis/redis-tutorial.html redis官网https://redis.io/download/ 2、redis的安装 2.1、Windows安装 windows版https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100 傻瓜式安装一直下一步就可以了注意要添加到环境变量中 默认端口 最大内存 测试是否成功 winr 输入 redis-cli 2.2.1、客户端redis管理工具 AnotherRedisDesktopManager 工具可以用来可视化管理redis可以理解为 MySQL的 Sqlyog、Navicat等管理工具。 Github GUI client], compatible with Linux, Windows, Mac. (github.com)GiteeAnotherRedisDesktopManager 发行版 - Gitee.com 下载完成后安装即可 2.2、Linux安装 进入Linux官网下载最新稳定版本https://redis.io/download/ 将其上传至 Linux 服务器目录下 /www/server/redis 中并进行解压。 我这里使用 wget 命令下载和上述步骤作用一致 # 进入/www/server/redis目录下载 wget https://github.com/redis/redis/archive/7.2.3.tar.gz http://github.com/redis/redis/archive/7.2.3.tar.gz # 解压 tar -zxvf 7.2.3.tar.gz进入到解压目录执行编译命令 # 进入到解压目录 cd redis-7.2.3/# 执行编译命令 make进行安装 # 安装,默认是安装到 /usr/local/bin 目录 make install共安装了三个组件redis server服务器、redis-cli客户端与一个性能测试工具 benchmark 新建一个系统服务文件 vi /etc/systemd/system/redis.service内容如下 [Unit] Descriptionredis-server Afternetwork.target[Service] Typeforking ExecStart/usr/local/bin/redis-server /www/server/redis/redis-7.2.3/redis.conf PrivateTmptrue[Install] WantedBymulti-user.target进入/www/server/redis/redis-7.2.3先拷贝redis.conf然后进行修改 # 拷贝 cp redis.conf redis.conf.back修改redis.conf的配置 # 允许访问的地址默认是127.0.0.1会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问生产环境不要设置为0.0.0.0 bind 0.0.0.0 # 守护进程修改为yes后即可后台运行 daemonize yes 然后重载系统服务 systemctl daemon-reload现在我们可以用下面这组命令来操作redis了 # 启动 systemctl start redis # 停止 systemctl stop redis # 重启 systemctl restart redis # 查看状态 systemctl status redis执行下面的命令可以让redis开机自启 systemctl enable redis查看 redis 版本 # 查看服务端版本 redis-server -v# 查看客户端版本 redis-cli -v2.2.1、redis核心文件 在 /usr/local/bin 目录中可以看到如下文件 redis-serve 服务器启动命令redis-cli 命令行客户端redis-benchmark redis 性能测试工具redis-check-aof AOF文件修复工具redis-check-dump RDB文件检查工具快照持久化文件 通过echo $PATH 可以看到/usr/local/bin 目录是存在于该系统变量中的这样这些命令就可以在任意目录中执行了这就是为什么我们在任意目录都可以直接使用redis-cli 进行命令行 2.2.2、启动方式 方式一前台启动安装完成后在任意目录输入redis-server命令即可启动Redis redis-server这种启动属于前台启动会阻塞整个会话窗口窗口关闭或者按下CTRL C则Redis停止。不推荐使用。 方式二指定配置文件启动如果要让Redis以后台方式启动则必须修改Redis配置文件就在我们之前解压的redis安装包下/www/server/redis/redis-7.2.3名字叫redis.conf 我们先将这个配置文件备份一份 cp redis.conf redis.conf.back然后修改redis.conf文件中的一些配置 # 允许访问的地址默认是127.0.0.1会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问生产环境不要设置为0.0.0.0 bind 0.0.0.0 # 守护进程修改为yes后即可后台运行 daemonize yes # 密码设置后访问Redis必须输入密码 requirepass 1234Redis的其它常见配置 # 监听的端口 port 6379 # 工作目录默认是当前目录也就是运行redis-server时的命令日志.持久化等文件会保存在这个目录 dir . # 数据库数量设置为1代表只使用1个库默认有16个库编号0~15 databases 1 # 设置redis能够使用的最大内存 maxmemory 512mb # 日志文件默认为空不记录日志可以指定日志文件名 logfile redis.log启动Redis # 进入redis安装目录 cd /www/server/redis/redis-7.2.3 # 启动 redis-server redis.conf停止redis # 利用redis-cli来执行 shutdown 命令即可停止 Redis 服务 # 因为之前配置了密码因此需要通过 -u 来指定密码 redis-cli -u 1234 shutdown方式三是开机自启已经在2.2目录进行了设置 当给redis.conf 设置了密码requirepass 1234则启动时需要auth 1234 2.2.3、redis桌面客户端 1、redis命令行客户端 Redis安装完成后就自带了命令行客户端redis-cli使用方式如下 redis-cli [options] [commonds]其中常见的options有 -h 127.0.0.1指定要连接的redis节点的IP地址默认是127.0.0.1-p 6379指定要连接的redis节点的端口默认是6379-a 1234指定redis的访问密码 其中的commonds就是Redis的操作命令例如 ping与redis服务端做心跳测试服务端正常会返回pong 2、图形化桌面客户端 AnotherRedisDesktopManager 进去下载 exe 文件即可 使用教程https://blog.csdn.net/zsewer/article/details/129325846 注意在连接的时候请确保服务器的防火墙端口打开6379否则会连接不上 3、数据类型 3.1、概况 Redis支持的存储数据类型有很多 常用string字符串hash哈希list列表set集合及zset(sorted set有序集合) 不常用HyperLogLogBitmap(位图)Bloom Filter(布隆过滤器)Geospatial(地理位置) Module(模块) Streams(流信息) 命令格式 类型命令keyvaluesetnamezhangsan 操作建议 Redis操作有点类似Java的Map集合都是key-value形式存储数据在学习过程中可以进行类比。 另外Redis中的key大部分为String类型value值根据缓存数据结构可以选用stringhashlistsetzset等类型。 注意下面讲的各种类型表述的是缓存数据的value类型。 3.2、String类型 String类型包含多种类型的特殊类型并且是二进制安全的其值可以是数值可以是字符串也可以是二进制数据。 3.2.1、常用的命令 命令格式功能案例说明set key value将key-value缓存redis中set name qxl设置name字段为qxlget key从redis中获取key对应value值get name获取name字段对应的valueincr key将key对应value值 1incr age给age字段1decr key将key对应value值-1decr age给age字段-1setex key seconds value将key-value缓存到redis中seconds 秒后失效setex sex 10 man将sex字段设置为10s的manttl key查看key存活时间ttl sex查看sex字段对应的 value 存活时间del key从redis中删除keydel name删除name字段setnx key value如果key已经存不做任何操作如果key不存直接添加setnx name xiaofei 普通字符串的基本操作 # 设置 key-value 类型的值SET name lin OK# 根据 key 获得对应的 valueGET name lin# 判断某个 key 是否存在EXISTS name (integer) 1# 返回 key 所储存的字符串值的长度STRLEN name (integer) 3# 删除某个 key 对应的值DEL name (integer) 13.2.2、非常用命令 命令格式功能案例incrby key increment给key对应值加incrementincrby age 10mset k1 v1 k2 v2…批量添加k1v1 k2v2 key value对mset name dafei age 18mget k1 k2…批量获取k1, k2的值mget name ageappend key value在key对应的value值中拼valueappend name yessetrange key offset value修改key对应的value值,替换为指定value,冲offset索引位置开始setrange name 2 xx 批量设置 # 批量设置 key-value 类型的值MSET key1 value1 key2 value2 OK# 批量获取多个 key 对应的 valueMGET key1 key2 1) value1 2) value2计数器字符串的内容为整数的时候可以使用 # 设置 key-value 类型的值SET number 0 OK# 将 key 中储存的数字值增一INCR number (integer) 1# 将key中存储的数字值加 10INCRBY number 10 (integer) 11# 将 key 中储存的数字值减一DECR number (integer) 10# 将key中存储的数字值键 10DECRBY number 10 (integer) 0过期默认为永不过期 # 设置 key 在 60 秒后过期该方法是针对已经存在的key设置过期时间EXPIRE name 60 (integer) 1 # 查看数据还有多久过期TTL name (integer) 51#设置 key-value 类型的值并设置该key的过期时间为 60 秒SET key value EX 60 OKSETEX key 60 value OK不存在就插入 # 不存在就插入not exists SETNX key value (integer) 13.2.3、应用场景 缓存对象使用 String 来缓存对象有两种方式 直接缓存整个对象的 JSON命令例子 SET user:1 {name:xiaolin, age:18}。采用将 key 进行分离为 user:ID:属性采用 MSET 存储用 MGET 获取各属性值命令例子 MSET user:1:name xiaolin user:1:age 18 user:2:name xiaomei user:2:age 20。 主页高频访问信息显示控制例如新浪微博大V主页显示粉丝数与微博数量。这就是常规计数计算访问次数、点赞次数、转发次数等。 共享session 通常我们在开发后台管理系统时会使用 Session 来保存用户的会话(登录)状态这些 Session 信息会被保存在服务器端但这只适用于单系统应用如果是分布式系统此模式将不再适用。 例如用户一的 Session 信息被存储在服务器一但第二次访问时用户一被分配到服务器二这个时候服务器并没有用户一的 Session 信息就会出现需要重复登录的问题问题在于分布式系统每次会把请求随机分配到不同的服务器。 出于负载均衡的考虑分布式服务会将用户信息的访问均衡到不同服务器上用户刷新一次访问可能会需要重新登录为避免这个问题可以用redis将用户session集中管理 在这种模式下只要保证redis的高可用和扩展性的每次获取用户更新或查询登录信息都直接从redis中集中获取。 3.3、Hash类型 Hash 是一个键值对key - value集合其中 value 的形式如 value[{field1value1}...{fieldNvalueN}]。Hash类型特别适合存储对象 类似Java中MapString, MapString, ? map 3.3.0、内部实现 Hash 类型的底层数据结构是由压缩列表或哈希表实现的 如果哈希类型元素个数小于 512 个所有值小于 64 字节的话Redis 会使用压缩列表作为 Hash 类型的底层数据结构如果哈希类型元素不满足上面条件Redis 会使用哈希表作为 Hash 类型的 底层数据结构 在 Redis 7.0 中压缩列表数据结构已经废弃了交由 listpack 数据结构来实现了。 3.3.1、常用的命令 命令格式功能案例说明hset key field value将field value对缓存到redis中hash中键值为keyhset user name dafei给user中的name字段设置为dafeihget key field从key对应hash列表中获取field字段hget user name获取user中的name字段hexists key field判断key对应的hash列表是否存在 field字段hexists user age判断user中是否存在age字段hdel key field删除key对应hash列表中field字段hdel user age删除user中的age字段hincrby key field increment给key对应hash列表中field字段 incrementhincrby user age 10给user中的age字段10hlen key查看key对应的hash列表field的数量hlen user查看user中的所有 keyhkeys key获取key对应的hash列表所有的field值hkeys user获取user中的所有 keyhvals key获取key对应的hash列表所有的field对应的value值hvals user获取user中的所有valuehgetall key获取key对应的hash列表中所有的field及其对应的value值hgetall user获取user中的所有 key 和 value # 存储一个哈希表key的键值 HSET key field value # 获取哈希表key对应的field键值 HGET key field# 在一个哈希表key中存储多个键值对 HMSET key field value [field value...] # 批量获取哈希表key中多个field键值 HMGET key field [field ...] # 删除哈希表key中的field键值 HDEL key field [field ...] # 返回哈希表key中field的数量 HLEN key # 返回哈希表key中所有的键值 HGETALL key # 为哈希表key中field键的值加上增量n HINCRBY key field n Hash类型数据操作的注意事项 Hash类型下的 value 只能存储字符串不允许存储其他数据类型Hash设计的初衷不是为了存储大量对象的切记不可滥用。 3.3.2、应用场景 缓存对象Hash 类型的 keyfield value 的结构与对象的对象id 属性 值的结构相似也可以用来存储对象。我们以用户信息为例它在关系型数据库中的结构是这样的 uidnameage1Tom152Jerry13我们可以使用如下命令将用户对象的信息存储到 Hash 类型 # 存储一个哈希表uid:1的键值HMSET uid:1 name Tom age 15 2 # 存储一个哈希表uid:2的键值HMSET uid:2 name Jerry age 13 2 # 获取哈希表用户id为1中所有的键值HGETALL uid:1 1) name 2) Tom 3) age 4) 15一般对象用 String Json 存储对象中某些频繁变化的属性可以考虑抽出来用 Hash 类型存储。 电商网站购物车设计 以客户id作为key每位客户创建一个hash存储结构存储对应的购物车信息。将商品编号作为field购买数量作为value进行存储 keyvalueid{name: dafeifield:001value:3} 添加购物车追加全新的field与value 浏览购物车遍历hash 更改购物车数量自增/自减设置value值 删除购物车商品删除field 清空购物车删除key 3.4、List类型 List类型是一个链表结构的集合其主要功能有push、pop、获取元素等。类似Java中MapString, List map 3.4.0、内部实现 如果列表的元素个数小于 512 个列表每个元素的值都小于 64 字节Redis 会使用压缩列表作为 List 类型的底层数据结构如果列表的元素不满足上面的条件Redis 会使用双向链表作为 List 类型的底层数据结构 但是在 Redis 3.2 版本之后List 数据类型底层数据结构就只由 quicklist 实现了替代了双向链表和压缩列表 3.4.1、常用的命令 命令格式功能案例说明rpush key value从右边往key集合中添加value值rpush hobby java从右边向 hobby 集合中添加 java 字段lrange key start stop从左边开始列表key集合从start位置开始stop位置结束lrange hobby 0 3lrange hobby 0 -1从左边开始罗列 hobby 集合下标 0-3 的字段从左边开始罗列 hobby 集合下所有字段lpush key value从左边往key集合中添加value值lpush hobby c从左边向 hobby 集合中添加 c 字段lpop key弹出key集合中最左边的数据lpop hobby弹出 hobby 集合中最左边的数据rpop key弹出key集合中最右边的数据rpop hobby弹出 hobby 集合中最右边的数据llen key获取列表长度llen hooby获取 hobby 集合的长度 # 将一个或多个值value插入到key列表的表头(最左边)最后的值在最前面 LPUSH key value [value ...] # 将一个或多个值value插入到key列表的表尾(最右边) RPUSH key value [value ...] # 移除并返回key列表的头元素 LPOP key # 移除并返回key列表的尾元素 RPOP key # 返回列表key中指定区间内的元素区间以偏移量start和stop指定从0开始 LRANGE key start stop# 从key列表表头弹出一个元素没有就阻塞timeout秒如果timeout0则一直阻塞 BLPOP key [key ...] timeout # 从key列表表尾弹出一个元素没有就阻塞timeout秒如果timeout0则一直阻塞 BRPOP key [key ...] timeout3.4.2、非常用命令 命令格式功能案例linsert key before pivot value操作key集合在pivot值之前插入valuelinsert hobby before java c#linsert key after pivot value操作key集合在pivot值之后插入valuelinsert hobby after java c#lset key index value操作key集合更新索引index位置值为valuelset hobby 1 golrem key count value操作key集合删除 count个 value值lrem hobby 3 goltrim key start stop操作key集合从start到stop截取自列表ltrim hobby 2 4lindex key index操作key集合获取索引为index位置的数据lindex hobby 1 3.4.3、应用场景 用户收藏文章列表 keyvalueuser_favor_article_list[aid1, aid2, aid3…] 消息队列小林coding 3.5、Set类型 Set 类型是一个无序并唯一的键值集合它的存储顺序不会按照插入的先后顺序进行存储。 Set 类型和 List 类型的区别如下 List 可以存储重复元素Set 只能存储非重复元素List 是按照元素的先后顺序存储元素的而 Set 则是无序方式存储元素的。 3.5.0、内部实现 Set 类型的底层数据结构是由哈希表或整数集合实现的 如果集合中的元素都是整数且元素个数小于 512 默认值set-maxintset-entries配置个Redis 会使用整数集合作为 Set 类型的底层数据结构如果集合中的元素不满足上面条件则 Redis 使用哈希表作为 Set 类型的底层数据结构。 3.5.1、常用的命令 命令格式功能案例说明sadd key members […]往key 集合中添加member元素sadd myset a b c给集合 myset 添加 a b c 元素smembers key遍历key集合中所有的元素smembers myset遍历集合 mysetsrem key members […]删除key集合中members元素srem myset a删除myset集合中的元素aspop key count从key集合中随机弹出count个元素spop myset 1 # 往集合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]3.5.2、非常用命令 命令格式功能案例sdiff key1 key2返回key1中特有的元素(差集)sdiff key1 key2sidiffstore dest key1 key2返回key1中特有的元素并将返回值缓存到dest集合中sidiffstore dest key1 key2sinter key1 key2返回key1跟key2集合的交集sinter key1 key2sinterstore dest key1 key2返回key1跟key2集合的交集并将返回值缓存到dest集合中sinterstore dest key1 key2sunion key1 key2返回key1跟key2集合的并集sunion key1 key2sunionstore dest key1 key2返回key1跟key2集合的并集并将返回值缓存到dest集合中sunionstore dest key1 key2smove source destination member将source集合中member元素移动到destination集合中smove key1 key2 aasismember key member判断member元素是否在key集合中sismember key1 aasrandmember key count随机获取set集合中count 个元素srandmem # 交集运算 SINTER key [key ...] # 将交集结果存入新集合destination中 SINTERSTORE destination key [key ...]# 并集运算 SUNION key [key ...] # 将并集结果存入新集合destination中 SUNIONSTORE destination key [key ...]# 差集运算 SDIFF key [key ...] # 将差集结果存入新集合destination中 SDIFFSTORE destination key [key ...]3.5.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) 1# uid: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) 5# 获取共同关注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说明没关注抽奖活动存储某活动中中奖的用户名 Set 类型因为有去重功能可以保证同一个用户不会中奖两次 # key为抽奖活动名value为员工名称把所有员工名称放入抽奖箱 SADD lucky Tom Jerry John Sean Marry Lindy Sary Mark (integer) 5# 如果允许重复中奖可以使用 SRANDMEMBER 命令 # 抽取 1 个一等奖SRANDMEMBER lucky 1 1) Tom # 抽取 2 个二等奖SRANDMEMBER lucky 2 1) Mark 2) Jerry # 抽取 3 个三等奖SRANDMEMBER lucky 3 1) Sary 2) Tom 3) Jerry如果不允许重复中奖可以使用 SPOP 命令 # 抽取一等奖1个SPOP lucky 1 1) Sary # 抽取二等奖2个SPOP lucky 2 1) Jerry 2) Mark # 抽取三等奖3个SPOP lucky 3 1) John 2) Sean 3) Lindy3.6、Zset类型 Zset 类型有序集合类型相比于 Set 类型多了一个排序属性 score分值对于有序集合 ZSet 来说每个存储元素相当于有两个值组成的一个是有序集合的元素值一个是排序值。有序集合保留了集合不能有重复成员的特性分值可以重复但不同的是有序集合中的元素可以排序。 3.6.1、内部实现 Zset 类型的底层数据结构是由压缩列表或跳表实现的 如果有序集合的元素个数小于 128 个并且每个元素的值小于 64 字节时Redis 会使用压缩列表作为 Zset 类型的底层数据结构如果有序集合的元素不满足上面的条件Redis 会使用跳表作为 Zset 类型的底层数据结构 在 Redis 7.0 中压缩列表数据结构已经废弃了交由 listpack 数据结构来实现了。 3.6.1、常用的命令 命令格式功能案例说明zadd key score member往key集合中添加member元素分数为scorezadd players 100 a向players集合添加a元素分数为100zincrby key increment member将key集合中的member元素 分数 incrementzadd players 100 a向players集合的a元素分数100zrange key start stop [withscores]将key集合中的元素按分数升序排列 [显式分数]zrange players 0 -1 withscoreszrevrange key start stop [withscores]将key集合中的元素按分数降序排列 [显式分数]zrevrange players 0 -1 withscoreszrank key member返回member元素在key结合中的正序排名zrank players a返回players集合中a元素的正序排名zrevrank key member返回member元素在key结合中的倒序排名zrevrank players azcard key返回key集合元素个数zcard players # 往有序集合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]Zset 运算操作相比于 Set 类型ZSet 类型没有支持差集运算: # 并集计算(相同元素分值相加)numberkeys一共多少个keyWEIGHTS每个key对应的分值乘积 ZUNIONSTORE destkey numberkeys key [key...] # 交集计算(相同元素分值相加)numberkeys一共多少个keyWEIGHTS每个key对应的分值乘积 ZINTERSTORE destkey numberkeys key [key...]3.6.2、非常用命令 命令格式功能案例zrangebyscore key min max [withscores]按[min, max) 分数范围返回key集合中元素(正序)zrangebyscore players 200 300 withscoreszrevrangebyscore key min max [withscores]按[min, max) 分数范围返回key集合中元素(倒序)zrevrangebyscore players 200 300 withscoreszrem key member删除key集合中member元素与分数zrem players azremrangebyscore key min max withscores按[min, max) 分数范围删除key集合中元素zremrangebyscore players 200 300 withscoreszremrangebyrank key start stop删除key集合正序排名落在[start, stop) 范围元素zremrangebyrank players 10 20zcount key min max按照分数范围[min, max]统计key集合中元素个数zcount players 100 300 3.6.4、应用场景 ​ Zset 类型Sorted Set有序集合 可以根据元素的权重来排序我们可以自己来决定每个元素的权重值。比如说我们可以根据元素插入 Sorted Set 的时间确定权重值先插入的元素权重小后插入的元素权重大。 ​ 在面对需要展示最新列表、排行榜等场景时如果数据更新频繁或者需要分页显示可以优先考虑使用 Sorted Set。 排行榜我们以博文点赞排名为例小林发表了五篇博文分别获得赞为 200、40、100、50、150。 # arcticle:1 文章获得了200个赞ZADD user:xiaolin:ranking 200 arcticle:1 (integer) 1 # arcticle:2 文章获得了40个赞ZADD user:xiaolin:ranking 40 arcticle:2 (integer) 1 # arcticle:3 文章获得了100个赞ZADD user:xiaolin:ranking 100 arcticle:3 (integer) 1 # arcticle:4 文章获得了50个赞ZADD user:xiaolin:ranking 50 arcticle:4 (integer) 1 # arcticle:5 文章获得了150个赞ZADD user:xiaolin:ranking 150 arcticle:5 (integer) 1文章 arcticle:4 新增一个赞可以使用 ZINCRBY 命令为有序集合key中元素member的分值加上increment ZINCRBY user:xiaolin:ranking 1 arcticle:4 51查看某篇文章的赞数可以使用 ZSCORE 命令返回有序集合key中元素个数: ZSCORE user:xiaolin:ranking arcticle:4 50获取小林文章赞数最多的 3 篇文章可以使用 ZREVRANGE 命令倒序获取有序集合 key 从start下标到stop下标的元素 # WITHSCORES 表示把 score 也显示出来ZREVRANGE user:xiaolin:ranking 0 2 WITHSCORES 1) arcticle:1 2) 200 3) arcticle:5 4) 150 5) arcticle:3 6) 100获取小林 100 赞到 200 赞的文章可以使用 ZRANGEBYSCORE 命令返回有序集合中指定分数区间内的成员分数由低到高排序 ZRANGEBYSCORE user:xiaolin:ranking 100 200 WITHSCORES 1) arcticle:3 2) 100 3) arcticle:5 4) 150 5) arcticle:1 6) 2004、Key的设计 Redis 的key 设计讲究4个性 4.1、唯一性 Redis 类似Map集合key必须保证唯一缓存同一个key时后者会覆盖前者所以必须要求唯一那如何保证唯一呢最常用的方式使用缓存数据的主键作为key。 比如缓存员工信息 keyvalue1员工12员工2 其中的1 2 是员工的id 4.2、可读性 可读性是保证Redis的key能做到见名知意上面的员工id1 员工id2 虽说能保证key唯一但可读性非常差维护key时无法从1 2中快速判断该key对应value值。所以一一般在保证key唯一的前提下给key加上前缀 keyvalueemployee_info:id1员工1employee_info:id2员工2 employee_info:id1 、 employee_info:id2 这样子设计key可读性就好多了。 通用玩法业务模块名:业务逻辑含义:其他:value类型 keyvalueemployee :base.info:id1:hash员工对象信息 业务模块名表示该key属于哪个功能模块 业务逻辑含义段这里可以使用 . 分开 具体业务逻辑表示 比如缓存员工权限employee:auth.permission:id1:set 员工权限集合 其他一般设置唯一标识比如主键 value类型key对应value类型值提高可读性。 4.3、时效性 redis key一定要设置过期时间。要跟自己的业务场景需要对key设置合理的过期时间。可以在写入key时就要追加过期时间也可以在按照需要动态设置。 这里要注意 不设置过期时间这种key为永久key会一直占用内存不释放时间久了数量一多就容易达到服务器的内存上限导致宕机开发时一般配合Key过期策略使用哦。key的时效性设置必须根据业务场景进行评估设置合理有效期 4.4、灵活性 这个难介绍一般key保证唯一时可以使用主键有的使用一个主键不能表达出全部意思可以使用联合主键。 比如id为1的朋友圈下id为A的评论。 keyvaluepost:1:reply:A评论内容post:1:reply:B评论内容 5、设置密码 下面我们将介绍两种常用的方法来为Redis设置密码 5.1、通过配置文件设置密码 在Redis的配置文件redis.conf中可以通过以下步骤来设置密码 打开redis.conf文件(我的是在./www/server/redis/redis-7.2.3目录下)找到并取消注释requirepass项 在requirepass后面添加你想要设置的密码如requirepass 1234。 保存并关闭配置文件。 重新启动Redis服务器使密码生效。 5.2、通过命令行设置密码 除了通过配置文件还可以直接通过命令行来为Redis设置密码。打开终端并输入以下命令 redis-cli接着在命令行中输入以下命令来设置密码 config set requirepass mypassword运行上述命令后Redis将返回OK表示密码设置成功。 验证: 在redis命令行中使用auth mypassword来验证密码如果密码正确Redis将返回OK表示密码验证成功。 5.3、更改密码 在redis命令行中更改 config set requirepass newpassword替换newpassword为你想要设置的新密码。 5.4、取消密码 在redis命令行中更改 config set requirepass 运行上述命令后Redis将返回OK表示密码已成功取消。 多就容易达到服务器的内存上限导致宕机开发时一般配合Key过期策略使用哦。 key的时效性设置必须根据业务场景进行评估设置合理有效期 4.4、灵活性 这个难介绍一般key保证唯一时可以使用主键有的使用一个主键不能表达出全部意思可以使用联合主键。 比如id为1的朋友圈下id为A的评论。 keyvaluepost:1:reply:A评论内容post:1:reply:B评论内容
http://www.w-s-a.com/news/40569/

相关文章:

  • 企业网站手机版模板免费下载辣条网站建设书
  • 南昌网站建设维护vc 做网站源码
  • 网站动态logo怎么做织梦移动端网站怎么做
  • 三亚城乡建设局网站app下载安装官方网站
  • 公司被其它人拿来做网站郑州哪家做网站最好
  • 山东省建设厅官方网站抖音代运营业务介绍
  • 网站制作 牛商网wordpress商城 微信支付
  • 平面设计培训网站建文帝网站建设
  • python网站建设佛山乐从网站建设
  • 网站 免费 托管运营app软件大全
  • 爱网站找不到了网站设计制作要交印花税
  • 分销平台是什么意思网站如何从行为数据进行优化
  • 做网站公司职务做民俗酒店到哪些网站推荐
  • 从0到建网站wordpress导航主题模板下载地址
  • 以3d全景做的网站统计网站的代码
  • 北辰网站建设WordPress换主题文件夹
  • 做网站的合同范文百度分析工具
  • 深圳企业网站制作公司单位注册wordpress发送邮件
  • 兰州专业网站建设团队wordpress 拉取点击数
  • 基于php房产网站开发ppt模板免费下载第一ppt
  • 网站盈利模式分析怎么做山东营销网站建设联系方式
  • 二级网站建设 知乎我的个人主页模板
  • wordpress小说网站模板下载地址百度优化服务
  • 云南网页设计制作seo计费系统源码
  • 屏蔽ip网站吗行业外贸网站建设
  • 河北城乡建设学校网站常州网站建设公司平台
  • 合肥网站建设市场分析网站收录后怎么做排名
  • 湖南企业网站建设如何推广手机网站
  • 网站建设项目经历网站推广服务 商务服务
  • 加强网站的建设福州seo排名外包