First, let's talk to the sentinels.
Sentinel manages fault tolerance; it does not configure Redis for HA. This is an important distinction. Secondly, the diagram you posted is actually a bad setup — you don't want to run Sentinel on the same node as the Redis nodes it manages. When you lose this host, you lose both.
Regarding "Is it a waste of resources?" it depends on your use case. In this setup, you do not need three Redis nodes, you are only two. Three increase your redundancy, but are not required. If you need additional redundancy, then this is not a waste of resources. If you don’t need redundancy, you just start one instance of Redis and call it good - since starting up will be more “wasteful”.
Another reason to run two slaves is to break the readings. Again, if you need it, it will not be a waste.
As for “Is there a better way to take full advantage of the resources available?” we cannot answer this because it is too dependent on your specific script and code. However, if the amount of data to store is "small" and the command speed is not extremely high, remember that you do not need to allocate a host for Redis.
Now for "Is Redis clustering an alternative to Redis sentinel?". It really depends entirely on your use case. Redis Cluster is not a HA solution - it is a multi-user solution / larger than-ram. If your goal is just HA, then it most likely does not suit you. Redis Cluster comes with restrictions, especially for multi-key operations, so this is not necessarily a simple “just use a cluster” operation.
If you think that the three nodes running Redis (and the three sentinels running) are wasteful, you will most likely be a cluster so that it is even larger, since it requires more resources.
The questions you asked are probably too broad and based on opinions to survive as written. If you have a specific case / problem that you are developing, please clarify this so that we can provide specific assistance and information.
Specific Update:
For proper fault tolerance management in your scenario, I would go with three sentries, one on your JBoss server. If you have 3 JBoss nodes, go one for each. I would have a Redis pod (master + slave) on separate nodes and let the parties control the rollback.
From there, we are talking about connecting JBoss / Jedis to using Sentinel to manage information and connections. Since I don't use those, a quick search reveals that Jedis has support, you just need to configure it correctly. Some examples I found are on Looking for a Jedi example with Sentinel and https://github.com/xetorthio/jedis/issues/725 which talk about JedisSentinelPool , which is the route for using the pool.
When Sentinel moves to another resource, clients will be disconnected, and Jedis will (should?) Handle the reconnection, specifying the Countries to which the current master belongs.