c#操作Redis的5种基本类型汇总

前言

在我们的项目中,通常会把数据存储到关系型数据库中,比如Oracle,SQL Server,Mysql等,但是关系型数据库对于并发的支持并不是很强大,这样就会造成系统的性能不佳,而且存储的数据多为结构化数据,对于非结构数据(比如文本)和半结构化数据(比如JSon) 就显得不够灵活,而非关系型数据库则很好的弥补了这两点, 我们通常把读操作频繁的数据写入Redis中,以Key-value的方式存储来提高性能。

Redis支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。以下介绍了.net中操作redis五种数据类型的基本语法。

一、String数据类型的应用场景

1. 简介

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

2.使用场景

存储简单的键值对,比如我们需要统计某个网站的点击量,关注量、粉丝量等

3. C#使用操作举例

现在需要保存一个Webservice接口的参数,让其实现可配置,比如地址、用户名、密码、同步时间等信息,我们可以将它在前端页面格式化为JSon字符串,

然后通过Ajax传递到服务端保存到Redis中,代码如下:

/// <summary>
  /// 保存数据到Redis缓存中
  /// GHB BY 2020-06-26
  /// </summary>
  /// <param name="KeyName">需要保存的键名称,默认保存到redis的第二个数据库中</param>
  /// <param name="configInfo">需要保存的配置信息</param>
  /// <returns>返回保存的结果</returns>
  public string SaveConfigInfoToRedis(string KeyName, string configInfo)
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    if (client == null) return "保存失败!";
    if (client.ContainsKey(KeyName))
     client.Replace<string>(KeyName, configInfo);
    else
     client.Set<string>(KeyName, configInfo);
    return "保存成功!";
   }
  }

保存成功后,我们在redis可视化工具中可以看到我们保存的信息为:

如果下次加载数据的时候,我们可以根据Key来读取这个string字符串,然后格式化为Hashtable,再序列化为JOSN格式返回到前端,就可以以表单的形式展示,

在表单中可以修改保存等操作,实现了参数的可配置,这读取代码如下:

/// <summary>
  /// 从redis缓存中获取数据,转化为相应格式后返回
  /// GHB BY 2020-06-26
  /// </summary>
  /// <param name="KeyName">缓存中的键名称</param>
  /// <returns>输入键对应的值信息</returns>
  public string LoadConfigFromRedis(string KeyName)
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    if (client == null) return string.Empty;
    string configData = client.Get<string>(KeyName);
    if (string.IsNullOrWhiteSpace(configData))
     return string.Empty;
    Hashtable data = JsonConvert.DeserializeObject<Hashtable>(configData);
    return JsonConvert.SerializeObject(data);

   }
  }

二、hash(哈希)

1.简介

Redis hash 是一个键值(key=>value)对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

2.使用场景

我们需要灵活的保存一些信息,特别适合保存对象的信息,比如用户信息、配置信息等

3.C#使用操作举例

由于我们上面使用string类型的对象保存配置信息存在这样的问题,就是涉及到序列化和反序列化,如果信息量大的话将降低系统性能,

那么此处我们可以使用Hash数据结构来保存上面的信息,代码如下:

/// <summary>
  /// 操作redis的hashtable类型
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateHash()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb",1))
   {
    Dictionary<string, string> configDic = new Dictionary<string, string>();
    configDic.Add("config_IP", "localhost");
    configDic.Add("config_Port", "1521");
    configDic.Add("config_serviceName", "orcl");
    configDic.Add("config_userName", "DE_POWERPMS");
    configDic.Add("config_password", "cppepass");
    client.SetRangeInHash("config_info", configDic);
    Dictionary<string, string> testHash = client.GetAllEntriesFromHash("config_info");
    foreach (var item in testHash)
    {
     Console.WriteLine("Hash的key为:{0} 值为:{1}", item.Key, item.Value);
    }
    Console.ReadLine();
   }
  }

使用redis可视化工具我们可以刚才存储的数据如下:

三、List(列表)

