Redis缓存存储问题的解决
- 1.队列存储问题的解决
$groupMessage = "{$groupId}_groupMessage";
foreach($data as $item){
$item_json=json_encode($item);
$redis->lPush($groupMessage,$item_json);
}
对于把从数据库中获取的数据存储存储到redis队列时,在刚开始处理的时候,直接把$data整体存储为json格式进行存储,无法用lrange()取得数据。使用循环每一条数据进行json格式的转换,就可以使用lrange.
- 从redis取出的数据转换为数组格式
$pageOne=json_decode($item,true);
必须添加true,否则取出的数据是对象,而非数组。
PHP取数组数据的问题
- 1.php 利用array_slice函数获取随机数组或前几条数据
学习参考:http://www.jb51.net/article/72975.htm
$resultMessage=array_slice($result,0,$number);
利用Redis“分页展示”数据的思路
- 1.设置4个参数 $groupId,$page,$number,$lastTime
* @param $groupId '进入圈子id'
* @param $page '偏移量即第几页'
* @param $number '每页请求数据'
* @param $lastTime '最后的时间' 此用户发布信息的时间
- 2.防止数据的重复问题的解决
问题:取出第一页数据,之后,又有很多人发布信息存入redis后,会对取数据会重复。
解决方法:只能更新此用户发布信息时间前的$number条数据可以把从redis中取出的数据,转换为数组格式,并进行遍历,比较时间,取的此时间后的$number条数据。 - 3.数据更新的问题的理解
每次进入圈子,无论是圈子的任何人进入,都会进行刷新数据,redis缓存都会重新处理,所以只要在第一页就会进行缓存,剩下的几页不再重新进行缓存,只从redis中取数据遍历比较时间。
接口问题的新的学习点
对现在项目中存储groupId来讲,看线框图中直接传递groupId就好,但是接口问题是要考虑所有可能遇到的问题,如果某个圈子是被禁止展示,或者圈子是不存在,但在post所有数据时,没有判断groupID是否存在,就会出现问题,总而言之,接口不仅要根据前端的设计返回需要数据,而且还要考虑所有传递的参数,接收的参数合理性的判断与检查。
接口,考虑安全,稳定,全面。
总结
2017年7月29日 好好学习,天天向上,今天也是。