add redis sentinel support and custom shard key generate function