Redis的基础应用

一、概念
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key – value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
– Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
– Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势
– 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
– 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
– 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
– 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

二、安装
http://www.runoob.com/redis/redis-install.html

三、五种数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

Strings
append – Append a value to a key
get – Get the value of a key
incr, incrBy – Increment the value of a key
set – Set the string value of a key
setRange – Overwrite part of a string at key starting at the specified offset
strLen – Get the length of the value stored in a key

Hashes
hDel – Delete one or more hash fields
hExists – Determine if a hash field exists
hGet – Get the value of a hash field
hGetAll – Get all the fields and values in a hash
hKeys – Get all the fields in a hash
hLen – Get the number of fields in a hash
hMGet – Get the values of all the given hash fields
hMSet – Set multiple hash fields to multiple values
hSet – Set the string value of a hash field
hVals – Get all the values in a hash
hScan – Scan a hash key for members
hStrLen – Get the string length of the value associated with field in the hash

Lists
lPop – Remove and get the first element in a list
lPush – Prepend one or multiple values to a list
lSet – Set the value of an element in a list by its index
rPop – Remove and get the last element in a list
rPush – Append one or multiple values to a list

Sets
sAdd – Add one or more members to a set
sCard, sSize – Get the number of members in a set
sPop – Remove and return one or more members of a set at random
sRandMember – Get one or multiple random members from a set
sScan – Scan a set for members

Sorted sets
zAdd – Add one or more members to a sorted set or update its score if it already exists
zCard, zSize – Get the number of members in a sorted set
zCount – Count the members in a sorted set with scores within the given values
zIncrBy – Increment the score of a member in a sorted set
zInter – Intersect multiple sorted sets and store the resulting sorted set in a new key
zRange – Return a range of members in a sorted set, by index
zRank, zRevRank – Determine the index of a member in a sorted set
zScore – Get the score associated with the given member in a sorted set

四、redis的PHP扩展
扩展 https://github.com/phpredis/phpredis

五、PHP操作redis

Select Code
1
2
3
4
5
<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
?>

PHP常用命令

Select Code
1
2
3
4
5
6
7
8
9
[root@localhost ~]# php --help
Usage: php [options] [-f] <file> [--] [args...]

-h               This help
-i               PHP information
-m               Show compiled in modules
-v               Version number

--ini            Show configuration file names

php -v 查看版本
php -h 帮助
php -i 等同于phpinfo()
php –ini 查看配置文件

php -m 查看安装好的模块

全新Linux安装后必备操作流程

1. 创建初始化快照;

2. 关闭防火墙;vim /etc/selinux/config 配置项为disabled;

3. 设置YUM源(可以一次性复制粘贴以下全部的命令,以CentOS6为例)
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum clean all
yum list
yum makecache
yum -y install gcc gcc++
mkdir /soft

4. 一键安装lnmp.org安装包,下载软件包存放至/soft统一管理

备注:
https://opsx.alibaba.com/mirror //阿里巴巴镜像站
http://man.linuxde.net/ //linux命令大全
https://github.com/webjust/linux //我的linux课件

简化版的CentOS7 安装:ifconfig

PHP面试题试试回答看

