Я часто использую SHA для этого аналогично примеру, который у вас есть. Он не гарантированно уникален, но обычно достаточно хорош для большинства целей:
require 'digest/sha1'
Digest::SHA1.hexdigest("#{user_id}-#{Time.now.to_i}-#{rand}")
рубиновый UUID gem является еще одним вариантом.
Но в вашем конкретном случае, поскольку вы используете redis, почему бы просто не использовать команду redis INCR ? Тогда вы можете гарантировать уникальность хотя бы в вашей базе данных. Например:
unique_key = $redis.incr('users:next')