缓存数据库的介绍请百度 学习资料
本文主要使用Redis制作简单的用户账户和排行榜
先看一个图
这里是Redis不同数据类型 应用的不同场景,再根据我们的要求,我们选择了
账户使用 Hash 来进行存储,排行榜使用 Sorted Set 进行存储
账户存储
class UserDB
{
private static RedisClient m_Redis;
private static string DB_NAME = "usertable";
public static RedisClient Redis
{
set
{
m_Redis = value;
}
}
/// <summary>
/// 存储新玩家
/// </summary>
/// <param name="user"></param>
public static void Save(User user)
{
string data = JsonConvert.SerializeObject(user);
m_Redis.SetEntryInHash(DB_NAME, user.m_UserId.ToString(), data);
}
/// <summary>
/// 判断是否是新玩家
/// </summary>
/// <param name="userId">玩家id</param>
/// <returns></returns>
public static bool IsNewUser(long userId)
{
return !m_Redis.HashContainsEntry(DB_NAME, userId.ToString());
}
}
排行榜存储
public class RankDB
{
private static RedisClient m_Redis;
private static string DB_NAME = "ranktable";
public static RedisClient Redis
{
set
{
m_Redis = value;
}
}
/// <summary>
/// 获取某个玩家的排名
/// </summary>
/// <param name="userId">玩家id</param>
/// <returns></returns>
public static double GetRank(string userId)
{
return m_Redis.GetItemIndexInSortedSet(DB_NAME, userId);
}
/// <summary>
/// 获取某个玩家的分数
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public static double GetScore(string userId)
{
return m_Redis.GetItemScoreInSortedSet(DB_NAME, userId);
}
/// <summary>
/// 获取排行榜
/// </summary>
/// <param name="count">排行榜人数</param>
/// <returns></returns>
public static List<string> GetRankList(int count)
{
return m_Redis.GetRangeFromSortedSet(DB_NAME, 0, count);
}
/// <summary>
/// 获取全服排名
/// </summary>
/// <returns></returns>
public static List<string> GetGlobalRankList()
{
return m_Redis.GetAllItemsFromSortedSet(DB_NAME);
}
/// <summary>
/// 添加玩家
/// </summary>
/// <param name="key"></param>
/// <param name="score"></param>
public static void Add(string key, double score) {
m_Redis.AddItemToSortedSet(DB_NAME, key, score);
}
}
测试
class Program
{
static string ranktable = "ranktable";
static ServiceStack.Redis.RedisClient redis;
static void Main(string[] args)
{
redis = new ServiceStack.Redis.RedisClient("localhost", 6379, "", 0);
UserDB.Redis = redis;
RankDB.Redis = redis;
if (UserDB.IsNewUser(10000001))
{
User user = new User();
user.m_UserId = 10000001;
user.m_UserName = "pengdongwei";
UserDB.Save(user);
Console.WriteLine("新用户注册");
}
else
{
Console.WriteLine("老用户注册");
}
Console.Read(); Console.Read();
RankDB.Add("10000001", 10);
Console.WriteLine("存分");
Console.Read(); Console.Read();
RankDB.Add("10000001", 99);
Console.WriteLine("修改分");
Console.Read(); Console.Read();
}
}
由于这里太简单所以就直接上代码了,需要学习的东西最好还是认真看下上面贴的学习链接,然后你会感叹Redis的小巧而又强大的功能
Redis起码学习目标:
表格:每种数据类型的CRUD操作,
数据库:备份,恢复,切换,
安全 : 设置密码,验证登录