1. PHP是什么意思?
2. 什么是面向对象?主要特征是什么?
3. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?
4. 不使用COOKIE向客户端发送一个COOKIE
5. 简述COOKIE的设置及获取过程
6. HTTP状态中302,403,500,200,404,502代码含义
7. 请写出数据类型int char varchar datetime text的意思,比较char和varchar的区别
8. MyISAM和InnoDB的基本区别,索引结构如何实现?
9. isset()和empty()的区别?
10. include和require的区别?
11. PHP中单引号与双引号的区别。
12. 请说明PHP中传值与传引用的区别,分别用在什么时候?
13. IN, NOT IN, EXIST, NOT EXIST的作用和区别
14. 面向对象中接口和抽象类的区别与使用场景
15. echo(), print(), print_r()的区别
16. `mysql_fetch_row()`和`mysql_fetch_array()`之间有什么区别
17. 请描述两点以上XHTML和HTML之间的显著区别
18. HTTP协议中GET和POST的区别
19. 表单中GET和POST提交方法的区别
20. foo()与@foo()的区别
21. 线性表和顺序表的区别
22. 什么是数据库索引,主键索引、唯一索引的区别,索引的缺点是什么?
23. IE浏览器与非IE浏览器的划分,区别是什么?
24. 数据库中的事务是什么?
25. 解释:左连接、右连接、内连接、索引
26. 简述无限极分类的实现原理
27. 举例:能够使PHP和HTML分离的模板引擎
28. 举例:版本控制管理工具
29. 写出三种以上MySQL数据库存储引擎的名称
30. 什么是模板技术?
31. 实现中文字符串截取无乱码的方法
32. 用PHP写出显示客户端IP和服务器端IP的代码
33. 数据库索引有几类,分别是什么,什么时候该用索引
34. 写几个魔术方法并说明作用
35. `$_REQUEST`, `$_POST`, `$_GET`, `$_COOKIE`, `$_SESSION`, `$_FILE`的意思是什么?
36. 数组中下标最好是什么类型
37. ++i, i++哪个效率更高,为什么?
38. `magic_quotes_gpc()`, `magic_quotes_runtime()`的意思是什么?
39. 框架中什么是单入口,多入口,单一入口有什么缺点?
40. 你对Memcache的理解,优点有什么?
41. 对关系数据库而言,索引是相当重要的概念,请回答有关索引的几个问题?
– 索引的目标是什么?
– 索引对数据库系统的负面影响是什么?
– 为数据表建立索引的原则有哪些?
– 什么情况下不宜建立索引?
42. web应用中,数据库的读取频率远高于写入频率,如何优化MySQL而应对此种场景?
43. 如果是一个WEB频繁访问的查询,查询应该如何优化?
44. 数据库设计时,常遇到哪些性能瓶颈,常用解决方案。
45. 请详述在开发过程中用什么方法来加快页面的加载速度
46. 描述大流量高并发网站的解决方案
47. 对于大流量的网站您采用什么方法来解决访问量问题?
48. 如何设计或配置MySQL,才能达到高效的目的。
49. 设定网站的用户量在千万级,但是活跃的用户只有1%,如何通过优化数据库提高活跃用户的访问速度?
50. 什么是XSS攻击,如何防止?
51. SQL注入漏洞产生的原因,如何防止?
52. 如何防止SQL注入。
53. 用PHP写一个用户登录系统需要注意哪些?
54. 如何实现多个线程安全的写入一个文件数据
55. 什么是满二叉树,什么是完全二叉树?
56. 字符串数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数?
57. 描述GD库
58. 写出Zend框架的目录结构,简单说明目录的作用
59. 谈谈对MVC的理解
60. PHP如何抛出和接收错误?
61. PHP的网站主要攻击问题有哪些?
62. 几个重要的PHP.INI配置选项
63. 使用过哪些PHP框架?试试描述各自的优缺点?
64. 如何在页面之间传递变量数据?
65. 写出多个PHP数组函数,并说明作用
66. 你所知道的一些PHP技术、PHP论坛系统、PHP商城系统、开发框架等;
67. 你所知道的设计模式
68. 说说你对代码管理的看法,常使用什么版本控制器
69. 说说对于SVN的了解,简述其优缺点?
70. 如何找到PHP.INI配置文件
71. PHP加速模式/扩展?PHP调试模式/工具?
72. 你常用的mysql命令
73. 写出10个LINUX命令
74. 写出LINUX配置文件/服务的位置(5个)
75. 写出5个MYSQL的操作关键字
76. 列出5个PHP操作MYSQL的函数
77. 数据库的配置文件路径
78. 什么是时间戳,获取当前时间戳的函数
79. 给定一个网址URL,如何获取网页中的内容?
80. 简述如何获取当前执行脚本路径,包括其参数
81. 如何使用PHP环境变量,获取网页的地址,IP地址等
82. 求2个日期之间的天数
83. PHP中如何定义一个常量?如何定义值传递的变量?
84. PHP可以对string类型的10和数值11进行比较吗?
85. 什么情况下需要用endif来结束条件语句?
86. 优化MySQL数据库的方法?
87. 实现中文字符串截取无乱码的方法。
88. 分别指出php.ini中 `magic_quotes_gpc`, `magic_quotes_runtime`两项参数的作用.
89. 用面向对象来实现A对象继承B和C对象
90. 写出Smarty模板引擎中你最常用的关键词
91. 如何快速下载一个远程http服务器上的图片文件到本地?
92. 一个字节占多少bit ? 一个IPv4地址占几个字节? 一个IPv6地址呢?
93. MADSL宽带连接, 理想情况下, 最大下载速度是多少KB/s ?
94. 用PHP打印出前一天的时间,打印格式是2007年5月10日22:21:21
95. 抓取远程图片到本地,你会用什么函数?
96. 正在浏览当前页面用户的 IP 地址:127.0.0.1
97. 查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2
98. 在PHP中,heredoc是一种特殊的字符串,它的结束标志必须
99. 如何声明一个名为”myclass”的没有方法和属性的类?
– 如何实例化一个名为”myclass”的对象?
– 你如何访问和设置一个类的属性?
100. 指出一些在PHP输入一段HTML代码的办法。
101. 哪个函数可以打开一个文件,以对文件进行读和写操作?
102. 简述Linux下安装PHP的过程?
103. 简述Linux下安装Mysql的过程?
104. 简述Linux下安装apache的过程?
105. linux下建立压缩包,解压缩包的命令
106. 写出匹配URL的正则表达式
107. 请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确
108. 请写一个函数验证电子邮件的格式是否正确
109. 请写出一个正则表达式,用于匹配一个HTML文件中``标记中的图片地址
110. 写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉)
111. 在PHP中`error_reporting()`这个函数有什么作用?
112. Windows平台, Apache Http Server启动失败, 排错思路是什么?
113. php读取文件内容的几种方法和函数?
114. 以下程序,变量str什么值的情况下输出111? `if( ! $str ) { echo 111; }`
115. 请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。常见的排序算法: 冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔排序法、合并排序法。
116. 使用PHP描述快速排序算法,对象可以是一个数组?
117. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
118. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数
119. 请以空格作为间隔,拆分字符串’Apple Orange Banana Strawberry’,组成数组$fruit, 数组中所有元素都用小写字母,并按照字母先后次序排序
120. 对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则 表达式验证,对于不符合要求的$string返回出错信息
121. 请写一段程序,在服务器创建一个文件fruit.dat,将试题3中得到的数组写入到改文件中,然后写一段程序从文件中读取并还原数组@author zhuwenqiong
122. 单例模式,创建mysqli数据库链接的单例对象
123. js中网页前进和后退的代码
124. 简述如何得到当前执行脚本路径,包括所得到参数。
125. JS表单弹出对话框函数是?获得输入焦点函数是?
126. JS的转向函数是?怎么引入一个外部JS文件?
127. 用javascript取得一个input的值?取得一个input的属性?
128. 用Jquery取得一个input的值?取得一个input的属性?
129. 写一个简单的jquery显示隐藏代码?
130. 假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。
131. 请您写一段ajax提交的js代码,或者写出ajax提交的过程逻辑。
132. SQL: 增加一个字段性别sex,写出修改语句; 查询出年龄介于20岁到30岁之间的用户
133. 写一个函数,算出两个文件的相对路径
134. 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
135. Linux的目录进行遍历,编写shell脚本
136. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名。例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
137. 有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?
138. 请写一个函数,实现以下功能:字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。
139. 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)
140. 使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来(PDO实现)
141. 写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)

