欢迎光临
个人技术文档整理

Redis 数据类型

Redis 数据类型

字符串(String)、列表(List)、集合(Set)、有序集合(SortedSet)、哈希表(Hash)

 

String   字符串

  • 说明

    • 字符串,string类型是二进制安全的,所以redis的string 可以包含任何数据,比如jpg图片、序列化的对象
  • 业务场景:

    • 缓存数据、计数器、配置信息、存储简单的键值对数据等
  • 示例

                #region 普通--字符串---Text
                {
                    var key = "string:" + id;
                    var value = Guid.NewGuid().ToString().Replace("-", "");
                    //Text设置:------------------------------------------------------
                    var isOk = _redis.StringSet(key, value);
                    //Text读取:------------------------------------------------------
                    var redisValue = _redis.StringGet(key);
                }
                #region model--对象---json
                {
                    var key = "model:" + id;
                    var user = new UserEntity { Id = id, Name = "张三" };
                    //设置:------------------------------------------------------
                    var isOk = _redis.StringSet(key, user);
                    //读取:------------------------------------------------------
                    var value = _redis.StringGet<UserEntity>(key); 
                }
                #endregion
                #region list-对象集合--json
                {
                    var key = "json:" + id;
                    var gridList = GetList();
                    //设置:------------------------------------------------------
                    var isOk = _redis.StringSet(key, gridList);
                    //读取:------------------------------------------------------
                    var value = _redis.StringGet<List<UserEntity>>(key); 
                }
                #endregion

 

Hash   哈希表

  • 说明

    • 散列,相当于 HashMap
    • 是一个string类型的 field 和 value 的映射表
    • 适合存储一些结构化的数据,如登录用户信息
  • 优点

    • 支持部分更新
    • 快速查询指定字段的值
    • 可以使用 Redis 的 Hash 类型来存储数据,支持多种操作和查询
  • 一个示例(用户信息)

                /*
                 用户信息对象 类型选择,json格式还是Hash:
    
                json: 1、对象需要转换json格式,增加存储空间和序列化和反序列化的时间开销
                      2、不支持部分更新,每次更新需要将整个对象重新写入 Redis。
    
    
                 Hash:
                    1、支持部分更新
                    2、快速查询指定字段的值
                    3、可以使用 Redis 的 Hash 类型来存储数据,支持多种操作和查询
                 
                 */
    
    
                List<KeyValueEntity> kvList = new List<KeyValueEntity>();
    
                var user = new UserEntity { Id = id, Name = "张三" };
    
                //Hash设置:将用户信息对象存储到 Redis 中 
                var key = $"Hash:{user.Id}";
    
                _redis.HashSet(key, "Id", user.Id);
                _redis.HashSet(key, "Name", user.Name);
                _redis.HashSet(key, "Description", user.Description);
                _redis.HashSet(key, "CreateTime", user.CreateTime);
    
    
                //Hash读取:------------------------------------------------------
    
                //第一种方式
                var redisValue = new UserEntity();
                redisValue.Id = _redis.HashGet<int>(key, "Id");
                redisValue.Name = _redis.HashGet(key, "Name");
                redisValue.Description = _redis.HashGet(key, "Description");
                redisValue.CreateTime = _redis.HashGet<DateTime>(key, "CreateTime");
    
                //第二种方式
                var kvEntity = _redis.HashGetAll(key);

     

 

List   列表

  • 说明

    • 列表,相当于LinkedList
    • 底层是通过链表来实现的,所以对于list来说首尾添加、删除 操作很快,但索引定位非常慢
    • 可以利用它来实现一个栈、队列
  • 业务场景:

    • 消息队列、最新消息列表、事件记录等
  • 示例

                    var userInfo = GetAUserInfo(id); 
                    //设置:------------------------------------------------------ 
                    var length = _redis.ListLPush(key, userInfo);//顶部插入
                    var length2 = _redis.ListRPush(key, userInfo);//尾部插入 
                    //_redis.ListLPop<dynamic>(key);//移除 第一个
                    //_redis.ListRPop<dynamic>(key);//移除 最后一个
                    //读取:------------------------------------------------------
                    var value = _redis.ListGetAll<UserEntity>(key);//获取所有数据

 

Set   集合

  • 说明

    • 无序集合,不可重复,相当于 HashSet
  • 业务场景

    • 唯一值存储、文章标签(求交集)、会员在线状态
  • 示例

                //添加标签(唯一值):
                _redis.SetAdd("article:tags:1", "C#", ".net", ".net core", "wpf", "技术", "程序员", "程序员", "程序员"); // 给文章Id=1,增加标签
                _redis.SetAdd("article:tags:2", "前端", "vue", "js", "html", "技术", "程序员", "html", "html"); // 给文章Id=2,增加标签
    
                //返回集合中所有的数据:
                var tags = _redis.SetGetMembers<string>("article:tags:1"); // 获取文章(id=1),中所有标签
    
                //集合求交集(共用的):
                var articleIds = _redis.SetGetInter<string>("article:tags:1", "article:tags:2"); // 2篇文章 共用的标签
    
    
                //删除数据:
                _redis.SetRemove("article:tags:1", "程序员"); // 从文章ID为1的文章中移除标签"coding"
    
                var delCount = _redis.Del("article:tags:1"); //删除整个key中的成员
    
                //获取数据数量:
                long tagCount = _redis.SetGetMemberCount("article:tags:1"); // 获取文章(id=1),中所有标签数量

     

 

Zset   有序集合

  • 说明

    • 有序集合,不可重复
    • 不是先添加的在前面,后添加的在后面
    • 每个元素都会关联一个double类型的分数,通过分数来为集合中的成员进行从小到大排序
  • 业务场景

  • 示例
                //文章的阅读量排行榜
    
                string key = "article:rank";
    
                //修改指定文章的阅读量
                _redis.SortedSetAdd(key, articleId, score);
    
    
                // 指定文章阅读量 递增  
                _redis.SortedSetIncrBy(key, articleId, increment: 1);
    
    
                //分数从低到高
                var zRange1 = _redis.SortedSetGetMemberList<object>(key, 0); //获取所有的成员 
                var zRange2 = _redis.SortedSetGetMemberList<object>(key, 0, 100); //获取前100个的成员 
    
                //分数从高到低
                var zRevRange1 = _redis.SortedSetGetMemberList<string>(key, 1, 0); // #stop=-1返回全部
                var zRevRange2 = _redis.SortedSetGetMemberList<string>(key, 1, 100); //获取前N个的成员 
    
                // 获取有序集合的成员数量
                long number = _redis.SortedSetGetMemberCount(key);
    
    
                // 将成员列表转换为字典
                var leaderboard = _redis.SortedSetGetList(key, 1, 100).ToList();
    
                // 移除有序集合中一个或多个成员
                _redis.SortedSetRemove(key, 1);

     

 

赞(1)