DESTOON7.0 session_memcahe中的一处Bug

利用session_set_save_handler可以注册我们自己的Session处理逻辑,其调用的顺序,正常如下:

open –> read –> register_shutdown_function –> write –> close

但在利用Memcache时,在read 中调用get,如果不存在就会返回false,导致write 的不调用:
function read($sid) {
// 返回key对应的存储元素的字符串值或者在失败或key未找到的时候返回FALSE。
return $this->obj->get($sid);
}

正确的处理方式应该是:
function read($sid) {
return strval($this->obj->get($sid));
}

见read 函数的说明:
链接:http://php.net/manual/zh/function.session-set-save-handler.php

read(string $sessionId)
如果会话中有数据,read 回调函数必须返回将会话数据编码(序列化)后的字符串。 如果会话中没有数据,read 回调函数返回空字符串。

深入研究memcache

特性和限制
1、Memcached 单进程最大使用内存为2G,要使用更多内存,可以分多个端口,开启多个Memcached进程
2、最大30天的数据过期时间,设置为永久的也会在这个时间过期, 常量REALTIME_MAXDELTA 60*60*24*30控制
3、最大键长为250字节,大于该长度无法存储,常量KEY_MAX_LENGTH 250控制
4、单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576进行控制,它是默认的slab大小
5、最大同时连接数是200,通过 conn_init()中的freetotal进行控制,
6、最大软连接数是1024,通过settings.maxconns=1024 进行控制
7、跟空间占用相关的参数:settings.factor=1.25, settings.chunk_size=48, 影响slab的数据占用和步进方式 继续阅读“深入研究memcache”

多行文本溢出显示省略号(…) text-overflow: ellipsis

text-overflow 属性规定当文本溢出包含元素时发生的事情。

默认值:  clip
继承性:  no
版本:  CSS3
JavaScript 语法:  object .style.textOverflow="ellipsis"
语法: text-overflow: clip|ellipsis| string ;

然而,text-overflow:ellipsis; 不可独立使用,必须结合overflow:hidden;  white-space:nowrap;才生效。但是而white-space:nowrap; 是指不换行,就是说只能一行显示。如果我们想要实现多行的情况下,在最后一行的最后用“…”来表示,则可以: 继续阅读“多行文本溢出显示省略号(…) text-overflow: ellipsis”

JavaScript 常用功能总结

目录:
众所周知,JavaScript是动态的面向对象的编程语言,能够实现以下效果:
1. 丰富Web 网页功能
2. 丰富Web界面
3. 实现本地或远程存储。
4. 实现分布式网络应用的前端组件,并在后台进行数据存储管理。
5. 使用JavaScript可以实现完整的分布式Web 应用。

JavaScript 中的数据类型
JavaScript 提供三种元数据类型,string,number,和Boolean,可使用typeof(v) 测试变量V 的类型,typeof(v)===”number”
提供五种基本的引用类型:Object, Array, Function, Date 及RegExp。数组,函数,日期和正则表达式是特殊类型,但是严格来讲,日期和正则表达式是元数据类型,可封装在其他对象中。
JS 中变量类型,数组元素类型,函数参数以及返回值的类型不需要声明类型,类型之间的转换是自动执行的。 继续阅读“JavaScript 常用功能总结”

移动端样式小技巧

本文只针对两大手机阵营 Android和IOS 中的魅蓝metal 和 iPhone6进行样式对比。

一、line-height
line-height经常用于文字居中,当然也有小伙伴会用上下padding去写.but!不管你用padding还是line-height,不同手机显示效果还是…不一样。
一般会这样写:

.demo{
height:16px;
line-height:14px;
font-size:9px;
border:1px solid #ff6815;
}

嗯,在我们的chrome由于字体小于9px已经看不出边框和字之间的间隙了,再来看看Android和IOS的
魅蓝文字已经飞起~, ios正常显示
如果把line-height加1px,iPhone文字就会下移,由于我们app的ios用户居多,并且android机型太多,不同机型也会显示不同,所以只能退而求其次了。
line-height的兼容问题不太好解决,容器高度越小,显示效果的差距越明显。稍微大一点的高度,最好把line-height设置为高度+1px,两个平台显示都还不错。 继续阅读“移动端样式小技巧”

Nginx配置文件详细说明

在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络.

#运行用户
user www-data;
#启动进程,通常设置成和cpu的数量相等
worker_processes  1;

#全局错误日志及PID文件
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

#工作模式及连接数上限
events {
use   epoll;             #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections  1024;#单个后台worker process进程的最大并发链接数
# multi_accept on;
}

继续阅读“Nginx配置文件详细说明”

Redis容量及使用规划

在使用Redis过程中,我们发现了不少Redis不同于Memcached,也不同于MySQL的特征。
(本文主要讨论Redis未启用VM支持情况)

1. Schema
MySQL: 需事先设计
Memcached: 无需设计
Redis: 小型系统可以不用,但是如果要合理的规划及使用Redis,需要事先进行类似如下一些规划

数据项: value保存的内容是什么,如用户资料
Redis数据类型: 如String, List
数据大小: 如100字节
记录数: 如100万条(决定是否需要拆分)
⋯⋯
上面的规划就是一种schema,为什么Redis在大型项目需要事先设计schema?因为Redis服务器有容量限制,数据容量不能超出物理内存大小,同时考虑到业务数据的可扩充性,记录数会持续增多、单条记录的内容也都会增长,因此需要提前规划好容量,数据架构师就是通过schema来判断当前业务的Redis是否需要“分库分表”以满足可扩展需求。 继续阅读“Redis容量及使用规划”

Redis和Memcache的区别分析  

1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3. Redis支持数据的备份,即master-slave模式的数据备份。
4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存

来看下Redis作者对比redis和memcache 继续阅读“Redis和Memcache的区别分析  ”