《财富自由之路》笔记

## 1.你知道自己未来的样子吗?

如果你笃信自己的未来是那样一条曲线,那么在成本线被突破之前那段长长的时间里,你能赚到的钱实际上全部是“小钱”,小到“不值得节省”的地步,就算要省,也省不出多少。

## 2.你知道那条曲线究竟是什么吗?
只要是能积累的东西,大都会产生复利效应。在智力上、知识上、经验上,复利效应对每个人来说都是存在的。仔细观察一下每个人的成长过程就能明白,从出生开始,所有人都不断习得各种技能,不断积累,只不过很多人在20岁以后就停止学习,所以没有机会在自己的未来体会到复利效益。早晚有一天终生成长者会跨过那个拐点(也就是里程碑),然后扬长而去,这就是复利效益的威力。

## 3.究竟什么是财富自由?
所谓“个人财富自由”,是指某个人再也不用为了满足生活必需而出售自己的时间了。
财富自由根本不是终点站,那只是一座里程碑,在那之后还有很长的路要走。

## 4.起步时最重要的是什么?
快速入门不仅绝对有可能,而且绝对必要。
在学习任何一个学科的知识时,都有一个很重要的概念:最少必要知识。当需要获得某项技能的时候,一定要想办法在最短的时间里弄清楚都有哪些最少必要知识,然后迅速掌握它们。如果掌握了这些知识,你就已经入门了,接下来只剩所谓“执行”,一个字——用。

学习能力也好,执行力也罢,核心只有一个:在刚开始的时候,平静地接受自己的笨拙。接受自己的笨拙,理解自己的笨拙,放慢速度尝试,观察哪里可以改进,反复练习,观察哪里可以进一步改进,进一步反复练习….这是学习一切技能的必需过程,关键在于:

  • 尽快开始这个过程
  • 尽快度过这个过程

## 5.你认真考虑过自己的商业模式吗?
所谓个人商业模式,就是一个人出售自己时间的方式。
仔细看看个人的商业模式的基本分类:

  • 第一种:一份时间只出售一次(零工或者上班)
  • 第二种:同一份时间出售很多次(作者)
  • 第三种:购买他人的时间再卖出去(创业和投资)

笼统的看,对个体而言,所谓进步,就是逐步学会并使用各种个人商业模式,然后想办法优化属于自己的商业模式。

## 6.如何优化第一种个人商业模式?

《从点子到产品》 学习笔记与读后感

