一、五种数据结构:

1. String——字符串

String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。

字符串常用的语法:

① 赋值:set  string1  hello

② 取值:get  string1

③ 删除:del  string1 (这个命令可以用于所有的类型)

④ 数值加一:incr   num1            如果值为空,则默认从0加一,如果值无法转为数字,则报异常。

⑤ 数值减一:decr   num1           如果值为空,则默认从0减一,如果值无法转为数字,则报异常。

⑥ 数值增加指定的数值:incrby  num1  2

⑦ 数值减少指定的数值:decrby  num1  2

⑧ 拼接:append  num1  123       如果值存在就拼接,如果不存在就新增

2. Hash——哈希

在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时,通常需要将字符串(JSON)取出来,然后进行反序列化,修改某一项的值,再序列化成字符串(JSON)存储回去。简单修改一个属性就干这么多事情,消耗必定是很大的,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而 Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。

哈希表常用的语法:

① 赋值:hset myhash age 18

② 取值:hget myhash age

③ 赋多个值:hmset myhash name zhangsan age 21

④ 取多个值:hmget myhash name age

⑤ 获得所有键值对:hgetall myhash

⑥ 移除:hdel myhash name age

3. List——列表

List 说白了就是链表,插入删除数据非常快。可以用于消息中间件的补救措施,比如消息队列中的消息发送成功存入一个链表,发送失败存入一个链表,一段时间后将发送成功的链表清空,发送失败的链表中的消息继续发送,直到成功后存入成功的链表,目的是为了保证数据的一致性。

(1) ArrayList使用数组方式:根据索引去查询速度非常快,但是新增与删除元素时需要涉及到位移操作,效率比较低

(2)LinkedList使用双向链接方式:每个元素都记录了前后元素的指针,插入和删除数据时,只是改变了前后元素指针所指向的元素,速度快。

① lpush: 左侧插入 如:lpush  mylist  a b c  返回3,表示是数量。  lpush  mylist  1 2 3  返回6

② rpush: 右侧插入 如:rpush  mylist  a b c  返回3,表示是数量。  rpush  mylist  1 2 3  返回6

③ lrange: 查看列表,从哪开始到哪结束,0:表示从链表的头部开始,-1表示从链表的尾部第一个元素开始,-2表示从链表的尾部第二个元素开始

如:lrange mylist 0 5,返回:3,2,1,c,b,a.

lrange mylist 0 -1,返回:a,b,c,1,2,3.

lrange mylist 0 -2,返回:a,b,c,1,2

④ lpop: 左弹出,它会返回并弹出指定key所关联的那个链表中的第一个元素,不存在返回nil

如:lpop mylist,返回3,弹出之后,里面就没有这个元素了,

lrange mylist 0 -1,返回的结果中,不在有这个元素。

⑤ rpop: 右弹出,如rpop mylist2,弹出3,

lrange mylist2 0 -1,查看,这个元素已经不存在了。

⑥ llen: 获取列表中的元素个数,如果这个列表不存在,则返回0,

如: llen mylist,返回5.

⑦ lpushx: 仅当我们参数中指定的key存在时,可以向关联的list的头部去插入一个值,如果不存在,就不会进行插入,返回0。

如:lpushx mylisy x,表示将x插入到链表的头部,

lrange mylist 0 -1,可以看到新插入的元素。

⑧ rpushx:仅当我们参数中指定的key存在时,可以向关联的list的尾部去插入一个值,如果不存在,就不会进行插入,返回0。

如:rpushx mylist2 y ,表示向mylist2列表的尾部插入一个元素y,

lrange mylist2 0 -1,查看,可以看到y元素在最后面。

⑨ lrem:写上具体的一个key,后面会跟上一个count,value。它会删除count个为value的元素,如果count大于0,它就会从头向尾遍历,并删除count个为value的元素,如果count小于0,它会从后面向前面遍历。如果count等于0,则删除链表中所有等于value的元素。

如:lrem mylist3 2 3, 表示从头到尾删除2个3.

lrem mylist3 -2 1,表示从后面向前删除2个1.

lrem mylist3 0 2,表示删除mylist3中的所有2.

⑩ lset: 来设置列表中的某个index的角标的元素的值。0表示第一个元素,-1表示最尾的元素。我们可以操作链表的角标,如果不存在,就抛出异常。

如:lset mylist 3 mm,表示将链表mylist的第三个值设置为mm.

11. linsert: 在某个元素的前或后插入某个元素,如linsert mylist4 before b 11,表示在mylist4链表中的b之前插入11。

linsert mylist4 after b 22,表示在mylist4链表中的b后面插入22 rpoplpush: 将链表中的尾部元素弹出,并添加到头部。

12. rpoplpush mylist5 mylist5,表示将链表mylist5中的一个元素弹出,压入到链表mylist6中,返回1,表示成功。

rpoplpush使用场景:

4. Set——集合

Set 是一个无重复数据的无序集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

① sadd myset 1 2 3   向set中增加元素,不允许重复

② srem myset 1 2      删除数据

③ smember myset     所有的值

④ sismember myset a   0不存在 1存在

⑤ sdiff myset1 myset2       差集运算

⑥ sinter myset1 myset2     交集运算

⑦ sunion myset1 myset2   并集运算

⑧ scard myset set   长度

⑨ srandmenber myset   随机获取 value

⑩ sdiffstore my1 mya1 myb1       将 mya1/b1的差集存入 my1

11.sinterstore my1 mya1 myb1     将 mya1/b1的交集存入 my1

