/// <summary>
		/// Gets or create a user session if one doesn't exist.
		/// </summary>
		/// <param name="userId">The user global id.</param>
		/// <param name="userName">Title of the user.</param>
		/// <param name="shardId"></param>
		/// <returns></returns>
		public UserSession GetOrCreateSession(Guid userId, string userName, string shardId)
		{
			var userSession = this.GetUserSession(userId);
			if (userSession == null)
			{
				userSession = new UserSession(userId, userName, shardId);

				this.cacheClient.Add(userSession.ToCacheKey(), userSession,
					userSession.ExpiryDate.GetValueOrDefault(DateTime.UtcNow) + TimeSpan.FromHours(1));
			}
			return userSession;
		}
		/// <summary>
		/// Updates the UserSession in the cache, or removes expired ones.
		/// </summary>
		/// <param name="userSession">The user session.</param>
		public void UpdateUserSession(UserSession userSession)
		{
			var hasSessionExpired = userSession.HasExpired();
			if (hasSessionExpired)
			{
				LogIfDebug("Session has expired, removing: " + userSession.ToCacheKey());
				this.cacheClient.Remove(userSession.ToCacheKey());
			}
			else
			{
				LogIfDebug("Updating session: " + userSession.ToCacheKey());
				this.cacheClient.Replace(userSession.ToCacheKey(), userSession, userSession.ExpiryDate.Value);
			}
		}