using System.IdentityModel.Tokens.Jwt;
using StackExchange.Redis;
public static void Main()
var token = "eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3MzQ5NjMzODk2NzUwODU4MjQiLCJ0b2tlbnR5cGUiOiIzIiwiaGFzaGtleSI6IjgiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3ByaW1hcnlzaWQiOiI4IiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9wcmltYXJ5Z3JvdXBzaWQiOiItMSIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWVpZGVudGlmaWVyIjoiYWNjZXB0YW5jZSIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWUiOiJhY2NlcHRhbmNlIiwiaXNhZG1pbiI6IlRydWUiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2dyb3Vwc2lkIjoiMSIsImV4cCI6MTU5NTM4NTcyN30.vZ79ggOC2GyB3jHk-qI0ei9yxcfwOf9xI1xNovNRDnU";
var hashKey = GetJWTClaim(token, "hashkey");
Console.WriteLine(HashSlot(hashKey));
private static string GetJWTClaim(string token, string claim)
var claims = new JwtSecurityToken(token).Claims;
return claims.First(item => item.Type == claim).Value;
private static int HashSlot(string hashKey)
var assembly = Assembly.Load("StackExchange.Redis");
var type = assembly.GetType("StackExchange.Redis.ServerSelectionStrategy");
var method = type.GetMethod("GetClusterSlot", BindingFlags.Static | BindingFlags.NonPublic);
return (int)method.Invoke(null, new Object[]{(RedisKey)hashKey});