读后感

读罢本书,如果作为一个不是产品经理岗位的人员,也可以了解一个产品从构思到最终上线,到上线后的反馈,都是一个异常繁琐的过程,是有一定的生命周期的。生命周期这个词用的甚好,意味着从一个点子到最终诞生称为一个产品,中间的过程实际上是有很多的挫折,就如同人的成长过程一样,总会越到各式各样的困难(需要抉择、需要解决的需求)。本书着重强调的是产品经理工作当中的思维方式,方法论,工作的流程,包含自我的成长,驱动力等,并非是一般的有关于产品经理工具之类的书籍,直接教你怎么制作原型,哪几种收集数据的方式,注意一些沟通技巧等,实际上每个产品所面临的问题和环境都不一样,那么我们其实需要的远远不是一个工具,更多的是面临工作环境需要时候的,分析,寻找问题,解决问题的思维方式,提升工作的处理、解决问题的能力。这一点上,本书会给对从事产品经理岗位的人直接的帮助。感兴趣的朋友也可以关注作者在知乎的相关作品(https://www.zhihu.com/pub/book/119553546)。

除了对于了解产品经理做什么有所帮助之外,作者本身对于互联网产品的看法和观点,也是值得相关领域的从业者去思考的。从产品角度作者都深度参与过像锤子手机、嘟嘟美甲O2O(现已倒闭),点我达外卖配送的产品。作者把工作期间一些典型的问题作为案例,表述的浅显易懂,还是值得学习的,换做我是一个开发工程师,也能够理解当一个需求,从产品经理手中经过的时候,实际上经历了多少流程,最终再落实到具体的研发过程中。

总之,好的产品经理会给一个产品和团队注入诸如灵魂之类的事情,反之,可能让开发、市场“白忙活”一场,变向的打击人员的士气,恶性循环,内部人员之间彼此不信任,矛盾丛丛,工作更是无从良性开展合作,也就离死不远了。

本书主要观点如下

## 第一部分 产品价值和用户痛点
### 点子与方案
– 点子落地之前,务必先“纸上谈兵”一回
– 说服身边最理性的人和最吹毛求疵的人认可你的想法
– 证明你们的团队可靠,跟证明方案本身的可靠同样重要

### 找到产品核心价值
– 解决不了问题的产品,只能靠补贴和红包留住用户。一旦遇到更大的红包,用户说走就走
– 问题解决得够彻底,下次用户会主动来找你

### MVP与痛点
– 大部分在等待功能完善、交互完美、界面出色才能一炮而红的产品,往往都没有等到那一天
– 产品初期做设计要多做减法
– 初期把整体流程跑通时不用特别在意是不是用“互联网方式”

## 第二部分 需求分析和功能设计
### 深挖需求
– 区分用户表达的究竟是诉求,还是具体的方案
– 不断假想自己是用户,以及真正到用户场景下体验都是发掘需求本质的好方法

### 用户研究
– 做可量化的研究,要警惕数据陷阱
– 做可定性的研究,要发掘背后的原委
– 最好的用研,就是自己成为客户

### 用户体验
– 任何你觉得可能会“不太舒服”的地方,在市场上很可能会让成千上万的用户“很不舒服”
– 任何你觉得已经够完善的方案,仍然会有优化的空间

## 第三部分 产品管理
### 文档管理
– 了解技术是为了更好地设计功能和协作,并不是帮技术的同事完成工作
– 不管文档是什么形式、篇幅如何,能让开发人员们看得懂的就是好文档
– 文档的完整性、逻辑性比文档的可读性』美观程度都重要

### 需求管理
– 每个需求为什么在目前的位置和状态,产品经理应当了如指掌
– 需求的各种变化、调整和意外,应该同步到整个团队中
– 工具:如四象限法则。

### 工作流中的管理
– 好的产品经理不仅要自己有执行力,还应推动团队提升执行力
– 要始终避免浪费生命在无意义的劳动上
– 出现了任何问题,避免以后再犯跟解决当下的问题同样重要

## 第四部分 技巧和方法
### 处理问题
– 不仅能解决问题,还要对未解决的问题也心里有数
– 对团队来说,最有价值的产品经理应该能像打地鼠一样去清除问题

### 沟通
– 会沟通不等同于能讨人喜欢或者伶牙俐齿,沟通需要后天的“修行”
– 最高阶的沟通是要让别人促进自己的工作

### 成长
– 有一个导师的指导,比看书和资料有帮助很多
– 少读快餐式的文章
– 要学会把自己的知识点和资料结构化整理
– 要把自己也当成产品去迭代升级

### 兴趣和热情
– 工作中的受挫和茫然,通常都是新的成长的开始
– 跟优秀的人共事,也是吸收正能量的方法