Redis五种数据结构如下:

对redis来说,所有的key(键)都是字符串。

1.String 字符串类型

是redis中最基本的数据类型,一个key对应一个value。

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

使用:get 、 set 、 del 、 incr、 decr 等

127.0.0.1:> set hello world
OK
127.0.0.1:> get hello
"world"
127.0.0.1:> del hello
(integer)
127.0.0.1:> get hello
(nil)
127.0.0.1:> get counter
""
127.0.0.1:> incr counter
(integer)
127.0.0.1:> get counter
""
127.0.0.1:> incrby counter
(integer)
127.0.0.1:> get counter
""
127.0.0.1:> decr counter
(integer)
127.0.0.1:> get counter
""

实战场景:

1.缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。

2.计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。

3.session:常见方案spring session + redis实现session共享,

2.Hash (哈希)

是一个Mapmap,指值本身又是一种键值对结构,如 value={{field1,value1},......fieldN,valueN}}

使用:所有hash的命令都是  h   开头的     hget  、hset 、  hdel 等

127.0.0.1:> hset user name1 hao
(integer)
127.0.0.1:> hset user email1 hao@.com
(integer)
127.0.0.1:> hgetall user
) "name1"
) "hao"
) "email1"
) "hao@163.com"
127.0.0.1:> hget user user
(nil)
127.0.0.1:> hget user name1
"hao"
127.0.0.1:> hset user name2 xiaohao
(integer)
127.0.0.1:> hset user email2 xiaohao@.com
(integer)
127.0.0.1:> hgetall user
) "name1"
) "hao"
) "email1"
) "hao@163.com"
) "name2"
) "xiaohao"
) "email2"
) "xiaohao@163.com"

实战场景:

1.缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。

3.链表

List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。

使用列表的技巧

  • lpush+lpop=Stack(栈)
  • lpush+rpop=Queue(队列)
  • lpush+ltrim=Capped Collection(有限集合)
  • lpush+brpop=Message Queue(消息队列)

使用:

127.0.0.1:> lpush mylist   ll ls mem
(integer)
127.0.0.1:> lrange mylist -
) "mem"
) "ls"
) "ll"
) ""
) ""
127.0.0.1:>

实战场景:

1.timeline:例如微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。

4.Set   集合

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中  1. 不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。

使用:命令都是以s开头的  sset 、srem、scard、smembers、sismember

127.0.0.1:> sadd myset hao hao1 xiaohao hao
(integer)
127.0.0.1:> SMEMBERS myset
) "xiaohao"
) "hao1"
) "hao"
127.0.0.1:> SISMEMBER myset hao
(integer)

实战场景;

1.标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。

2.点赞,或点踩,收藏等,可以放到set中实现

5.zset  有序集合

有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。

(有序集合中的元素不可以重复,但是score 分数 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同)。

使用: 有序集合的命令都是 以  z  开头    zadd 、 zrange、 zscore

127.0.0.1:> zadd myscoreset  hao  xiaohao
(integer)
127.0.0.1:> ZRANGE myscoreset -
) "xiaohao"
) "hao"
127.0.0.1:> ZSCORE myscoreset hao
""

实战场景:

1.排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

感谢观看。感谢支持。

参考:

redis官网

Redis(一)、Redis五种数据结构的更多相关文章

  1. redis 五种数据结构详解(string,list,set,zset,hash)

    redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...

  2. Redis(1)---五种数据结构

    五种数据结构 一.全局key操作 --删 flushdb --清空当前选择的数据库 del mykey mykey2 --删除了两个 Keys --改 --将当前数据库中的 mysetkey 键移入到 ...

  3. 2.Redis五种数据结构

    2.Redis五种数据结构2.1 预备2.1.1 全局命令2.1.2 数据结构和内部编码2.1.3 单线程架构2.2 字符串2.2.1 命令2.2.2 内部编码2.2.3 典型使用场景2.3 哈希2. ...

  4. Redis入门到高可用(四)—— Redis的五种数据结构的内部编码

    Redis的五种数据结构的内部编码

  5. Redis五种数据结构(Windows Server)

    1.Redis的五种数据结构 这里推荐大家在命名redis的key的时候最好的加上前缀,并且使用 :来分割前缀 ,这里在使用可视化工具查看的时候就比较好区分,比如我的的前缀是 Demo:test:(一 ...

  6. redis 五种数据结构详解(string,list,set,zset,hash),各种问题综合

    redis 五种数据结构详解(string,list,set,zset,hash) https://www.cnblogs.com/sdgf/p/6244937.html redis 与 spring ...

  7. 【Redis】redis 五种数据结构详解(string,list,set,zset,hash)

    redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...

  8. Redis 五种数据结构详解(string,hash,list,set,zset)

    一.五种数据结构: 1. String--字符串 String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候e ...

  9. 【Redis的那些事 · 上篇】Redis的介绍、五种数据结构演示和分布式锁

    Redis是什么 Redis,全称是Remote Dictionary Service,翻译过来就是,远程字典服务. redis属于nosql非关系型数据库.Nosql常见的数据关系,基本上是以key ...

随机推荐

  1. 超简单:纯CSS实现的进度条

    ——————纯CSS实现的进度条—————— HTML: <div class="wrapper"> <div class="bar"> ...

  2. VTK初始化New返回Null问题

    原文链接:http://www.cppblog.com/mythma/archive/2013/08/02/vtk-6-new-null.html 在使用VTK6.0时候,会遇到X::New()返回为 ...

  3. 在 ef 中执行 DbContext.Table.AddRange(Enitites).ToList() 会发生什么

    在 ef 中执行 DbContext.Table.AddRange(Enitites).ToList() 会发生什么 昨天和朋友摸鱼,无意之间聊到了执行 DbContext.Table.AddRang ...

  4. 【sqli-labs】 less26 GET- Error based -All you SPACES and COMMENTS belong to us(GET型基于错误的去除了空格和注释的注入)

    看了下源码 所有的注释形式和反斜线,and,or都被了过滤掉了 单引号没有过滤 空格也被过滤了 http://localhost/sqli-labs-master/Less-26/?id=1' htt ...

  5. 一键安装本地yum仓库脚本

    #!/bin/bash#By:zhaocheng#Date:2019-01-18#Version v1 [ -d /media/cdrom ] || mkdir /media/cdrom[ -d /m ...

  6. vue组件的拆分

    vue组件的拆分 <div class="div"> <!-- 拆分出来的组件 自定义名字moban --> <moban></moban ...

  7. 洛谷P1443 马的遍历【BFS】

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

  8. (28)SpringBoot启动时的Banner设置【从零开始学Spring Boot】

    对于使用过Spring Boot的开发者来说,程序启动的时候输出的由字符组成的Spring符号并不陌生.这个是Spring Boot为自己设计的Banner: 1.    .   ____       ...

  9. mongodb drop不释放磁盘空间

    点击(此处)折叠或打开 use demodb //使用demodb,以下假设操作的collection是foo db.foo.remove({"id":"123456&q ...

  10. hdu 1598 暴力+并查集

    #include<stdio.h> #include<stdlib.h> #define N 300 int pre[N]; int find(int u) { if(u!=p ...