1.简介

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),可以使用list的push操作将任务存到List,

然后使用pop操作将任务取出执行,在列表头部或者末尾操作数据非常高效,不受队列长度的影响。

列表最多可存储 232- 1 元素 (4294967295, 每个列表可存储40多亿)。

2.使用场景

redis 的 list 数据类型对于大部分使用者来说,是实现队列服务的最经济,最简单的方式。

另外,因为 list 结构的数据查询两端附近的数据性能非常好,所以适合一些需要获取最新数据的场景,比如新闻类应用的 “最近新闻”,获取钱N个用户列表等。

3.C#使用操作举例

对于队列的使用,在此处比如有多个客户端需要打印机打印任务,那么使用队列进行任务的排队,然后按照排队顺序开始打印

对于栈的使用,比如二叉树的遍历,括号的匹配等,我们可以进行先进后出的顺序完成,代码如下:

/// <summary>
  /// 操作redis的List类型
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateList()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    #region List队列操作
    client.EnqueueItemOnList("QueueList", "打印任务1"); //入队
    client.EnqueueItemOnList("QueueList", "打印任务2");
    client.EnqueueItemOnList("QueueList", "打印任务3");
    client.EnqueueItemOnList("QueueList", "打印任务4");
    long q = client.GetListCount("QueueList");
    Console.WriteLine("打印任务按照顺序打印开始");
    for (int i = 0; i < q; i++)
    {
     Console.WriteLine("QueueList出队值:{0}", client.DequeueItemFromList("QueueList"));
    }
    Console.WriteLine("打印任务按照顺序打印完成");
    #endregion
    #region 栈操作
    client.PushItemToList("StackList", "入栈操作1"); //入栈
    client.PushItemToList("StackList", "入栈操作2");
    client.PushItemToList("StackList", "入栈操作3");
    client.PushItemToList("StackList", "入栈操作4");
    Console.WriteLine("开始出栈");
    long p = client.GetListCount("StackList");
    for (int i = 0; i < p; i++)
    {
     Console.WriteLine("StackList出栈值:{0}", client.PopItemFromList("StackList"));
    }
    Console.WriteLine("出栈完成");
    Console.ReadLine();
    #endregion
   }
  }

运行结果显示,队列是先进先出操作,栈是先进后出操作,并且操作完成后,数据被删除,如图所示:

四.Set(集合)

1.简介

Redis 的 Set 是 string 类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

集合中最大的成员数为 232- 1(4294967295, 每个集合可存储40多亿个成员)。

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

2.使用场景

集合主要应用在一些需要求交集、并集、补集这样的场景,比如我们需要求共同好友、共同兴趣爱好、共同关注的微博,限制同一个账号多处登录系统等场景。

3.C#使用操作举例

比如现在随便举例两个QQ用户为例:QQ用户1和QQ用户2,他们分别有各自的好友,现在我们可以通过集合来获取到他们的共同好友,代码如下:

/// <summary>
  /// 操作redis的Set类型
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateSet()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    #region Set操作
    client.AddItemToSet("QQ用户1", "好友A");
    client.AddItemToSet("QQ用户1", "好友B");
    client.AddItemToSet("QQ用户1", "好友C");
    client.AddItemToSet("QQ用户1", "好友D");

    client.AddItemToSet("QQ用户2", "好友C");
    client.AddItemToSet("QQ用户2", "好友F");
    client.AddItemToSet("QQ用户2", "好友G");
    client.AddItemToSet("QQ用户2", "好友D");
    var setunion = client.GetIntersectFromSets("QQ用户1", "QQ用户2");
    Console.WriteLine("QQ用户1和QQ用户2的共同好友为:");
    foreach (var item in setunion)
    {
     Console.WriteLine(item);
    }
    Console.ReadLine();
    #endregion
   }
  }

运行结果显示他们的共同好友为: 好友C和好友D

五、zset(sorted set:有序集合)

1.简介

