Looks like you're creating a local object on the stack, that will be destroyed at the end of the function, and then trying to make a unique pointer to it. But you know that the destructor on the local object will be called at the end of the function, so unless the constructor function being called by std::make_unique<RedisSyncClient>(io_service); does make a complete copy of the local object, it's going to be a unique pointer to something that is going to be destroyed at the end of the function.
Try deleting line 9 and changing line 10 to something like this:
std::unique_ptr<RedisSyncClient> client (new boost::asio::io_service);