一、rediscover
Redis是一个基于内存的高性能键值对存储数据库,支持多种数据结构,例如字符串、哈希、列表、集合、有序集合等。它是一个开源的NoSQL数据库系统,由Salvatore Sanfilippo开发并维护,使用ANSI C编写,因此被称为Redis。
在.NET中,可以使用StackExchange.Redis包来操作Redis数据库,该包支持异步和同步方法,提供了一个简单的API,使开发人员能够轻松地与Redis交互。
二、redis持久化
Redis支持两种持久化方式——RDB和AOF。
RDB是一种快照方式,它将数据库的当前状态写入磁盘。这种方法通常用于定期备份数据库。可以通过修改Redis配置文件,设置RDB的保存和加载规则,以及备份策略和文件名等。
AOF是将所有执行的写操作记录到一个文件中,这个文件可以用来重建数据库。Redis提供了三种AOF日志记录模式,包括always、everysec和no,你可以选择合适的模式根据你的需要。
三、redis常用命令
using StackExchange.Redis; //连接redis ConnectionMultiplexer conn = ConnectionMultiplexer.Connect("localhost"); //获取redis数据库 IDatabase db = conn.GetDatabase(); //string类型 db.StringSet("key","value"); string result = db.StringGet("key"); //hash类型 db.HashSet("hashkey","field","value"); string value = db.HashGet("hashkey","field"); //list类型 db.ListRightPush("listkey","value"); string listValue = db.ListRightPop("listkey"); //set类型 db.SetAdd("setkey","value"); bool isMember = db.SetContains("setkey","value"); //zset类型 db.SortedSetAdd("zsetkey","value",score); double score = db.SortedSetScore("zsetkey","value");
四、redis重启
在Windows下,可以使用以下命令重启Redis服务:
redis-cli.exe shutdown redis-server.exe redis.windows.conf
五、redis菜鸟教程
如果你对Redis不太熟悉,可以参考Redis官方提供的菜鸟教程,这是一个非常好的入门教程,包括Redis基础知识、Redis数据类型、Redis持久化、Redis事务等内容。
链接:https://www.runoob.com/redis/redis-tutorial.html
六、redis持久化方式有哪些
Redis提供两种持久化方式,即RDB和AOF。
RDB是Redis默认的持久化方式,它是在一段时间(例如30分钟)内,多个写操作累积到一定数目(例如10000个)时,Redis才会自动执行一次快照备份,保存数据库当前的数据状态到磁盘上。
AOF是将Redis服务器执行过的所有写操作缓存起来,以文本方式保存成日志文件,这样当Redis服务器重启时只需要将这个AOF文件重新执行一遍即可还原整个数据库。AOF持久化方式可以更加精确地保证数据的一致性和安全性。
七、redis查询key命令
Redis提供了keys、exists、type等命令,可以用来查询Redis数据库中的键值信息。
using StackExchange.Redis; //连接redis ConnectionMultiplexer conn = ConnectionMultiplexer.Connect("localhost"); //获取redis数据库 IDatabase db = conn.GetDatabase(); //查询所有key var keys = conn.GetServer("localhost").Keys(); //判断key是否存在 bool isExists = db.KeyExists("key"); //获取key的类型 RedisType type = db.KeyType("key");
八、redis存放库存
Redis可以作为一个非常优秀的库存系统,利用Redis的事务机制和原子操作可以实现高并发、高效、高可用的库存管理系统。
using StackExchange.Redis; //连接redis ConnectionMultiplexer conn = ConnectionMultiplexer.Connect("localhost"); //获取redis数据库 IDatabase db = conn.GetDatabase(); //库存数量 int stock = 100; //商品编号 string productNumber = "product123"; //客户编号 string customerid = "customer123"; //生成订单号 string orderId = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(10000,99999); //开始一个事务 var tran = db.CreateTransaction(); //获取库存数量 RedisValue val = tran.StringGetAsync(productNumber).Result; int stockcnt = (int)val; //如果库存足够,则减去库存数量,并且设置订单 if (stockcnt >= 1) { tran.StringDecrementAsync(productNumber, 1); tran.StringSetAsync(orderId, customerid); } //执行事务 bool success = tran.Execute();
九、redis常用方法
除了上述常用命令外,Redis还提供了很多方便、实用的方法,例如Lock、Publish、Subscribe、Scan等。
using StackExchange.Redis; //连接redis ConnectionMultiplexer conn = ConnectionMultiplexer.Connect("localhost"); //获取redis数据库 IDatabase db = conn.GetDatabase(); //Lock锁定 bool islock = db.LockTake("key","value",TimeSpan.FromSeconds(10)); if(islock) { //执行锁定的业务代码 //... //释放Lock db.LockRelease("key","value"); } //Publish发布消息 db.Multiplexer.GetSubscriber().Publish("channel","message"); //Subscribe订阅消息 db.Multiplexer.GetSubscriber().Subscribe("channel",(channel,msg) => { Console.WriteLine("channel:" + channel + ";message:" + msg); }); //Scan遍历数据库 var keys = db.Execute("SCAN",0,"MATCH","key*","COUNT",100); foreach(RedisValue key in keys) { Console.WriteLine(key); }