在 set 的基础上给集合中每个元素关联了一个分数,往有序集合中插入数据时会自动根据这个分数排序。不同的是每个元素都会关联一个double类型的分数。

redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

2.使用场景

在集合类型的场景上加入排序就是有序集合的应用场景了。比如根据好友的“亲密度”排序显示好友列表。

3.C#使用操作举例

比如现在有很多主播,每个主播都有粉丝给的礼物,现在需要我们给出礼物数量最多的前三名主播,那么可以使用SortedSet来实现,

可以分别给每个主播定义个分数来存储礼物数量,代码如下:

/// <summary>
  /// 操作redis的SortedSet类型
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateSortedSet()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    #region Set操作
    client.AddItemToSortedSet("GiftSortedSet", "主播1", 24);
    client.AddItemToSortedSet("GiftSortedSet", "主播2", 564);
    client.AddItemToSortedSet("GiftSortedSet", "主播3", 746);
    client.AddItemToSortedSet("GiftSortedSet", "主播4", 2357);
    client.IncrementItemInSortedSet("GiftSortedSet", "主播2", new Random().Next(200, 500));
    Console.WriteLine("礼物数最多的前三名主播为:");
    foreach (var item in client.GetRangeWithScoresFromSortedSet("GiftSortedSet",1,3))
    {
     Console.WriteLine($"名:{item.Key} 分数:{item.Value}");
    }
    Console.ReadLine();
    #endregion
   }
  }

运行之后,我们可以看到礼物数前三名的主播了,运行结果如下:

总结

以上就是.NET环境下操作Redis五种数据类型的所有方法总结,我们可以看到Redis更是一款数据结构服务器,对于这五种数据类型,我们可以实现很多操作,

比如对字符串进行附加操作;递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集;使用排序集合来获取排名等。

