Redis基本数据结构总结

Redis的特点在于其读写速度特别快,因为是存储在内存中的,其非常适合于处理大数据量的情况;还有一个是其不同于其他的关系型数据库,Redis是非关系型数据库,也就是我们常说的NoSQL,其并不需要一开始去创建好表结构,可以存储自定义的数据;还有Redis是分布式的,其可以主从分离,主从复制,比如说我们不可能只用一台Redis服务器来处理客户端的请求,因为这样毕竟是存在风险,如果服务器挂掉了,那么其数据就会丢失,而且无法找回,所以存在这么一种方案:多个主服务器用来处理客户端的请求,接着多个Redis分服务器用来将主服务器的数据同步到MySQL,这样在Redis服务器挂掉的时候,我们还是可以通过访问MySQL数据库从而得到数据;

很多人说Redis和memcached比较相像,但是我没有使用过memcached,所以只是总结了别人的比较。Redis拥有5个数据结构,而memcached只有一个字符串的数据结构,其只能通过append命令将数据添加到字符串的末尾,并且把该字符串当作一个列表在使用,在删除数据的时候,redis可以直接通过remove命令将其真正的删除,但是memcached只能够通过黑名单隐藏该数据从而避免对该数据进行读取,更新。

五种数据结构

这五种数据结构分别是STRING(字符串)、LIST(列表)、SET(集合)、HASH(哈希)、ZSET(有序集合);

  • 字符串:包括字符串、整数和浮点数;
  • 列表:一个链表,链表上面的每个结点都是一个字符串,其遵从队列的访问格式-先进先出,也就是从链表的结尾进行插入,链表的头部进行弹出;
  • 集合:里面是一个容器,他不允许存在相同的元素,每个值都是独一无二的;
  • 哈希:是一个键值对组合而成的无序散列表,其的键同样是不允许重复的;
  • 有序集合:是在集合的基础之上进行了排序;

在了解那五个操作相关的命令之前,需要先了解关于键的相关的命令:

Key

  1. DEL key

    移除给定的一个或者多个key。

  2. KEYS pattern

    查找符合给定模式的key,注意其匹配的模式怎么使用,包括了?、*、[]等等。

  3. RANDOMKEY

    从当前数据库中随机返回一个key。

  4. EXPIRE key seconds

    为给定的key设置存活时间,时间一过则把对应的key进行销毁,注意单位为秒。

  5. TTL key

    获取key剩余的存活时间,单位为秒,和上面的命令相对应,如果该key不存在或者是过期的话,则返回-2/-1(在不同数据库返回的值不一样?)。

  6. MOVE key db

    将key移动到指定的db,默认情况下使用的是0号数据库,注意要移动到相应的数据库(SELECT db)才能看到。

  7. RENAME key newkey

    将key更改为新的key,注意如果newkey在数据库中已经存在,那么旧的key的数据会把已经存在的新的key给覆盖掉。

  8. TYPE key

    返回指定的key的类型,如果不存在则返回的是none,而不是nil(进行操作才返回的)。

  9. OBJECT REFCOUNT key | OBJECT ENCODING key | OBJECT IDLETIME key

    分别返回key所引用的次数,key对应的编码,key空闲的时间(没有读也没有写,单位为秒)。

  10. RENAMENX key newkey

    在RENMAE的基础上判断key是否存在,更加的安全。

  11. EXPIREAT key timestamp

    设置时间戳。

  12. PERSIST key

    移除给定key的生存时间,也可以使用EXPIRE 来重置。

  13. SORT key [BY pattern] [LIMIT offset count] [GETpattern] [ASC|DESC] [ALPHA] [STOREdestination]

    这个方法只能用在LIST、SET、ZSET上,这里的pattern和之前的keys的pattern是一样的,LIMIT则是用来限制返回的偏移量和数量,GET是获取返回的指定的key的内容,ASC是升序、DESC是降序, ALPHA则是用在对字符串进行排序的时候,STORE则是指定存储的地方,可以指定到一个key上,这样就可以通过GET来访问到。

