|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|