好了,到此这篇关于c#操作Redis的5种基本类型汇总的文章就介绍到这了,更多相关c#操作Redis的基本类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Redis安装及基本数据类型

    本文讲述了Redis安装及基本数据类型,小编觉得挺不错的,感兴趣的小伙伴们可以参考一下,具体如下 安装1.阿里云CentOS 1.进入到centos系统,输入wget ,下载好目前最新版的Redis,下载过程如下图. 2.对刚才的下载文件解压,进入到解压后的目录下. 3.输入make,进行编译. 4.进入src目录中,将其中的redis-server,redis-benchmark,redis-cli复制到自己新建的一个目录中. 5.设置环境变量. 复制代码 代码如下: vi /etc/prof

  • 在c#中使用servicestackredis操作redis的实例代码

    声明一个客户端对象: 复制代码 代码如下: protected RedisClient Redis = new RedisClient("127.0.0.1", 6379);//redis服务IP和端口 一 .基本KEY/VALUE键值对操作: 1. 添加/获取: List<string> storeMembers = new List<string>(); storeMembers.ForEach(x => Redis.AddItemToList(&q

  • C#使用Redis的基本操作

    一,引入dll 1.ServiceStack.Common.dll 2.ServiceStack.Interfaces.dll 3.ServiceStack.Redis.dll 4.ServiceStack.Text.dll 二,修改配置文件 在你的配置文件中加入如下的代码: <appSettings> <add key="RedisPath" value="127.0.0.1:6379"/> todo:这里配置自己redis的ip地址和端口

  • redis基本类型和使用方法详解

    redis存储数据的基本类型有:string(字符串类型).hash(散列类型).list(列表类型).set(集合类型).zset(有序集合类型). 依次做一些练习.redis命令不区分大小写. key相关操作 127.0.0.1:6379> set key hello ## 设置 OK 127.0.0.1:6379> set key1 world OK 127.0.0.1:6379> keys ke* ## keys查询键名 1) "key1" 2) "

  • c#操作Redis的5种基本类型汇总

    前言 在我们的项目中,通常会把数据存储到关系型数据库中,比如Oracle,SQL Server,Mysql等,但是关系型数据库对于并发的支持并不是很强大,这样就会造成系统的性能不佳,而且存储的数据多为结构化数据,对于非结构数据(比如文本)和半结构化数据(比如JSon) 就显得不够灵活,而非关系型数据库则很好的弥补了这两点, 我们通常把读操作频繁的数据写入Redis中,以Key-value的方式存储来提高性能. Redis支持5种数据类型:string(字符串),hash(哈希),list(列表)

  • 详解SpringBoot使用RedisTemplate操作Redis的5种数据类型

    目录 1.字符串(String) 1.1 void set(K key, V value):V get(Object key) 1.2 void set(K key, V value, long timeout, TimeUnit unit) 1.3 V getAndSet(K key, V value) 1.4 Integer append(K key, V value) 1.5 Long size(K key) 2.列表(List) 2.1 Long leftPushAll(K key, V

  • jedis操作redis的几种常见方式总结

    前言 Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种.其实,个人认为,redis最强大的地方不在于其存储,而在于其强大的缓存作用. 我们可以把它想象成一个巨大的(多借点集群,聚合多借点的内存)的Map,也就是Key-Value. 所以,我们可以把它做成缓存组件. 官方推荐的Java版客户端是jedis,非常强大和稳定,支持事务.管道及有jedis自身实现.我们对redis数据的操作,都可以通过jedis来完成. 那我们就来看一看,jedis不同的调用方式: (1

  • Jedis操作Redis数据库的方法

    本文实例为大家分享了Jedis操作Redis数据库的具体代码,供大家参考,具体内容如下 关于NoSQL的介绍不写了,直接上代码 第一步导包,不多讲 基本操作: package demo; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class Demo

  • Java三种获取redis的连接及redis_String类型演示(适合新手)

    0>确保redis进程服务开启 1>第一种:直接获取redis连接,通过redis.()方法测试连接,如果返回PONG则证明连接正常 //1> jedis的入门代码案例,测试连接 @Test public void test01(){ //1. 获取java连接 redis的连接对象 Jedis jedis = new Jedis("node1", 6379); //2. 执行相关操作 String ping = jedis.ping(); System.out.pr

  • Redis中五种数据类型简单操作

    Redis中五种数据类型简单操作 提出问题 Redis五种数据类型的简单增删改查命令??? 解决问题 假设你已经安装Redis服务器: 假设你已经打开Redis cli命令行工具: 假设你对Redis有所了解: Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_key的值 127.0.0.1:6379> get ay_key "ay"

  • SpringBoot操作Redis三种方案全解析

    使用 Java 操作 Redis 的方案很多,Jedis 是目前较为流行的一种方案,除了 Jedis ,还有很多其他解决方案,如下: 除了这些方案之外,还有一个使用也相当多的方案,就是 Spring Data Redis. 在传统的 SSM 中,需要开发者自己来配置 Spring Data Redis ,这个配置比较繁琐,主要配置 3 个东西:连接池.连接器信息以及 key 和 value 的序列化方案. 在 Spring Boot 中,默认集成的 Redis 就是 Spring Data Re

  • python操作redis数据库的三种方法

    安装依赖 pip3 install redis 使用的三种方式 直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379, db=1, password=None, decode_responses=True) 连接池使用 import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=1, max_connections=100, password

  • 详解Spring Data操作Redis数据库

    Redis是一种NOSQL数据库,Key-Value形式对数据进行存储,其中数据可以以内存形式存在,也可以持久化到文件系统.Spring data对Redis进行了很好的封装,用起来也是十分的得心应手.Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, h

  • Spring-data-redis操作redis知识总结

    什么是spring-data-redis spring-data-redis是spring-data模块的一部分,专门用来支持在spring管理项目对redis的操作,使用java操作redis最常用的是使用jedis,但并不是只有jedis可以使用,像jdbc-redis,jredis也都属于redis的java客户端,他们之间是无法兼容的,如果你在一个项目中使用了jedis,然后后来决定弃用掉改用jdbc-redis就比较麻烦了,spring-data-redis提供了redis的java客

随机推荐