STRING

  1. GET key

    获取存储在给定键的值。

  2. MGET key...

    获取多个指定的键值。

  3. GETRANGE key start end

    获取指定范围的键值,支持反向操作,如果end超出实际范围,则忽略,返回全值。

  4. GETSET key value

    集合了GET和SET的功能,不过其返回的是该键被设置之前的值,但是其的值已经发生了改变 ,注意如果之前没有该键,则返回nil。

  5. SET key value

    设置存储在给定键中的值。

  6. SETNX key value

    注意在key已经存在的情况下,不进行任何操作,也就是说 SET if key not exist;可能存在一个锁的问题。

  7. SETEX key seconds value

    集合了SET和EXPIRE的功能,如果key存在,则覆盖掉。

  8. SETRANGE key offset value

    从偏移量开始设置,注意的是当这个value不足以把之前的value给覆盖掉时,那么仍然会显示之前没有被覆盖掉的值。这里返回的是字符串总的长度。如果空白字符串不存在的话,则相当于在空白字符串上进行操作。

  9. MSET key value ...

    可以同时设置多个键值对,如果不像覆盖掉key的话,可以使用MSETNX。

  10. MSETNX key value...

    和SETNX的作用是一样的,这里只有全部key都设置成功,才能返回1,只要有一个key已经存在,就会返回0。

  11. APPEND key value

    追加字符串值,返回新字符串长度,可以添加空字符串,返回的是原来的长度。

  12. STRLEN key

    返回字符串长度。

  13. DECR key

    将key的值减一,如果不存在key,则会先进行SET,并且将该键值初始化为0。该命令只能使用在数字上面。

  14. DECRBY key decrement

    在上面的基础之上减去指定的值。

  15. INCR key 和 INCRBY key increment

    同DECR和DECRBY

  16. SETBIT key offset set_or_clean

    将字符串看作是二进制,并且将字符串指定偏移量的二进制位设置为指定值,可以是set或者clean。同样的,如果key不存在,则帮其进行设置。

  17. GETBIT key offset

    把字符串看作是二进制串,并且返回二进制串中指定偏移量的二进制位的值。

LIST

在LIST中,不需要进行相应的SET操作,如果其不存在,其会自动创建,并且初始化为空列表。

  1. LPUSH key value...

    把多个键值加入到列表key的表头中,返回列表的长度。

  2. LPUSHX key value...

    在上面的基础之上,如果key不存在,则不进行任何操作,即 LPUSH if key exists。

  3. RPUSH key value

    插入到表尾。

  4. RPUSHX key value

    类似LPUSHX。

  5. LPOP key

    移出并且返回头元素。

  6. RPOP key

    移出并且返回尾元素。

  7. BLPOP key... timeout

    相当于LPOP的阻塞版本,如果其列表没有元素的时候,则会一直阻塞到列表中存在值并且进行LPOP操作,我们还可以设置超时时间,如果是0的话,则表明其可以阻塞到无限时间长。

  8. BRPOP key... timeout

    参照BLPOP。

  9. LLEN key

    返回列表的长度。

  10. LRANGE key start stop

    返回只等区间长度的元素,注意stop要大于start,否则返回一个空列表。

  11. LREM key count value

    删除列表中和value相等的元素。这个取决于count的值,如果为正数,正向搜索删除,如果为负数,反向搜索删除,如果等于0,则全部删除;返回被删除的个数。

  12. LSET key index value

    设置指定下标的值为新的value。

  13. LTRIM key start stop

    将指定返回值保留下来,其余均删除。

  14. LINDEX key index

    返回指定下标index的值。

  15. LINSERT key BEFORE|AFTER privot value

    将key添加到privot之前或者之后,如果privot不存在或者列表为空,则不进行任何操作。如果成功则返回列表长度。

  16. RPOPLPUSH source destination

    将source中的尾元素弹出并且插到destination列表的头元素的位置上,可以简单的理解为其进行了插队的操作;如果destination不存在则默认设置为空列表,但是如果source不存在则不进行任何的操作。

  17. BROPLPUSH source destination timeout

    上面版本的阻塞版本,如果timeout为0,则可以无限期阻塞。

