redis五种数据类型的应用场景_C# Redis五种数据类型的操作简易易懂

   前段时间学习了Redis,一直在忙着工作和一些其他的事情,这两天有空了,就把这学习到的技术分享出来给大家,谢谢

  • Redis是什么?

  • Redis的特点

  • Redis使用场景

  • Redis数据类型

  一、.Redis是什么?

Redis是一个完全免费开源的,基于内存的高性能的key-value存储系统,可以用作数据库、缓存和消息中间件。支持多种类型的数据结构.

Redis内置数据持久化、LRU驱动事件、事物、主从复制、哨兵机制、集群、自动分区、lua脚本提供高可用性..

Redis全称为:Remote     Dictionary    Server (远程数据服务)

Redis是一种非关系型数据库

  二、Redis的特点

Redis以内存作为数据存储介质,读写数据的效率极高。速度快:使用标准c语言编写,所有数据在内存存储,读速度:110000次/s 写速度:81000次/s

Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启,数据也不会丢失。

Redis的存储分为内存存储、磁盘存储和log文件。

Redis可以从磁盘重新将数据加载到内存中,也可以通过配置文件对其进行配置,因此,redis才能实现持久化。

Redis支持主从模式,可以配置集群,更利于支撑大型的项目。

Redis是单线程:一次只能执行一条命令,拒绝长命令(因为Redis基于内存,不牵扯磁盘IO操作限制)

  三、Redis应用场景

  缓存: 配合关系型数据库做高速缓存(string),会话缓存(最常用) 

       消息队列

        活动排行榜,计数器: 用户点赞,评论数,投票,网站访问量,点击率等(zset)

        发布,订阅消息(消息通知)

       商品列表,评论列表

分布式锁: 分布式环境下,访问共享资源(string)

分布式session: 分布式环境下,需要session共享(string)

用户信息,发布文章信息等(hash)

朋友圈,微博时间线,自动补全联系人(list)

抽奖系统,给用户添加标签,给标签添加用户、共同关注

GEO(计算两地距离,外卖小哥距你还有多少米)

