UserRedisService.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Fanwe 方维直播系统
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2011 http://www.fanwe.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: 云淡风轻(1956838968@qq.com)
  8. // +----------------------------------------------------------------------
  9. class UserRedisService extends BaseRedisService
  10. {
  11. //var $user_db; //:user_id hash数据
  12. //var $user_hash_db; //所有会员数据 user_id hash数据 存储在线数据
  13. //var $user_robot_db; //user_id set数据 ,机器人的集合
  14. /**
  15. +----------------------------------------------------------
  16. * 架构函数
  17. +----------------------------------------------------------
  18. * @access public
  19. +----------------------------------------------------------
  20. */
  21. public function __construct()
  22. {
  23. parent::__construct();
  24. }
  25. public function test_add_redis($user_list){
  26. set_time_limit(0);
  27. $user_id = 0;
  28. $pipe = $this->redis->multi();
  29. foreach($user_list as $k=>$v){
  30. $user_id = $v['id'];
  31. $hash_db = $this->get_user_hash($v);
  32. if($user_id){
  33. $data = $v;
  34. // $data = $this->reg_data($data);
  35. $data['focus_count'] = 0;
  36. $data['fans_count'] = 0;
  37. $data['video_count'] = 0;
  38. $data['use_diamonds'] = 0;
  39. $data['diamonds'] = 0;
  40. $data['ticket'] = 0;
  41. $data['user_level'] = 1;
  42. $data['v_type'] = 0;
  43. $data['v_explain'] = '';
  44. $data['v_icon'] = '';
  45. $data['is_remind'] = 0;
  46. $data['score'] = 0;
  47. $data['refund_ticket'] = 0;
  48. $pipe->hMSet($this->user_db.$user_id,$data);
  49. $pipe->hMSet($this->user_hash_db,array($user_id=>json_encode($hash_db)));
  50. if($data['is_robot']==1){
  51. $pipe->sAdd($this->user_robot_db, $user_id);
  52. }
  53. }
  54. }
  55. $replies = $pipe->exec();
  56. $this->set_user_id($user_id);
  57. return $replies;
  58. }
  59. /*
  60. * 只更新用户的钻石,货币
  61. */
  62. public function test_update_redis($user_list){
  63. set_time_limit(0);
  64. $user_id = 0;
  65. $pipe = $this->redis->multi();
  66. foreach($user_list as $k=>$v){
  67. $user_id = $v['id'];
  68. $hash_db = $this->get_user_hash($v);
  69. if($user_id){
  70. $data = $v;
  71. // $data = $this->reg_data($data);
  72. $data['use_diamonds'] = 0;
  73. $data['diamonds'] = 0;
  74. $data['ticket'] = 0;
  75. $data['refund_ticket'] = 0;
  76. $pipe->hMSet($this->user_db.$user_id,$data);
  77. $pipe->hMSet($this->user_hash_db,array($user_id=>json_encode($hash_db)));
  78. if($data['is_robot']==1){
  79. $pipe->sAdd($this->user_robot_db, $user_id);
  80. }
  81. }
  82. }
  83. $replies = $pipe->exec();
  84. $this->set_user_id($user_id);
  85. return $replies;
  86. }
  87. /*
  88. * 添加视频
  89. * hash数据存储
  90. *
  91. */
  92. public function insert_db($user_id,$data){
  93. $pipe = $this->redis->multi();
  94. if(!$user_id){
  95. $user_id = $this->get_user_id();
  96. }else{
  97. $pipe->hSet($this->auto_id_db,'user_id',$user_id);
  98. }
  99. $data['id'] = $user_id;
  100. filter_null($data);
  101. $hash_db = $this->get_user_hash($data);
  102. $this->redis->hMSet($this->user_db.$user_id,$data);
  103. $this->redis->hMSet($this->user_hash_db,array($user_id=>json_encode($hash_db))) ;
  104. if($data['is_robot']==1){
  105. $pipe->sAdd($this->user_robot_db, $user_id);
  106. }
  107. $replies = $pipe->exec();
  108. if($replies[0]){
  109. return $user_id;
  110. }else{
  111. return 0;
  112. }
  113. }
  114. /*
  115. * 构建 user_hash_db 的数据
  116. * is_authentication,nick_name,signature,sex,province,city,head_image
  117. * v_type,v_explain,v_icon,emotional_state,job,birthday
  118. */
  119. public function get_user_hash($data){
  120. return array(
  121. 'is_authentication'=>$data['is_authentication'],
  122. 'nick_name'=>$data['nick_name'],
  123. 'signature'=>$data['signature'],
  124. 'sex'=>$data['sex'],
  125. 'user_level'=>$data['user_level'],
  126. 'province'=>$data['province'],
  127. 'city'=>$data['city'],
  128. 'head_image'=>$data['head_image'],
  129. 'thumb_head_image'=>$data['thumb_head_image'],
  130. 'v_type'=>$data['v_type'],
  131. 'v_explain'=>$data['v_explain'],
  132. 'v_icon'=>$data['v_icon'],
  133. 'emotional_state'=>$data['emotional_state'],
  134. 'job'=>$data['job'],
  135. 'birthday'=>$data['birthday'],
  136. 'apns_code'=>$data['apns_code'],
  137. 'family_id'=>$data['family_id'],
  138. 'is_robot'=>intval($data['is_robot']),
  139. 'family_chieftain'=>$data['family_chieftain'],
  140. 'room_title'=>$data['room_title'],
  141. 'fans_count'=>intval($data['fans_count']),
  142. 'focus_count'=>intval($data['focus_count'])
  143. );
  144. }
  145. /*
  146. * 初始化数据
  147. */
  148. public function reg_data($data){
  149. $data['is_agree'] = 0;
  150. $data['is_authentication'] = 0;
  151. $data['signature'] = '';
  152. if(!isset( $data['sex'])){
  153. $data['sex'] = 0;
  154. }
  155. if(!isset( $data['province'])) {
  156. $data['province'] = '';
  157. }
  158. if(!isset( $data['city'])) {
  159. $data['city'] = '';
  160. }
  161. if(!isset( $data['head_image'])){
  162. $data['head_image'] = '';
  163. }
  164. if(!isset( $data['thumb_head_image'])){
  165. $data['thumb_head_image'] = '';
  166. }
  167. $data['focus_count'] = 0;
  168. $data['fans_count'] = 0;
  169. $data['video_count'] = 0;
  170. $data['use_diamonds'] = 0;
  171. $data['diamonds'] = 0;
  172. $data['ticket'] = 0;
  173. $data['user_level'] = 1;
  174. $data['v_type'] = 0;
  175. $data['v_explain'] = '';
  176. $data['v_icon'] = '';
  177. $data['is_remind'] = 1;
  178. $data['score'] = 0;
  179. $data['family_id']='';
  180. $data['family_chieftain']='';
  181. $data['room_title']='';
  182. return $data;
  183. }
  184. /*
  185. * 更新视频信息
  186. * $user_id
  187. * $data 要更新的数组array('nick_name'=>$name)
  188. */
  189. public function update_db($user_id,$data){
  190. $user_info = $this->redis->hGetAll($this->user_db.$user_id);
  191. $user_info = array_merge($user_info,$data);
  192. $hash_db = $this->get_user_hash($user_info);
  193. filter_null($data);
  194. $pipe = $this->redis->multi();
  195. $pipe->hMSet($this->user_db.$user_id,$data);
  196. $pipe->hMSet($this->user_hash_db,array($user_id=>json_encode($hash_db))) ;
  197. $replies = $pipe->exec();
  198. return $replies;
  199. }
  200. /*
  201. * 会员相关字段自增 或者 自减
  202. */
  203. public function inc_field($user_id,$field,$val){
  204. return $this->redis->hIncrBy($this->user_db.$user_id,$field,$val);
  205. }
  206. /**
  207. * 添加积分
  208. * @param unknown_type $user_id
  209. * @param unknown_type $val
  210. */
  211. public function inc_score($user_id,$val){
  212. $this->inc_field($user_id,'score',$val);
  213. //更新等级
  214. $user_data = $this->getRow_db($user_id,array('id','score','online_time','user_level'));
  215. user_leverl_syn($user_data);
  216. }
  217. /*
  218. * 获取单个字段
  219. */
  220. public function getOne_db($user_id,$field){
  221. return $this->redis->hGet($this->user_db.$user_id,$field);
  222. }
  223. /*
  224. * 获取多个字段
  225. * $fields 为空的话,则是获取所有
  226. */
  227. public function getRow_db($user_id,$fields=''){
  228. if(!$fields){
  229. return $this->redis->hGetAll($this->user_db.$user_id);
  230. }else{
  231. return $this->redis->hMGet($this->user_db.$user_id,$fields);
  232. }
  233. }
  234. /*
  235. * 同一时间内 ,同一用户 钻石数 只允许操作一次,并发时候 会延时10ms
  236. * @return 若减少的钻石数,少于当前钻石数,则返回false;否则返回改变后的数量
  237. */
  238. public function lock_diamonds($user_id,$diamonds_change){
  239. $num = $this->inc_field($user_id,'diamonds',$diamonds_change);
  240. if($num<0){
  241. $this->inc_field($user_id,'diamonds',$diamonds_change*-1);
  242. return false;
  243. }
  244. return $num;
  245. }
  246. /*
  247. * 根据user_id 批量获取用户信息 $user_list = array(11,12,13);
  248. */
  249. public function get_m_user($user_list){
  250. $user_list2 = array();
  251. $user_list_array = $this->redis->hMGet($this->user_hash_db,$user_list);
  252. if(is_array($user_list_array)){
  253. foreach($user_list_array as $k=>$v){
  254. if($v){
  255. $user = json_decode($v,true);
  256. $user_con = array();
  257. $user_con['user_id'] = $k;
  258. $user_con['is_robot'] = intval($user['is_robot']);
  259. $user_con['nick_name'] = $user['nick_name']?$user['nick_name']:'';
  260. $user_con['sex'] = $user['sex']?$user['sex']:'0';
  261. $user_con['v_icon'] = $user['v_icon']?$user['v_icon']:'';
  262. $user_con['v_type'] = $user['v_type']?$user['v_type']:'';
  263. $user_con['user_level'] = $user['user_level']?$user['user_level']:'1';
  264. $user_con['head_image'] = get_spec_image($user['head_image']);
  265. $user_list2[] = $user_con;
  266. }
  267. }
  268. }
  269. return $user_list2;
  270. }
  271. }//类定义结束
  272. ?>