-
user.php?客戶端 <?php //連接本地的?Redis?服務(wù) $redis?=?new?Redis(); $redis->connect('127.0.0.1',?6379); if?($redis)?{ ????echo?"success"; } $redis_name='miaosha'; for?($i=0;?$i<100;?$i++)?{ ????$uid?=?rand(100000,?9999999); //接受用戶id ???//?$uid?=?$_GET['uid']; //獲取一下redis里面已有的數(shù)量 ????$num?=?10; //如果當(dāng)前人數(shù)少于時(shí)候的時(shí)候,則加入這個(gè)隊(duì)列 ????if?($redis->lLen($redis_name)?<?10)?{ ????????$redis->rPush($redis_name,$uid.'%'.microtime()); ????????echo?$uid?.?'秒殺成功!'.'<br>'; ????}?else?{ ????????//如果當(dāng)天人數(shù)已經(jīng)達(dá)到了十個(gè)人,則返回秒殺已完成 ????????echo?"秒殺已結(jié)束"; ????} } $redis->close(); ?>
查看全部 -
服務(wù)端 <?php include?'./db.php'; //連接本地的?Redis?服務(wù) $redis?=?new?Redis(); $redis->connect('127.0.0.1',?6379); $redis_name="miaosha"; $db=DB::getIntance(); //死循環(huán), while?(1){ //第一步 //從隊(duì)列最左側(cè)取出一個(gè)值來, $user?=?$redis->lPop($redis_name); //然后判斷這個(gè)值是否存在, if(!$user||$user=='nil'){ ????sleep(2); ????continue; } //如果存在切割出時(shí)間,uid ????$user_arr?=?explode('%',?$user); ????$insert_data?=?array( ????????'uid'?=>?$user_arr[0], ????????'time_stamp'?=>?$user_arr[1]); ????$res?=?$db->insert('redis_queue',$insert_data); //保存數(shù)據(jù)庫(kù)中, ??if(!$res){ ??????$redis->rPush($redis_name,$user); ??} ??sleep(2); //第二部 //redis如果把值取出來這個(gè)值就不在隊(duì)列里了 //如果出現(xiàn)問題了我的業(yè)務(wù)沒有完成失敗的情況下,我們需要有一個(gè)備份機(jī)制把值重新插回隊(duì)列里 //數(shù)據(jù)庫(kù)插入失敗時(shí)候的回滾機(jī)制 //釋放一下redis } $redis->close(); ?>
查看全部 -
22222查看全部
-
棒? ?繼續(xù)加油
查看全部 -
LTRIM:保留置頂區(qū)間內(nèi)的元素
LLEN:獲取列表長(zhǎng)度
LSET:通過索引設(shè)置列表元素值
LINDEX:通過索引獲取列表中的元素
LRANGE:獲取列表置頂范圍內(nèi)的元素
查看全部 -
LPUSH/LPUSHX:將值插入到(/存在的)列表頭部->帶X為存在的
RPUSH/RPUSHX:將值插入到(/存在的)列表尾部->帶X為存在的
LPOP:移出并獲取列表的第一個(gè)元素
RPOP:移出并獲取列表的最后一個(gè)元素
查看全部 -
查看文件安裝路徑方法:
1、dpkg -L softwarename;?
2、sudo apt-get install apt-file,
然后使用命令:apt-file list softwarename,?
查看全部 -
Redis List類型
查看全部 -
消息隊(duì)列的應(yīng)用場(chǎng)景
冗余:記錄訂單處理程序??
解耦:分離兩套系統(tǒng),入隊(duì)出隊(duì)系統(tǒng)各不影響
流量削峰:搶購(gòu)秒殺
異步通信:入隊(duì)
擴(kuò)展性:訂單隊(duì)列可擴(kuò)展,新接口處理。
排序保證:順序排位
隊(duì)列介質(zhì):Mysql,Redis(單個(gè)包太大,效率低),消息系統(tǒng)
查看全部 -
<?php
// 數(shù)據(jù)庫(kù)連接類
class DB{
? //私有的屬性
? private static $dbcon=false;
? private $host;
? private $port;
? private $user;
? private $pass;
? private $db;
? private $charset;
? private $link;
? //私有的構(gòu)造方法
? private function __construct(){
? ? $this->host =? 'localhost';
? ? $this->port =? '3306';
? ? $this->user =? 'root';
? ? $this->pass =? 'root';
? ? $this->db =? 'imooc';
? ? $this->charset= 'utf8';
? ? //連接數(shù)據(jù)庫(kù)
? ? $this->db_connect();
? ? //選擇數(shù)據(jù)庫(kù)
? ? $this->db_usedb();
? ? //設(shè)置字符集
? ? $this->db_charset();
? ?}
? ?//連接數(shù)據(jù)庫(kù)
? ?private function db_connect(){
? ? $this->link=mysqli_connect($this->host.':'.$this->port,$this->user,$this->pass);
? ? if(!$this->link){
? ? ? echo "數(shù)據(jù)庫(kù)連接失敗<br>";
? ? ? echo "錯(cuò)誤編碼".mysqli_errno($this->link)."<br>";
? ? ? echo "錯(cuò)誤信息".mysqli_error($this->link)."<br>";
? ? ? exit;
? ? }
? ?}
? ?//設(shè)置字符集
? ? private function db_charset(){
? ? ?mysqli_query($this->link,"set names {$this->charset}");
? ? }
? ? //選擇數(shù)據(jù)庫(kù)
? ?private function db_usedb(){
? ? ?mysqli_query($this->link,"use {$this->db}");
? ?}
? ?//私有的克隆
? ?private function __clone(){
? ? ?die('clone is not allowed');
? ?}
? ?//公用的靜態(tài)方法
? ?public static function getIntance(){
? ? ?if(self::$dbcon==false){
? ? ? self::$dbcon=new self;
? ? ?}
? ? ?return self::$dbcon;
? ?}
? ?//執(zhí)行sql語(yǔ)句的方法
? ? public function query($sql){
? ? ?$res=mysqli_query($this->link,$sql);
? ? ?if(!$res){
? ? ? echo "sql語(yǔ)句執(zhí)行失敗<br>";
? ? ? echo "錯(cuò)誤編碼是".mysqli_errno($this->link)."<br>";
? ? ? echo "錯(cuò)誤信息是".mysqli_error($this->link)."<br>";
? ? ?}
? ? ?return $res;
? ?}
? ? //獲得最后一條記錄id
? ? public function getInsertid(){
? ? ?return mysqli_insert_id($this->link);
? ? }
? ?/**
? ? * 查詢某個(gè)字段
? ? * @param
? ? * @return string or int
? ? */
? ? public function getOne($sql){
? ? ?$query=$this->query($sql);
? ? ? return mysqli_free_result($query);
? ? }
? ? //獲取一行記錄,return array 一維數(shù)組
? ? public function getRow($sql,$type="assoc"){
? ? ?$query=$this->query($sql);
? ? ?if(!in_array($type,array("assoc",'array',"row"))){
? ? ? ?die("mysqli_query error");
? ? ?}
? ? ?$funcname="mysqli_fetch_".$type;
? ? ?return $funcname($query);
? ? }
? ? //獲取一條記錄,前置條件通過資源獲取一條記錄
? ? public function getFormSource($query,$type="assoc"){
? ? if(!in_array($type,array("assoc","array","row")))
? ? {
? ? ? die("mysqli_query error");
? ? }
? ? $funcname="mysqli_fetch_".$type;
? ? return $funcname($query);
? ? }
? ? //獲取多條數(shù)據(jù),二維數(shù)組
? ? public function getAll($sql){
? ? ?$query=$this->query($sql);
? ? ?$list=array();
? ? ?while ($r=$this->getFormSource($query)) {
? ? ? $list[]=$r;
? ? ?}
? ? ?return $list;
? ? }
? ? public function selectAll($table,$where,$fields='*',$order='',$skip=0,$limit=1000)
? ? {
? ? ? ? ? ? ? if(is_array($where)){
? ? ? ? ? ? ? ? ? ? foreach ($where as $key => $val) {
? ? ? ? ? ? ? ? ? ? ? ? if (is_numeric($val)) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? $condition = $key.'='.$val;
? ? ? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? ? $condition = $key.'=\"'.$val.'\"';
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? $condition = $where;
? ? ? ? ? ? ? }
? ? ? ? ? ? ? if (!empty($order)) {
? ? ? ? ? ? ? ? ? $order = " order by ".$order;
? ? ? ? ? ? ? }
? ? ? ? ? ? ? $sql = "select $fields from $table where $condition $order limit $skip,$limit";
? ? ? ? ? ? ? $query = $this->query($sql);
? ? ? ? ? ? ? $list = array();
? ? ? ? ? ? ? while ($r= $this->getFormSource($query)) {
? ? ? ? ? ? ? ? ? $list[] = $r;
? ? ? ? ? ? ? }
? ? ? ? ? ? ? return $list;
? ? }
? ? ?/**
? ? ?* 定義添加數(shù)據(jù)的方法
? ? ?* @param string $table 表名
? ? ?* @param string orarray $data [數(shù)據(jù)]
? ? ?* @return int 最新添加的id
? ? ?*/
? ? ?public function insert($table,$data){
? ? ?//遍歷數(shù)組,得到每一個(gè)字段和字段的值
? ? ?$key_str='';
? ? ?$v_str='';
? ? ?foreach($data as $key=>$v){
? ? ?//? if(empty($v)){
? ? ?//? ?die("error");
? ? ?// }
? ? ? ? //$key的值是每一個(gè)字段s一個(gè)字段所對(duì)應(yīng)的值
? ? ? ? $key_str.=$key.',';
? ? ? ? $v_str.="'$v',";
? ? ?}
? ? ?$key_str=trim($key_str,',');
? ? ?$v_str=trim($v_str,',');
? ? ?//判斷數(shù)據(jù)是否為空
? ? ?$sql="insert into $table ($key_str) values ($v_str)";
? ? ?$this->query($sql);
? ? //返回上一次增加操做產(chǎn)生ID值
? ? ?return $this->getInsertid();
? ?}
? ?/*
? ? * 刪除一條數(shù)據(jù)方法
? ? * @param1 $table, $where=array('id'=>'1') 表名 條件
? ? * @return 受影響的行數(shù)
? ? */
? ? public function deleteOne($table, $where){
? ? ? if(is_array($where)){
? ? ? ? foreach ($where as $key => $val) {
? ? ? ? ? $condition = $key.'='.$val;
? ? ? ? }
? ? ? } else {
? ? ? ? $condition = $where;
? ? ? }
? ? ? $sql = "delete from $table where $condition";
? ? ? $this->query($sql);
? ? ? //返回受影響的行數(shù)
? ? ? return mysqli_affected_rows($this->link);
? ? }
? ? /*
? ? * 刪除多條數(shù)據(jù)方法
? ? * @param1 $table, $where 表名 條件
? ? * @return 受影響的行數(shù)
? ? */
? ? public function deleteAll($table, $where){
? ? ? if(is_array($where)){
? ? ? ? foreach ($where as $key => $val) {
? ? ? ? ? if(is_array($val)){
? ? ? ? ? ? $condition = $key.' in ('.implode(',', $val) .')';
? ? ? ? ? } else {
? ? ? ? ? ? $condition = $key. '=' .$val;
? ? ? ? ? }
? ? ? ? }
? ? ? } else {
? ? ? ? $condition = $where;
? ? ? }
? ? ? $sql = "delete from $table where $condition";
? ? ? $this->query($sql);
? ? ? //返回受影響的行數(shù)
? ? ? return mysqli_affected_rows($this->link);
? ? }
? ?/**
? ? * [修改操作description]
? ? * @param [type] $table [表名]
? ? * @param [type] $data [數(shù)據(jù)]
? ? * @param [type] $where [條件]
? ? * @return [type]
? ? */
? ?public function update($table,$data,$where,$limit=0){
? ? ?//遍歷數(shù)組,得到每一個(gè)字段和字段的值
? ? ?$str='';
? ? foreach($data as $key=>$v){
? ? ?$str.="$key='$v',";
? ? }
? ? $str=rtrim($str,',');
? ? ? if(is_array($where)){
? ? ? ? foreach ($where as $key => $val) {
? ? ? ? ? if(is_array($val)){
? ? ? ? ? ? $condition = $key.' in ('.implode(',', $val) .')';
? ? ? ? ? } else {
? ? ? ? ? ? $condition = $key. '=' .$val;
? ? ? ? ? }
? ? ? ? }
? ? ? } else {
? ? ? ? $condition = $where;
? ? ? }
? ? ? ? if (!empty($limit)) {
? ? ? ? ? ? $limit = " limit ".$limit;
? ? ? ? }else{
? ? ? ? ? ? $limit='';
? ? ? ? }
? ? //修改SQL語(yǔ)句
? ? $sql="update $table set $str where $condition $limit";
? ? $this->query($sql);
? ? //返回受影響的行數(shù)
? ? return mysqli_affected_rows($this->link);
? ?}
}
?>
使用方法
對(duì)DB類中__construct()中的配置信息,進(jìn)行符合自己數(shù)據(jù)庫(kù)的修改
include 引入DB類
使用DB類中的方法需要先進(jìn)行實(shí)例化,以插入數(shù)據(jù)為例:
$db = DB::getIntance();
$insert_data = ['order_id'=>'10010','order_amount' = '200.00','status'=> 1];
$res = $db->insert('order_info',$insert_data);
查看全部 -
左側(cè)插入 lpush
查看全部 -
redis新手學(xué)習(xí):949359454,不懂的可以在群里提問哦
查看全部 -
redis新手學(xué)習(xí)交流群:949359454,不懂的可以在群里提問哦
查看全部 -
redis新手學(xué)習(xí)交流群:949359454,不懂的可以在群里提問哦
查看全部 -
redis消息隊(duì)列的應(yīng)用場(chǎng)景
查看全部 -
PHP插件
查看全部
舉報(bào)