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)