using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using StackExchange; using StackExchange.Redis; namespace RedisStuy { /// <summary> /// Redis Database 操作 /// https://stackexchange.github.io/StackExchange.Redis/ /// </summary> public class RedisDatabaseStudy : IDisposable { private IDatabase redisDatabase; public RedisDatabaseStudy() { redisDatabase = RedisHelper.GetRedisDatabase(); } public void Dispose() { } #region key 操作 /// <summary> /// 删除指定的key, 不存在则忽略 /// </summary> public bool KeyDelete(RedisKey key) { return redisDatabase.KeyDelete(key); } /// <summary> /// 删除指定的key, 不存在则忽略 /// </summary> public async Task<bool> KeyDeleteAsync(RedisKey key) { return await redisDatabase.KeyDeleteAsync(key); } /// <summary> /// 序列化指定的key,并返回被序列化的值。 /// </summary> public byte[] KeyDump(RedisKey key) { return redisDatabase.KeyDump(key); } /// <summary> /// 指定的key,是否存在 /// </summary> public bool KeyExists(RedisKey key) { return redisDatabase.KeyExists(key); } /// <summary> /// 为给定 key 设置生存时间 /// </summary> public bool KeyExpire(RedisKey key, TimeSpan? expire) { return redisDatabase.KeyExpire(key, expire); } /// <summary> /// 重命名key /// </summary> public bool KeyRename(RedisKey sourceKey, RedisKey newKey) { return redisDatabase.KeyRename(key: sourceKey, newKey: newKey); } /// <summary> /// 迁移key到另外数据库 /// </summary> /// <param name="key">key</param> /// <param name="toServer">目标服务器</param> /// <param name="toDatabase">目标数据库</param> /// <param name="timeoutMilliseconds">操作超时豪秒数</param> /// <param name="migrateOptions">迁移选项</param> /// <param name="flags">命令标记</param> public void KeyMigrate(RedisKey key, System.Net.EndPoint toServer, int toDatabase = 0, int timeoutMilliseconds = 0, MigrateOptions migrateOptions = MigrateOptions.None, CommandFlags flags = CommandFlags.None) { redisDatabase.KeyMigrate(key, toServer, toDatabase, timeoutMilliseconds, migrateOptions, flags); } /// <summary> /// 移动key到同服务器的另一个数据库 /// </summary> public bool KeyMove(RedisKey key, int databaseIndex) { return redisDatabase.KeyMove(key, databaseIndex); } /// <summary> /// 删除键所指定的过期时间 /// </summary> public bool KeyPersist(RedisKey key) { return redisDatabase.KeyPersist(key); } /// <summary> /// 从当前数据库中随机返回一个key /// </summary> public RedisKey KeyRandom() { return redisDatabase.KeyRandom(); } /// <summary> /// 反序列化给定的序列化值,并将它和给定的 key 关联 /// </summary> /// <param name="expiry">以毫秒为单位为 key 设置生存时间;为null,不设置生存时间</param> /// <returns> /// 是否执行成功 /// </returns> public bool KeyRestore(RedisKey key, byte[] value,TimeSpan? expiry,CommandFlags flags) { bool isSucess = false; try { redisDatabase.KeyRestore(key, value, expiry, flags); isSucess = true; } catch { isSucess = false; } return isSucess; } /// <summary> /// 获取具有超时的键的剩余生存时间 /// </summary> public TimeSpan? KeyTimeToLive(RedisKey key) { return redisDatabase.KeyTimeToLive(key); } /// <summary> /// 获取指定key的数据类型 /// </summary> public RedisType KeyType(RedisKey key) { var redisType = redisDatabase.KeyType(key); return redisType; } #endregion } }