Best practice caching a variable between page loads In Drupal 7...

In the case of a value that is only set through a module's settings page, and then remains unchanged until an administrator changes it (or the module is updated).

The value is checked each page load to perform a specific action. I'd prefer to prevent a DB read on each page load, for obvious reasons.

I can, of course, use variable_set and cache_get, but I was wondering...

A) Performance and behaviour wise, what is the actual difference between the two (both need database tables as far as I can see)?

B) Is there an equivalent to SESSION variable that this would be better in?

C) Would this be better off in a singleton class / global static value instead?
A) I highly recommend to measure your assumptions. Database might not be as bad as you think. The answer also depends on whether you ask for a sites that you control or whether you are writing a public module that has to play well with the whole ecosystem.

The main difference between variable_set and cache_set is how important the value is. Cache is intended for things that can be generated. Another difference is how modules interact with in. There are alternative cache backends, which won't write the value to the default database but typically some type of key-value store.

B) The $_SESSION variable from PHP can certainly be used by a Drupal 7 module. By default, PHP saves the session as a file in the local file system. 

You can also use key-value stores such as Redis or APCu.

C) A class sounds much better from the perspective of testability via PHPUnit, but singletons don't play well with testing either.