# Redis State Cache Plan ## New Redis Keys - `ride:{id}:state` (Hash) → status, driver_id, passenger_id, carType, updated_at - `ride:{id}:driver` (Hash) → driver_name, car_model, car_plate, rating, phone (cached) ## Changes Per File ### acceptRide.php After MySQL lock succeeds: ```php $redis->hmset("ride:$rideId:state", [ 'status' => $status, 'driver_id' => $driverId, 'passenger_id'=> $passengerIdValue, 'carType' => $carType, 'updated_at' => time() ]); $redis->expire("ride:$rideId:state", 86400); $redis->hmset("ride:$rideId:driver", $driverInfo); $redis->expire("ride:$rideId:driver", 86400); $redis->publish("ride:state_changes", json_encode([ 'ride_id' => $rideId, 'status' => 'accepted', 'driver_id' => $driverId, 'passenger_id' => $passengerIdValue ])); ``` ### start_ride.php ```php $redis->hmset("ride:$rideId:state", ['status' => 'Begin', 'updated_at' => time()]); $con_ride->prepare("UPDATE ride SET status = ?, rideTimeStart = NOW() WHERE id = ?")->execute([$status, $ride_id]); $redis->publish("ride:state_changes", [...]); ``` ### arrive_ride.php, cancel_ride_*.php Same pattern: Redis update first (or after), then MySQL, then Pub/Sub. ### finish_ride_updates.php No change to Redis state (keep MySQL transaction as-is). ## Socket Server Changes (loction_server/driver_socket.php) - Subscribe to Redis `ride:state_changes` channel - On message: update in-memory state, emit to passenger room - Read from `ride:{id}:state` hash instead of MySQL queries