一、五种数据结构:

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. Java8之日期处理

    简介 Java8除了有较大更新的 lambda. Stream ,还推出了全新的日期时间API.Java之前处理日期.日历和时间的不足之处主要有: 日期类型为可变类型,非线程安全使其应用非常受限 没有 ...

  2. 简单版 Promise/A+,通过官方872个测试用例

    promise 标准 在实现 Promise 之前要清楚的是 JavaScript 中的 Promise 遵循了 Promises/A+ 规范,所以我们在编写 Promise 时也应当遵循这个规范,建 ...

  3. 项目启动加载配置,以及IP黑名单,使用CommandLineRunner和ApplicationRunner来实现(一般用在网关进行拦截黑名单)

    //使用2个类的run方法都可以在项目启动时加载配置,唯一不同的是他们的参数不一样,CommandLineRunner的run方法参数是基本类型,ApplicationRunner的run方法参数是一 ...

  4. ZooKeeper-3.5.6分布式锁

    原理 基本方案是基于ZooKeeper的临时节点与和watch机制.当要获取锁时在某个目录下创建一个临时节点,创建成功则表示获取锁成功,创建失败则表示获取锁失败,此时watch该临时节点,当该临时节点 ...

  5. OpenCV图像处理学习笔记-Day4(完结)

    OpenCV图像处理学习笔记-Day4(完结) 第41课:使用OpenCV统计直方图 第42课:绘制OpenCV统计直方图 pass 第43课:使用掩膜的直方图 第44课:掩膜原理及演示 第45课:直 ...

  6. milvus和faiss安装及其使用教程

    写在前面 高性能向量检索库(milvus & faiss)简介 Milvus和Faiss都是高性能向量检索库,可以让你在海量向量库中快速检索到和目标向量最相似的若干个向量,这里相似度量标准可以 ...

  7. MySQL的8小时连接超时时间,导致系统过夜即崩溃,报错Could not roll back Hibernate transaction

    2014年3月开始给单位开发<机关规范化管理网络平台>,10月底成功上线运行,但是存在一个bug: 部署环境: apache tomcat 6.0.41 + mysql5.5 + jbpm ...

  8. pytorch和tensorflow的爱恨情仇之参数初始化

    pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量 pytorch和tensorflow的爱恨情仇之定义可训练的参数 pytorch版本 ...

  9. c++中CreateEvent函数

    参考:https://blog.csdn.net/u011642774/article/details/52789969 函数原型: HANDLE CreateEvent( LPSECURITY_AT ...

  10. osu合集(期望dp)

    T1 EASY 我们设\(f_i\)表示到\(i\)的连续个数平方的期望. \(g_i\)表示到到\(i\)的连续个数的期望 在维护\(f_i\)的同时维护一下\(g_i\)就行了. 转移方程: \( ...