四、Redis数据类型(这里的案例都是用C#控制台程序做的,不是特别全面)

Redis有五种数据类型(String,Hash,Set,ZSet,List )

首先搭建一个控制台应用程序,添加应用(Nuget里面去找)如图:

3b37dc526c99ea2bd726d3d4f8eea498.png    f6d3b710e3eb0c6bd502eb229b9b7f8e.png

  就会得到相应的引用

  1.String

a655ff2721b26b80ec64b4098f90d8e5.png

/// /// string/// public static void TestString()
{using (RedisClient client = new RedisClient("127.0.0.1", 6379))
{//清空Redis里面的所有缓存 client.FlushAll();//存储
client.Set<string>("name", "admin");
client.Set("password", "123456");//读取string name = client.Get<string>("name");string pwd = client.Get<string>("password");Console.WriteLine(name);Console.WriteLine(pwd);
}
}
//结果如图
 

a655ff2721b26b80ec64b4098f90d8e5.png

2.Hash

a655ff2721b26b80ec64b4098f90d8e5.png

/// /// Hash/// public static void TestHash()
{using (RedisClient client = new RedisClient("127.0.0.1", 6379))
{//清空Redis里面的所有缓存 client.FlushAll();//配置数据
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("a", "1");
dictionary.Add("b", "2");
dictionary.Add("c", "3");
dictionary.Add("d", "4");
dictionary.Add("e", "5");//缓存
client.SetRangeInHash("dictionary", dictionary);//追加
client.SetEntryInHash("dictionary", "666", "fgh");//获取存入的数据
Dictionary<string, string> hashData = client.GetAllEntriesFromHash("dictionary");foreach (var item in hashData)
{
Console.WriteLine($"Key是:{item.Key}------Vaule值是:{item.Value}");
}
}
}//结果如图

a655ff2721b26b80ec64b4098f90d8e5.png

3.Set

a655ff2721b26b80ec64b4098f90d8e5.png

/// /// Set/// public static void TestSet()
{using (RedisClient client = new RedisClient("127.0.0.1", 6379))
{//清空Redis里面的所有缓存 client.FlushAll();
client.AddItemToSet("微信A", "好友A");
client.AddItemToSet("微信A", "好友B");
client.AddItemToSet("微信A", "好友C");
client.AddItemToSet("微信A", "好友D");
client.AddItemToSet("微信A", "好友2");
client.AddItemToSet("微信B", "好友1");
client.AddItemToSet("微信B", "好友A");
client.AddItemToSet("微信B", "好友D");
client.AddItemToSet("微信B", "好友F");
client.AddItemToSet("微信B", "好友G");//获取交集(获取相同的好友)var setunion = client.GetIntersectFromSets("微信A", "微信B");
Console.WriteLine("微信A和微信B的共同好友为:");foreach (var item in setunion)
{
Console.WriteLine(item);
}
}
}//结果为//这是缓存客户端看到的缓存内容4.Zset

a655ff2721b26b80ec64b4098f90d8e5.png

 /// /// Zset/// public static void TestZSet()
{using (RedisClient client = new RedisClient("127.0.0.1", 6379))
{//清空Redis里面的所有缓存 client.FlushAll();
client.AddItemToSortedSet("主播安妮", "粉丝1", 50);
client.AddItemToSortedSet("主播安妮", "粉丝2", 20);
client.AddItemToSortedSet("主播安妮", "粉丝3", 68);
client.AddItemToSortedSet("主播安妮", "粉丝4", 31);
client.IncrementItemInSortedSet("主播安妮", "粉丝4", new Random().Next(200, 500));var TopList = client.GetAllItemsFromSortedSetDesc("主播安妮");
Console.WriteLine("刷礼物排行榜为");foreach (var item in TopList)
{
Console.WriteLine(item);
}
}
}
//结果为

a655ff2721b26b80ec64b4098f90d8e5.png

5.List

a655ff2721b26b80ec64b4098f90d8e5.png

/// /// List/// public static void TestList()
{using (RedisClient client = new RedisClient("127.0.0.1", 6379))
{//清空Redis里面的所有缓存 redisClient.FlushAll();//队(在前面加入)
client.EnqueueItemOnList("QueueList", "打印任务1");
client.EnqueueItemOnList("QueueList", "打印任务2");
client.EnqueueItemOnList("QueueList", "打印任务3");
client.EnqueueItemOnList("QueueList", "打印任务4");//获取QueueList缓存个数long q = client.GetListCount("QueueList");for (int i = 0; i < q; i++)
{//【先进先出】取值的时候先取 “入栈操作1-->2-->3-->4”
Console.WriteLine("QueueList出队值:{0}", client.DequeueItemFromList("QueueList"));
}
Console.WriteLine("---------------------------------------------------------------");//栈(在后面加入)
client.PushItemToList("StackList", "入栈操作1");
client.PushItemToList("StackList", "入栈操作2");
client.PushItemToList("StackList", "入栈操作3");
client.PushItemToList("StackList", "入栈操作4");long p = client.GetListCount("StackList");for (int i = 0; i < p; i++)
{//【后进先出】取值的时候先取 “入栈操作4-->3-->2-->1”
Console.WriteLine("StackList出栈值:{0}", client.PopItemFromList("StackList"));
}
}
}
//结果

 //这个比较复杂一点,需要结合输出值对应着看

a655ff2721b26b80ec64b4098f90d8e5.png

出处:

https://www.cnblogs.com/loushengjie/archive/2020/08/04/13434642.html

版权申明:本文来源于网友收集或网友提供,如果有侵权,请转告版主或者留言,本公众号立即删除。

fbe37c5e9fdab2b4ef053e97aaf583a8.gif

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值