SET

  1. SADD key-name [item...]

    添加多个元素到集合中,并且返回添加到集合中的的元素的个数。

  2. SREM key-name [item...]

    删除多个元素到集合中,并且返回删除的元素的个数。

  3. SISMEMBER key-name item

    判断该元素是否存在于该集合中。

  4. SCARD key-name

    返回该集合的元素数量。

  5. SMEMBERS key-name

    返回该集合的所有元素。

  6. SRANDMEMBER key-name [count]

    随机的返回该集合的count个元素,如果count是正数的话,不会重复,但是是负数的话,则可能就会重复。

  7. SPOP key-name

    随机的弹出并且返回该值。

  8. SMOVE from-key-name to-key-name item

    将该元素从from移动到to中,成功则返回1,相反返回0。

  9. SDIFF key-name [key-name...]

    返回在第一个集合中存在,其它集合不存在的元素,即取差集。

  10. SDIFFSTORE dest-key key-name [key-name...]

    分成DIFF和STORE来看,也就是将DIFF的结果存储在dest-key中。

  11. SINTER key-name [key-name...]

    返回在所有集合中同时存在的元素,即取并集。

  12. SINTERSTORE dest-key key-name [key-name...]

    分成INTER和STORE来看,也就是将INTER的结果存储在dest-key中。

  13. SUNION key-name [key-name...]

    返回在所有集合中存在的元素,即取交集。

  14. SUNIONSTORE dest-key key-name [key-name...]

    分成UNION和STORE来看,也就是将UNION的结果存储在dest-key中。

有序集合

  1. ZADD key-name score member [score member...]

    将带有给定分值的成员加入到有序集合中。

  2. ZREM key-name member [member..]

    从有序集合里面移除给定的成员,并且返回。

  3. ZCARD key-name

    返回有序集合中元素的数量。

  4. ZINCRBY key-name increment member

    给成员加上increment。

  5. ZCOUNT key-name min max

    返回值介于min和max之间的成员数量。

  6. ZRANK key-name member

    返回成员的排名。

  7. ZSCORE key-name member

    返回成员的分值。

  8. ZRANGE key-name start stop [WITHSCORES]

    返回排名介于start到stop的成员,如果WITHSCORES为True的话,则分值也一起返回,如果stop为-1的话,则返回全部。

  9. ZREVRANK key-name member

    分成REV和RANK来看,REV:成员从小到大进行排列,RANK:返回具体的排名位置。

  10. ZREVRANGE key-name start stop [WITHSCORES]

    分成REV和RANGE来看,REV:成员从小到大进行排列,RANGE:返回具体的排名位置。

  11. ZRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]

    返回分值介于min到max之间到所有成员,可以指定返回从偏移量开始的count个成员。

  12. ZREVRANGEBYSCORE key-name max min [WITHSCORES] [LIMIT offset count]

    返回同上,不过是成员已经从大到小进行排列,注意这里是max-min。

  13. ZREMRANGEBYRANK key-name start stop

    将ZRANGEBYRANK返回的成员删除掉。

  14. ZREMRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]

    同样的道理,将ZRANGEBYSCORE返回的成员删除掉。

  15. ZINTERSTORE dest-key key-name [key-name...]

    和集合类似,分成INTER和STORE来看,也就是将INTER的结果存储在dest-key中。

  16. ZUNIONSTORE dest-key key-name [key-name...]

    和集合类似,分成UNION和STORE来看,也就是将UNION的结果存储在dest-key中。

散列

Hash,所以以H开头

  1. HMSET key-name key value [key value...]

    设置一个或者多个键值对。

  2. HMGET key-name key...

    可以获取多个键对应的值。

  3. HDEL key-name key...

    删除多个键值对,返回成功删除的数量。

  4. HLEN key-name

    返回键值对数量

  5. HEXIST key-name key

    判断该键值是否存在于散列中。

  6. HKEYS key-name

    获取散列所有的键。

  7. HVALS key-name

    获取散列所有的值。

  8. HGETALL key-name

    获取所有的键值对。

  9. HINCREBY key-name key increment

    将key保存的值加上increment。

  10. HINCREBYFLOAT key-name key increment

    将key保存的值加上浮点数increment。

时间: 2024-10-11 14:21:59

Redis基本数据结构总结的相关文章

Redis各种数据结构性能数据对比和性能优化实践

很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. Redis各种数据结构性能数据对比 测试工具:perf4j 性能指标:平均值,最小值,最大值,方差 对比将814条数据按单条插入到哈希MAP和哈希SET: 对比从814条数据的哈希MAP和哈希SET中判断一个元素是否存在(map的hasKey和set的isMember): 大量数据插入哈希MAP,运

2017-4-20/Redis的数据结构及应用场景

1. 谈谈你对redis的理解,它的应用场景. Redis是一个key-value存储系统,它支持存储的value类型包括string字符串.list链表.set集合.sorted Set有序集合和hash哈希等数据类型.这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,支持各种不同方式的排序.为了保证效率,Redis将数据都缓存在内存中,并周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,在此基础上实现master-

Redis基本数据结构总结之SET、ZSET和HASH

