redis官网提供了很多开源的C#客户端。其中ServiceStack.Redis应该算是比较流行的。它提供了一整套从Redis数据结构的强数据类型转换的机制并将对象json序列化。

ServiceStack.Redis地址:https://github.com/ServiceStack/ServiceStack.Redis

1 string类型操作

strings类型是最常用的数据类型,在redis中以key-value存储。

    public class Person{public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }public override string ToString(){return $"Id:{Id},Name:{Name},Age:{Age}";}}class Program{static void Main(string[] args){//创建客户端,注意有密码的需要传入密码。密码可以从配置文件中获取。RedisClient redis = new RedisClient("127.0.0.1", 6379, "123456");Person p1 = new Person { Age = 18, Name = "zhuangjuan", Id = 000 };Person p2 = new Person { Age = 19, Name = "zhudaokuan", Id = 001 };Person p3 = new Person { Age = 20, Name = "wangmazi", Id = 002 };#region String数据结构的操作,注意这里的string类型不是说我们的数据类型,而是数据库中的数据结构//清空数据库redis.FlushDb();//修改数据,如果key不存在则是添加数据//这里的泛型类型 其实会被序列化为json存储到数据库中.Console.WriteLine(redis.Set<Person>("p1", p1));//获取当前key的数据结构类型.总共定义了5大类型.RedisKeyType type = redis.GetEntryType("p1");Console.WriteLine(type.ToString());//设置过期时间Console.WriteLine(redis.Set<Person>("p1", p1, DateTime.Now.AddDays(1)));Console.WriteLine(redis.Set<Person>("p1", p1, new TimeSpan(24, 0, 0)));//读取数据,如果key不存在则返回""//从数据库中读到的json对象,会被反序列化为泛型类型对象.Console.WriteLine(redis.Get<Person>("p1").ToString());//删除数据,Console.WriteLine(redis.Remove("p1"));//批量操作数据Dictionary<string, Person> dic = new Dictionary<string, Person>(){{ "p1",p1},{ "p2",p2},{ "p3",p3},};redis.SetAll<Person>(dic);redis.GetAll<Person>(new string[] { "p1", "p2", "p3" });redis.RemoveAll(new string[] { "p1", "p2", "p3" });#endregion}}

2 Hash类型操作

Hash在redis中采用(HashId,key,value)进行存储。一个HashId可以包含多个不相同的key,一个key对应着一个value。所以Hash类型可以看作是String类型的集合,HashId可以理解为集合的名称。

            #region hash数据结构的操作redis.FlushDb();redis.SetEntryInHash("hash1", "p1", JsonSerializer.Serialize(p1));redis.SetEntryInHash("hash1", "p2", JsonSerializer.Serialize(p1));redis.SetEntryInHash("hash1", "p3", JsonSerializer.Serialize(p1));Person p = JsonSerializer.Deserialize<Person>(redis.GetValueFromHash("hash1", "p1"));#endregion

3 List类型操作

List类型在redis中是按照(listId,value)来存储的,每一个value会自动生成一个对应的序号。List中可以有相同的value。

            #region List数据类型的操作redis.PushItemToList("list1", JsonSerializer.Serialize(p1));redis.PushItemToList("list1", JsonSerializer.Serialize(p2));redis.PushItemToList("list1", JsonSerializer.Serialize(p3));redis.PushItemToList("list1", JsonSerializer.Serialize(p3));redis.GetAllItemsFromList("list1");#endregion

4 set类型操作

set类型和list类型类似,唯一不同的是,set类型中不会存储相同value的数据。

            #region set数据类型的操作()redis.AddItemToSet("set1", JsonSerializer.Serialize(p1));redis.AddItemToSet("set1", JsonSerializer.Serialize(p2));redis.AddItemToSet("set1", JsonSerializer.Serialize(p3));redis.AddItemToSet("set1", JsonSerializer.Serialize(p3));//有相同的value,会被自动剔除掉.var items = redis.GetAllItemsFromSet("set1");#endregion

5 zset类型操作

zset在redis中按照(setId,value,score)存储,score参数用来排序。zset类型与set类型也类似,唯一不同的是,zset会自动排序。

            #endregion#region zset数据类型的操作--去重的自动排序的链表redis.AddItemToSortedSet("zset1", JsonSerializer.Serialize(p2), p2.Id);redis.AddItemToSortedSet("zset1", JsonSerializer.Serialize(p3), p3.Id);redis.AddItemToSortedSet("zset1", JsonSerializer.Serialize(p1), p1.Id);#endregion

6 连接池

在我们实际的使用Redis的过程中,肯定不能在每个调用的类都实例化RedisClient来直接使用,这样太麻烦,还涉及到相关异常情况处理,一般是将操作Redis的相关方法封装成通用的工具类,提供给调用方使用。

    public class RedisCacheHelper{private static readonly PooledRedisClientManager pool = null;private static readonly string redisHosts = "123456@127.0.0.1:6379";public static int RedisMaxReadPool = 3;public static int RedisMaxWritePool = 1;static RedisCacheHelper(){pool = new PooledRedisClientManager(new string[] { redisHosts }, new string[] { redisHosts }, new RedisClientManagerConfig(){MaxReadPoolSize = RedisMaxReadPool,MaxWritePoolSize = RedisMaxWritePool,AutoStart = true,});}}

首先我们创建了一个工具类,在这里使用到了池的概念。其中有一个连接字符串可以注意一下,关于服务器的配置参数我们可以使用配置文件,这里就简便处理了。

localhost
127.0.0.1:6379
redis://localhost:6379
password@localhost:6379
clientid:password@localhost:6379
redis://clientid:password@localhost:6380?ssl=true&db=1

连接池在使用得时候需要在池中获取一个客户端。

            using (IRedisClient redis = pool.GetClient()){//do something}

redis(二)使用redis工具类相关推荐

  1. java将链接生成二维码工具类

    一.添加依赖 <!-- 生成二维码--><dependency><groupId>com.google.zxing</groupId><artif ...

  2. Java二维码工具类(使用zxing实现,可支持logo)

    本工具类基于Google二维码框架zxing3.1.0实现. 1. pom.xml中依赖包设置 <dependency><groupId>com.google.zxing< ...

  3. com.google.zxing 二维码工具类

    com.google.zxing 二维码工具类 pom 工具类 使用 pom <dependency><groupId>com.google.zxing</groupId ...

  4. Java二维码工具类(超详细注释)

    二维码工具类 准备工作: pom.xml 引入依赖 <!-- 二维码 --> <dependency><groupId>com.google.zxing</g ...

  5. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  6. java生成二维码工具类

    1,先引入谷歌的插件zxing的maven坐标 <!-- 二维码 --><dependency><groupId>com.google.zxing</grou ...

  7. 分享一个Java生成二维码工具类

    分享一个Java生成二维码工具类 直接上代码: 1.CodeUtil.class package top.lrshuai.blog.util;import java.awt.BasicStroke; ...

  8. 2021-08-26(条形码,二维码工具类生成)

    公司需要对商品的条码值生成对应的条形码,目前市面上的有的条码库分为: JBarcode,zxing jbarcode这个包在maven的官方仓库找不到,所以需要自己添加到本地仓库然后编写pom文件就可 ...

  9. Redis的API调用工具类

    1.一个Redis的工具类!方便调用Redis的API操作! package com.example.demo.utils;import org.springframework.beans.facto ...

最新文章

  1. MySQL 管理方法
  2. 触发器deleted 表和 inserted 表详解(转)
  3. Git :LF will be replaced by CRLF in readme.txt的原因与解决方案
  4. 线程并发库和线程池的作用_并发–顺序线程和原始线程
  5. 四、内存空间的编辑和ASSIC码
  6. Time flies
  7. [热议]Java是新的COBOL吗?
  8. jQueru中数据交换格式XML和JSON对比
  9. (转)他们才是全球高频交易顶级玩家
  10. 国内在线查看Java源码(支持下载)
  11. torch.utils.data.Dataset用法
  12. 游戏开发者如何有效的编写游戏策划文档
  13. aardio - 【库】FlexCell表格组件
  14. system.badimageformatexception 未能加载文件或程序集问题解决
  15. 详解标准方程法(内含公式推导和代码)
  16. ArcGIS(ESRI)的发展历史和版本历史(简介)
  17. Unity Shader - Get Screen Pos
  18. Linux定时任务与开机自启动脚本
  19. C/C++程序员面试指南
  20. 表mysql.item模板不存在_关于laravel的最热门问题合集

热门文章

  1. Scratch2舞台各个部分及积木的介绍
  2. 放置江湖html5游戏,放置江湖单机离线版
  3. py安装文件时报错usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
  4. ESXi-6.7 支持Realtek81XX 8125网卡镜像
  5. 易支付接口码支付个人免签源码开源版下载(简单的介绍)
  6. 免费合同管理软件有哪个好用?有哪些功能?
  7. GeoTools,JTS和GeoAPI -- (学习GIS【3】)
  8. 《PHP和MySQL WEB开发》第六章笔记
  9. java 线程池 简介
  10. WEB前端技能考核内容及岗位要求 送给找工作的童鞋 详细概括