12.sunionstore my1 mya1 myb1   将 mya1/b1的并集存入 my1

5. Sorted Set——有序集合

和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。

① zadd mysort 70 zhangsan 80 lisi

② zadd mysort 100 zhangsan:如果元素存在,会覆盖掉之前的分数

③ zcard mysort:获取成员的数量

④ zscore mysort zhangsan:获取成员的分数

⑥ zrem mysort zhangsan:删除某个成员

⑦ 范围查找:zrange mysort  0  -1

zrange mysort 0 -1 withscores(显示分数)

⑧ 排序(降序):zrevrange mysort 0 -1 withscores

⑨ 按照排名的范围进行删除:zremrangebyrank mysort 0 4

⑩ 按照分数的范围进行删除:zremrangebyscore mysort 80 100

扩展:

返回分数在某个区间的成员,并按照分数降序排列:

zrangebyscore mysort 0 100 withscore limit 0 2

限制返回2条数据

设置指定成员增加的分数(给zhangsan加3分):zincrby mysort 3 zhangsan

分数在某个区间的成员个数:zcount mysort 80 90

二、key的常用操作:

查看所有的key:keys *

查看包含指定字符的key:keys my?

删除key:del key1 key2

判断key是否存在:exists my1

重命名key:rename myname mynewname

设置key的超时时间(单位是秒):expire mynewname 1000

查看key剩余时间:ttl mynewname(没有设置时间则返回-1)

查看key的类型:type mysort

深入学习门户:
Redis命令API:http://redisdoc.com/

Redis命令参考:http://www.runoob.com/redis/redis-commands.html

Redis数据结构使用场景:http://www.runoob.com/w3cnote/redis-use-scene.html

---------------------------------------------------------------------------------------------------------------------------

转载请注明出处:https://www.cnblogs.com/HelloXTF/p/10683485.html

Redis 五种数据结构详解(string,hash,list,set,zset)的更多相关文章

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

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

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

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

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

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

  4. Redis(一)、Redis五种数据结构

    Redis五种数据结构如下: 对redis来说,所有的key(键)都是字符串. 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value. String类型是二进制安 ...

  5. Redis五种数据结构简介

    Redis五种结构 1.String 可以是字符串,整数或者浮点数,对整个字符串或者字符串中的一部分执行操作,对整个整数或者浮点执行自增(increment)或者自减(decrement)操作. 字符 ...

  6. rabbitmq五种模式详解(含实现代码)

    一.五种模式详解 1.简单模式(Queue模式) 当生产端发送消息到交换机,交换机根据消息属性发送到队列,消费者监听绑定队列实现消息的接收和消费逻辑编写.简单模式下,强调的一个队列queue只被一个消 ...

  7. 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. ...

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

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

  9. Redis五种数据结构(二)

    Redis数据结构 Redis数据结构介绍 Redis是一种高级的key-value的存储系统,其中value支持五种数据类型. 字符串(String) 哈希(hash) 字符串列表(list) 字符 ...

随机推荐

  1. cas机制的原理和使用

    一.什么是cas CAS,compare and swap的缩写,中文翻译成比较并交换. CAS 操作包含三个操作数 -- 内存位置(V).预期原值(A)和新值(B). 如果内存位置的值与预期原值相匹 ...

  2. 趣图:这是拿offer极高的面试经验

      扩展阅读 趣图:面试谈薪资就要这种底气 趣图:IT培训出来找工作 趣图:这是招聘超神级别的程序员?

  3. vue入门(一)----工程vue_sell

    1.利用vue脚手架工具创建vue,webpack工程目录 npm install -g vue-cli  安装vue脚手架 vue init webpack sell 初始化一个webpack模板, ...

  4. OSI和TCP/IP参考模型

    分层思想: 分层模型是一种开发网络协议的设计方法. 把节点之间的通讯这个复杂的问题,分成了若干个简单的小问题逐一解决. 把网络相邻节点之间通过接口进行通信,下层为上层提供服务.当网络发生故障,很容易确 ...

  5. 零基础学习Kmeans聚类算法的原理与实现过程

    内容导入: 聚类是无监督学习的典型例子,聚类也能为企业运营中也发挥者巨大的作用,比如我们可以利用聚类对目标用户进行群体分类,把目标群体划分成几个具有明显特征区别的细分群体,从而可以在运营活动中为这些细 ...

  6. 分享一些比较好用的(免费)网站及推荐理由 SMARK

    分享一些比较好用的(免费)网站及推荐理由 --By SMARK 资源类 这里面是一些有供下载的资源的网站等 视频 片库 内容怎么样有待考证 蓝光网 看着还行, 打赏收入 预告片世界 还行, 收入有待考 ...

  7. 035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构

    035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构 本文知识点:Java中的多重if结构 选择结构回顾 if选择结构 注意: 1.条 ...

  8. 01 Arcgis10.6 安装教程

    一.ArcGIS系统要求 包括: Win7 SP1(及以上) 32/64位系统 Win8.1 32/64位系统 Win10 32/64位系统 二.下载ArcGIS 10.6安装文件 链接:https: ...

  9. C++有子对象的派生类的构造函数

    转载:https://blog.csdn.net/qq1169091731/article/details/50934588?utm_source=blogxgwz6 类的数据成员不但可以是标准型(如 ...

  10. opencv 中从cv::line和resize()函数

    转自: https://blog.csdn.net/weixin_36340947/article/details/77095924 转自: https://blog.csdn.net/robinhj ...