[[controlling-user-cache]]
=== Controlling the User Cache

User credentials are cached in memory on each node to avoid connecting to a
remote authentication service or hitting the disk for every incoming request.
You can configure characteristics of the user cache with the `cache.ttl`,
`cache.max_users`, and `cache.hash_algo` realm settings.

NOTE: PKI realms do not use the user cache.

The cached user credentials are hashed in memory. By default, {security} uses a
salted `sha-256` hash algorithm. You can use a different hashing algorithm by
setting the `cache_hash_algo` setting to any of the following:

[[cache-hash-algo]]
.Cache hash algorithms
|=======================
| Algorithm           | | | Description
| `ssha256`           | | | Uses a salted `sha-256` algorithm (default).
| `md5`               | | | Uses `MD5` algorithm.
| `sha1`              | | | Uses `SHA1` algorithm.
| `bcrypt`            | | | Uses `bcrypt` algorithm with salt generated in 10 rounds.
| `bcrypt4`           | | | Uses `bcrypt` algorithm with salt generated in 4 rounds.
| `bcrypt5`           | | | Uses `bcrypt` algorithm with salt generated in 5 rounds.
| `bcrypt6`           | | | Uses `bcrypt` algorithm with salt generated in 6 rounds.
| `bcrypt7`           | | | Uses `bcrypt` algorithm with salt generated in 7 rounds.
| `bcrypt8`           | | | Uses `bcrypt` algorithm with salt generated in 8 rounds.
| `bcrypt9`           | | | Uses `bcrypt` algorithm with salt generated in 9 rounds.
| `noop`,`clear_text` | | | Doesn't hash the credentials and keeps it in clear text in
                            memory. CAUTION: keeping clear text is considered insecure
                            and can be compromised at the OS level (for example through
                            memory dumps and using `ptrace`).
|=======================

[[cache-eviction-api]]
==== Evicting Users from the Cache

{security} exposes a
{ref}/security-api-clear-cache.html[Clear Cache API] you can use
to force the eviction of cached users. For example, the following request evicts
all users from the `ad1` realm:

[source, js]
------------------------------------------------------------
$ curl -XPOST 'http://localhost:9200/_xpack/security/realm/ad1/_clear_cache'
------------------------------------------------------------

To clear the cache for multiple realms, specify the realms as a comma-separated
list:

[source, js]
------------------------------------------------------------
$ curl -XPOST 'http://localhost:9200/_xpack/security/realm/ad1,ad2/_clear_cache'
------------------------------------------------------------

You can also evict specific users:

[source, java]
------------------------------------------------------------
$ curl -XPOST 'http://localhost:9200/_xpack/security/realm/ad1/_clear_cache?usernames=rdeniro,alpacino'
------------------------------------------------------------