Redis基本数据结构总结 前言 Redis的特点在于其读写速度特别快,因为是存储在内存中的,其非常适合于处理大数据量的情况:还有一个是其不同于其他的关系型数据库,Redis是非关系型数据库,也就是我们常说的NoSQL,其并不需要一开始去创建好表结构,可以存储自定义的数据:还有Redis是分布式的,其可以主从分离,主从复制,比如说我们不可能只用一台Redis服务器来处理客户端的请求,因为这样毕竟是存在风险,如果服务器挂掉了,那么其数据就会丢失,而且无法找回,所以存在这么一种方案:多个主服务器用来

redis内部数据结构深入浅出

最大感受,无论从设计还是源码,Redis都尽量做到简单,其中运用到的原理也通俗易懂.特别是源码,简洁易读,真正做到clean and clear, 这篇文章以unstable分支的源码为基准,先从大体上整理Redis的对象类型以及底层编码. 当我们在本文中提到Redis的“数据结构”,可能是在两个不同的层面来讨论它. 第一个层面,是从使用者的角度,string,list,hash,set,sorted set 第二个层面,是从内部实现的角度,属于更底层的实现,   ht(dict),raw,em

Redis学习——数据结构介绍(四)

一.简介 作为一款key-value 的NoSQL数据库,Redis支持的数据结构比较丰富,有:String(字符串) .List(列表) .Set(集合) .Hash(哈希) .Zset(有序集合),相对于其他四种数据结构,Zset 是Redis独有的数据结构,作为有序的集合来使用还是十分方便的,下面我来介绍这集中数据结构: 数据类型 描述 set 无序.不重复的字符串集合 list 字符串链表 string 字符串.整型.浮点型 hash key和value都是无序的hashtable zs

Redis基本数据结构

Redis基本数据结构 Redis(REmote DIctionary Server)是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API Redis通常被称为数据结构服务器,因为值(value)可以使字符串(String),哈希(Map),列表(list),集合(Set),和有序集合(sorted sets)等类型 Redis 哈希(Hash) Redis Hash是一个string类型的field和va

redis 基础数据结构实现

参考文献 redis数据结构分析 Skip List(跳跃表)原理详解 redis 源码分析之内存布局 Redis 基础数据结构与对象 Redis设计与实现-第7章-压缩列表 在redis中构建了自己的底层数据结构:动态字符,双端链表,字典,压缩列表,整数集合和跳跃表等.通过这些数据结构,redis构造出字符串对象,列表对象,哈希对象,集合对象和有序集合对象这5种我们常用的数据结构.接下来将从底层数据结构开始,一步步介绍redis的数据结构的实现 动态字符串 在redis中并没有使用c语言原生的

细说Redis(一)之 Redis的数据结构与应用场景

原文:细说Redis(一)之 Redis的数据结构与应用场景 这一篇文章主要介绍Redis的数据结构与应用场景 NOSQL之Redis Redis是一款由key-value存储的软件.说起NOSQL,有文档型.键值型.列型存储.图形数据库.其中,在简单的读写性能来说,键值型是最快的. Redis作为目前市面上使用最多的键值型数据存储软件,内置了多种类型的数据结构,并且提供了高可用解决方案,使用方便快捷.市面上有很多语言的库可以调用Redis服务器. Redis的数据结构类型 Redis有很多种数

[转]Redis内部数据结构详解-sds

本文是<Redis内部数据结构详解>系列的第二篇,讲述Redis中使用最多的一个基础数据结构:sds. 不管在哪门编程语言当中,字符串都几乎是使用最多的数据结构.sds正是在Redis中被广泛使用的字符串结构,它的全称是Simple Dynamic String.与其它语言环境中出现的字符串相比,它具有如下显著的特点: 可动态扩展内存.sds表示的字符串其内容可以修改,也可以追加.在很多语言中字符串会分为mutable和immutable两种,显然sds属于mutable类型的. 二进制安全(

你真的懂了redis的数据结构吗?redis内部数据结构和外部数据结构揭秘

Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 很多人面试时都遇到过这种场景吧? 其实除了上面的几种常见数据结构,还需要加上数据结构HyperLogLog.Geo. 可是很多人不知道redis 不仅有上面的几种数据结构,还内藏了内部的数据结构.即redis可以分为外部数据结构和内部数据结构. 1. 如何查看redis的数据结构? ####1.1 如何查看redis的外部数据结构?可以使用type命令,返回key的类型,如str