Caching for every user
In general, yes, you can do this. There is no limitation on the number of cache entries that can be stored. However, if using the default database cache backend, it can fill up your database and when additionally using the default cache bin, it can slow down other cache lookups. So, I would recommend:


Use a custom cache bin instead of the generic cache table. Especially important if you don't follow the second point. Because the cache bin 'cache' usually holds information that is requested on almost every request.
Use a different cache backend, e.g. Memcache. That avoids that your database gets big due to these cache entries and makes cache lookups faster. See https://drupal.stackexchange.com/questions/12307/where-is-the-best-place-for-cache-bins-drupal-7


Two additional tipps:


Monitor the number reads/writes of that cache to see if the cache actually helps. If, say, 50% of the cache entries are only written and never read, you might want to consider to avoid caching this information.
Especially when using a cache backend like Memcache (which has a smaller overhead for cache calls), it might be helpful to split the data up into several separate cache entries. There a number of benefits for this:


You can cache certain information longer than others (maybe there only is a new announcement every few days but multiple new comments/whatever per hour
Some of the data might not even be user specific but only specific for the roles a user has or even global. So for example, all anouncements could be read from a single cache entry.
You can use cache_clear_all() to clear specific caches on defined events. For example, clear all news caches if a new news is published. By doing this, all users will be able to see the news immediatly. If this is working well, you can increase the cache expiration time.