This is the same way I implemented Instabot[1] with. Instabot is an IRC/etc bot for teams, so I didn't want connections to irc to be reset every time we upgraded the server code.
I agree that this is the obvious way to do it. Each client has an id, it talks to the backend via a Redis queue and all the state is in the database, which the irc client never sees.
The irc client itself is written in Go, which means that we should really only ever need that one process for all the irc clients. If anyone wants more info I can write it up quickly.