08 2020 档案

摘要:HyperLogLog 应用场景 ​ 现开发维护一个大型的网站,需要统计每个网页每天的UV和PV数据,现在需要你来开发这个统计模块,你会如何实现? ​ 如果统计PV非常好办,给每个网页设置一个独立的Redis计数器,这个计数器的key加上当天的日期,这样请求一次,incrby一次,这样最终可以统计出 阅读全文
posted @ 2020-08-31 11:27 phper-liunian 阅读(209) 评论(0) 推荐(0) 编辑
摘要:位图(bitMap) 应用场景 在平时开发中, 可能有一些bool型数据需要存取,如用户一年的签到记录,签了是1, 没签是0, 要记录365天。如果使用普通的key/value, 每个用户要记录365个, 当用户上亿时候, 需要的存储空间是惊人的。 为了解决这个问题, Redis提供了位图数据结构, 阅读全文
posted @ 2020-08-31 09:57 phper-liunian 阅读(680) 评论(0) 推荐(0) 编辑
摘要:Redis 延时队列 Redis的消息队列不是专业的消息队列, 没有非常多的高级特性, 没有ack保证, 如果对消息的可靠性有极致的追求, 那么它就不适合使用。 异步消息队列 Redis的list(列表)数据结构常用来作为异步消息队列使用,使用rpush/lpush操作入队列, 使用lpop和rpo 阅读全文
posted @ 2020-08-31 09:55 phper-liunian 阅读(401) 评论(0) 推荐(0) 编辑
摘要:Redis分布式锁 分布式锁 分布式锁的本质是要是实现在Redis里面占一个坑,当别的进程要占用时,发现被占用,就只好放弃或者稍后再试。 Redis一般用setnx(set if not exists)指令,先来先占,用完在调用del指令释放掉。 但是有个问题,如果执行过程中出现异常,可能会导致de 阅读全文
posted @ 2020-08-31 09:54 phper-liunian 阅读(131) 评论(0) 推荐(0) 编辑
摘要:git代码回撤 git代码提交到暂存区,但是没有提交到远程仓库的回撤 git reset --soft HEAD^ HEAD^ 表示上一个版本,即上一次的commit,也可以写成HEAD1 如果进行两次的commit,想要都撤回,可以使用HEAD2 --soft 不删除工作空间的改动代码 ,撤销co 阅读全文
posted @ 2020-08-19 17:22 phper-liunian 阅读(381) 评论(0) 推荐(0) 编辑
摘要:跳跃表 跳跃表是一种有序数据结构,他通过每个节点维持多个指向其他节点的指针,从而达到快速访问的目的。 跳跃表平均支持O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性来批量处理节点。 Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素的数量比较多,或者有序集合中 阅读全文
posted @ 2020-08-19 16:03 phper-liunian 阅读(165) 评论(0) 推荐(0) 编辑
摘要:字典 字典,又称为符号表、关联数组或映射,是一种保存键值对的抽象数据结构。字典中每个键都是独一无二的,可以根据键查找与之关键的值,或根据键来更新值。 字典的实现 Redis的字典使用哈希表作为底层实现,一个哈希表里可以有多个哈希节点,每个哈希节点就保存了字典的一个键值对。 哈希表 哈希表有dict. 阅读全文
posted @ 2020-08-18 15:45 phper-liunian 阅读(157) 评论(0) 推荐(0) 编辑
摘要:Redis链表 # 在每个链表节点使用一个adlist.h/listNode结构表示: typeof struct listNode{ //前置节点 struct listNode *prev; //后置节点 struct listNode *next; //节点的值 void * value; } 阅读全文
posted @ 2020-08-18 11:03 phper-liunian 阅读(95) 评论(0) 推荐(0) 编辑
摘要:简单动态字符串(simple dynamic string)抽象模型, 简称SDS SDS在Redis的应用场景 1、用来保存数据的字符串值 2、被用做缓冲区,如AOF模块的AOF缓冲区,客户端输入的缓冲区 SDS的定义 // sds.h/sdshdr结构表示的SDS值: struct sdshdr 阅读全文
posted @ 2020-08-18 10:37 phper-liunian 阅读(93) 评论(0) 推荐(0) 编辑
摘要:Redis哨兵 Redis哨兵的作用 Redis哨兵就是Redis系统的运行状况。 1)监控主数据库和从数据库是否正常运行 2)主数据库出现故障时自动将从数据库转换为主数据库 哨兵是一个独立的进程,使用哨兵的典型架构 在一个一主多从的的Redis系统中,可以使用多个哨兵监控任务保证系统足够稳健。此时 阅读全文
posted @ 2020-08-17 14:10 phper-liunian 阅读(166) 评论(0) 推荐(0) 编辑
摘要:Redis复制(replication) 通过持久化功能,保证Redis即使在重启的情况下也不会损失(或少量损失)数据。但是由于数据存储在一台服务器上,如果这台服务器出现磁盘故障等问题,也会导致数据丢失。 为了避免单点故障,Redis提供了复制(replication)功能,可以实现当一台数据库中的 阅读全文
posted @ 2020-08-14 19:17 phper-liunian 阅读(125) 评论(0) 推荐(0) 编辑
摘要:AOF方式 当使用Redis存储非临时数据时,一般需要打开AOF持久化来降低进程中止导致的数据丢失。AOF可以将Redis执行的每一条命令追加到硬盘文件中,这一过程会降低Redis的性能,但是大部分情况下,这个影响是可以接受的,另外使用较快的硬盘可以AOF的性能。 开启AOF 默认情况下Redis是 阅读全文
posted @ 2020-08-14 16:36 phper-liunian 阅读(209) 评论(0) 推荐(0) 编辑
摘要:RDB方式 RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件是Redis会自动将内存的所有数据生成一份副本并存储在硬盘上,这个过程称为快照 Redis会在一下几种情况对数据进行快照: 1、根据配置规则进行数据快照 2、用户执行save或bgsave命令 3、执行flus 阅读全文
posted @ 2020-08-14 16:01 phper-liunian 阅读(232) 评论(0) 推荐(0) 编辑
摘要:发布/订阅模式 发布/订阅模式, 包含两种角色,分别是发布者和订阅者,订阅者可以订阅一个或多个频道(channel), 而发布者可以向指定频道发送消息,所有订阅次频道的订阅者都会收到消息 发布者发布消息的命令是publish,用法是 ** publish channel message**, pub 阅读全文
posted @ 2020-08-14 15:02 phper-liunian 阅读(102) 评论(0) 推荐(0) 编辑
摘要:任务队列 队列的优点 1、松耦合,只生产者和消费者无需知道彼此的细节, 按约定好任务描述格式 2、易扩展,消费者可以有多个,且可以分配在不同服务器,故可轻易降低单个服务器的负载 队列很容易想到Redis的列表类型,使用lpush和rpop或brpop命令实现队列的概念。brpop和rpop的唯一区别 阅读全文
posted @ 2020-08-14 14:48 phper-liunian 阅读(218) 评论(0) 推荐(0) 编辑
摘要:sort 排序命令, 通过alpha实现对字典顺序排序, desc 实现元素按从大到小的顺序排列 # 对集合排序 127.0.0.1:6379> sadd tag:ruby:post 2 6 12 26 (integer) 4 127.0.0.1:6379> sort tag:ruby:post 1 阅读全文
posted @ 2020-08-14 14:17 phper-liunian 阅读(137) 评论(0) 推荐(0) 编辑
摘要:expire命令 1、expire key seconds,其中seconds表示键过期的时间,单位是秒, 返回值1表示成功, 0表示设置失败或者键不存在 127.0.0.1:6379> set foo bar OK 127.0.0.1:6379> expire foo 20 ttl命令,一个键还有 阅读全文
posted @ 2020-08-14 14:03 phper-liunian 阅读(345) 评论(0) 推荐(0) 编辑
摘要:Redis事务 Redis的事务是一组命令的集合。事务同命令一样都是Redis的最小执行单元,一个事务中的命令,要么全部执行,要么都不执行。 Redis事务的原理 事务的原理是将一个事务的命令发送给Redis,然后在让Redis依次执行这些命令。 127.0.0.1:6379> multi OK 1 阅读全文
posted @ 2020-08-14 11:09 phper-liunian 阅读(116) 评论(0) 推荐(0) 编辑
摘要:有序集合 在集合类型的基础上,有序集合类型为集合中的每一元素都关联了一个分数。 有序集合和列表类型的相似点: 1、都是有序的, 2、两者都可以获取某一范围的元素 有序集合和列表类型的不同点: 1、列表类型是通过链表实现的,所以靠近两端的数据极快,当元素增多时,访问中间元素的数据会变慢,更加适合实现如 阅读全文
posted @ 2020-08-13 18:34 phper-liunian 阅读(193) 评论(0) 推荐(0) 编辑
摘要:集合类型 集合中每个元素都是不同的, 且是无须的, 一个集合类型(set)键可以存储最多2^32-1个字符串。 集合的常用操作是向集合添加或删除元素,判断某个元素是否存在。 由于集合类型在Redis内部是使用值为空的散列表(hash table)实现的,所以操作的时间复杂度都是O(1)。最方便的就是 阅读全文
posted @ 2020-08-13 17:01 phper-liunian 阅读(164) 评论(0) 推荐(0) 编辑
摘要:列表类型 列表类型可以存储一个有序的字符串列表, 列表的内部是使用的双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度是O(1), 但是链表通过索引访问元素比较慢。列表也可以作为队列使用,和散列表类型一样,一个列表类型的键可以最多容纳2^32-1个元素。 常用 阅读全文
posted @ 2020-08-13 16:14 phper-liunian 阅读(104) 评论(0) 推荐(0) 编辑
摘要:散列表类型 散列类型(hash)的键值是一种字典结构,存储了字段和字段值的映射,但是字段值只能是字符串,不支持其他类型数据, 即散列值不能嵌套其他的数据类型, 一个散列类型的键可以包含2^32-1个字段 散列类型适合存储对象, 使用对象类别和ID构成键名, 使用字段表示对象属性,字段值则表示属性值。 阅读全文
posted @ 2020-08-13 15:29 phper-liunian 阅读(131) 评论(0) 推荐(0) 编辑
摘要:字符串类型 字符串类型是Redis最基本的数据类型, 可以存储任何形式的字符串,包括二进制数据, JSON化的对象或是一张图片。一个字符串类型的键允许存储的数据最大容量是512MB。 常用命令 赋值 set key value 取值 get key 127.0.0.1:6379> set key h 阅读全文
posted @ 2020-08-13 14:15 phper-liunian 阅读(153) 评论(0) 推荐(0) 编辑
摘要:磁盘与目录的容量 df 列出文件系统的整体磁盘使用量 df [-ahikHTm] [目录或文件名] -a: 列出所有的文件系统,包括系统特有的/proc等文件 -h: 以较阅读的GBytes, MBytes, KBytes等格式列出 -i: 不靠磁盘容量,而已inode的数量显示 -k: 以KByt 阅读全文
posted @ 2020-08-11 10:46 phper-liunian 阅读(325) 评论(0) 推荐(0) 编辑
摘要:umask的定义 umask 是指使用者在创建文件或目录时的权限默认值 umask的查阅方式 vagrant@homestead:~umask0002vagrant@homestead:  umask -S u=rwx,g=rwx,o=rx umask的默认权限说明 默认情况下:, roo 阅读全文
posted @ 2020-08-10 18:36 phper-liunian 阅读(385) 评论(0) 推荐(0) 编辑
摘要:Django模型迁移 安装MySQL驱动, 命令如下 pip install PyMySQL 在mysite文件下的__init__.py文件 import pymysql pymysql.install_as_MySQLdb() 打开项目的文件的mysite/settings.py文件, 默认的数 阅读全文
posted @ 2020-08-07 10:21 phper-liunian 阅读(354) 评论(0) 推荐(0) 编辑
摘要:目录相关操作命令行 cd :变换目录 - [change directory]的缩写 . 代表当前目录 ..代表上一级目录 -代表前一个目录 ~代表"目前使用者身份"所在的文件夹 ~account代表account这个使用者的主文件夹(account是个帐号名称) pwd : 显示当前目录 -p代表 阅读全文
posted @ 2020-08-06 15:56 phper-liunian 阅读(137) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示