设为首页 收藏本站
查看: 709|回复: 0

[经验分享] Redis基本数据结构总结

[复制链接]

尚未签到

发表于 2018-11-3 13:17:40 | 显示全部楼层 |阅读模式
  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

  •   DEL key
      移除给定的一个或者多个key。
  •   KEYS pattern
      查找符合给定模式的key,注意其匹配的模式怎么使用,包括了?、*、[]等等。
  •   RANDOMKEY
      从当前数据库中随机返回一个key。
  •   EXPIRE key seconds
      为给定的key设置存活时间,时间一过则把对应的key进行销毁,注意单位为秒。
  •   TTL key
      获取key剩余的存活时间,单位为秒,和上面的命令相对应,如果该key不存在或者是过期的话,则返回-2/-1(在不同数据库返回的值不一样?)。
  •   MOVE key db
      将key移动到指定的db,默认情况下使用的是0号数据库,注意要移动到相应的数据库(SELECT db)才能看到。
  •   RENAME key newkey
      将key更改为新的key,注意如果newkey在数据库中已经存在,那么旧的key的数据会把已经存在的新的key给覆盖掉。
  •   TYPE key
      返回指定的key的类型,如果不存在则返回的是none,而不是nil(进行操作才返回的)。
  •   OBJECT REFCOUNT key | OBJECT ENCODING key | OBJECT> key
      分别返回key所引用的次数,key对应的编码,key空闲的时间(没有读也没有写,单位为秒)。
  •   RENAMENX key newkey
      在RENMAE的基础上判断key是否存在,更加的安全。
  •   EXPIREAT key timestamp
      设置时间戳。
  •   PERSIST key
      移除给定key的生存时间,也可以使用EXPIRE 来重置。
  •   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

  •   GET key
      获取存储在给定键的值。
  •   MGET key...
      获取多个指定的键值。
  •   GETRANGE key start end
      获取指定范围的键值,支持反向操作,如果end超出实际范围,则忽略,返回全值。
  •   GETSET key value
      集合了GET和SET的功能,不过其返回的是该键被设置之前的值,但是其的值已经发生了改变 ,注意如果之前没有该键,则返回nil。
  •   SET key value
      设置存储在给定键中的值。
  •   SETNX key value
      注意在key已经存在的情况下,不进行任何操作,也就是说 SET if key not exist;可能存在一个锁的问题。
  •   SETEX key seconds value
      集合了SET和EXPIRE的功能,如果key存在,则覆盖掉。
  •   SETRANGE key offset value
      从偏移量开始设置,注意的是当这个value不足以把之前的value给覆盖掉时,那么仍然会显示之前没有被覆盖掉的值。这里返回的是字符串总的长度。如果空白字符串不存在的话,则相当于在空白字符串上进行操作。
  •   MSET key value ...
      可以同时设置多个键值对,如果不像覆盖掉key的话,可以使用MSETNX。
  •   MSETNX key value...
      和SETNX的作用是一样的,这里只有全部key都设置成功,才能返回1,只要有一个key已经存在,就会返回0。
  •   APPEND key value
      追加字符串值,返回新字符串长度,可以添加空字符串,返回的是原来的长度。
  •   STRLEN key
      返回字符串长度。
  •   DECR key
      将key的值减一,如果不存在key,则会先进行SET,并且将该键值初始化为0。该命令只能使用在数字上面。
  •   DECRBY key decrement
      在上面的基础之上减去指定的值。
  •   INCR keyINCRBY key increment
      同DECR和DECRBY
  •   SETBIT key offset set_or_clean
      将字符串看作是二进制,并且将字符串指定偏移量的二进制位设置为指定值,可以是set或者clean。同样的,如果key不存在,则帮其进行设置。
  •   GETBIT key offset
      把字符串看作是二进制串,并且返回二进制串中指定偏移量的二进制位的值。
LIST
  在LIST中,不需要进行相应的SET操作,如果其不存在,其会自动创建,并且初始化为空列表。

  •   LPUSH key value...
      把多个键值加入到列表key的表头中,返回列表的长度。
  •   LPUSHX key value...
      在上面的基础之上,如果key不存在,则不进行任何操作,即 LPUSH if key exists。
  •   RPUSH key value
      插入到表尾。
  •   RPUSHX key value
      类似LPUSHX。
  •   LPOP key
      移出并且返回头元素。
  •   RPOP key
      移出并且返回尾元素。
  •   BLPOP key... timeout
      相当于LPOP的阻塞版本,如果其列表没有元素的时候,则会一直阻塞到列表中存在值并且进行LPOP操作,我们还可以设置超时时间,如果是0的话,则表明其可以阻塞到无限时间长。
  •   BRPOP key... timeout
      参照BLPOP。
  •   LLEN key
      返回列表的长度。
  •   LRANGE key start stop
      返回只等区间长度的元素,注意stop要大于start,否则返回一个空列表。
  •   LREM key count value
      删除列表中和value相等的元素。这个取决于count的值,如果为正数,正向搜索删除,如果为负数,反向搜索删除,如果等于0,则全部删除;返回被删除的个数。
  •   LSET key index value
      设置指定下标的值为新的value。
  •   LTRIM key start stop
      将指定返回值保留下来,其余均删除。
  •   LINDEX key index
      返回指定下标index的值。
  •   LINSERT key BEFORE|AFTER privot value
      将key添加到privot之前或者之后,如果privot不存在或者列表为空,则不进行任何操作。如果成功则返回列表长度。
  •   RPOPLPUSH source destination
      将source中的尾元素弹出并且插到destination列表的头元素的位置上,可以简单的理解为其进行了插队的操作;如果destination不存在则默认设置为空列表,但是如果source不存在则不进行任何的操作。
  •   BROPLPUSH source destination timeout
      上面版本的阻塞版本,如果timeout为0,则可以无限期阻塞。
SET

  •   SADD key-name [item...]
      添加多个元素到集合中,并且返回添加到集合中的的元素的个数。
  •   SREM key-name [item...]
      删除多个元素到集合中,并且返回删除的元素的个数。
  •   SISMEMBER key-name item
      判断该元素是否存在于该集合中。
  •   SCARD key-name
      返回该集合的元素数量。
  •   SMEMBERS key-name
      返回该集合的所有元素。
  •   SRANDMEMBER key-name [count]
      随机的返回该集合的count个元素,如果count是正数的话,不会重复,但是是负数的话,则可能就会重复。
  •   SPOP key-name
      随机的弹出并且返回该值。
  •   SMOVE from-key-name to-key-name item
      将该元素从from移动到to中,成功则返回1,相反返回0。
  •   SDIFF key-name [key-name...]
      返回在第一个集合中存在,其它集合不存在的元素,即取差集。
  •   SDIFFSTORE dest-key key-name [key-name...]
      分成DIFF和STORE来看,也就是将DIFF的结果存储在dest-key中。
  •   SINTER key-name [key-name...]
      返回在所有集合中同时存在的元素,即取并集。
  •   SINTERSTORE dest-key key-name [key-name...]
      分成INTER和STORE来看,也就是将INTER的结果存储在dest-key中。
  •   SUNION key-name [key-name...]
      返回在所有集合中存在的元素,即取交集。
  •   SUNIONSTORE dest-key key-name [key-name...]
      分成UNION和STORE来看,也就是将UNION的结果存储在dest-key中。
有序集合

  •   ZADD key-name score member [score member...]
      将带有给定分值的成员加入到有序集合中。
  •   ZREM key-name member [member..]
      从有序集合里面移除给定的成员,并且返回。
  •   ZCARD key-name
      返回有序集合中元素的数量。
  •   ZINCRBY key-name increment member
      给成员加上increment。
  •   ZCOUNT key-name min max
      返回值介于min和max之间的成员数量。
  •   ZRANK key-name member
      返回成员的排名。
  •   ZSCORE key-name member
      返回成员的分值。
  •   ZRANGE key-name start stop [WITHSCORES]
      返回排名介于start到stop的成员,如果WITHSCORES为True的话,则分值也一起返回,如果stop为-1的话,则返回全部。
  •   ZREVRANK key-name member
      分成REV和RANK来看,REV:成员从小到大进行排列,RANK:返回具体的排名位置。
  •   ZREVRANGE key-name start stop [WITHSCORES]
      分成REV和RANGE来看,REV:成员从小到大进行排列,RANGE:返回具体的排名位置。
  •   ZRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]
      返回分值介于min到max之间到所有成员,可以指定返回从偏移量开始的count个成员。
  •   ZREVRANGEBYSCORE key-name max min [WITHSCORES] [LIMIT offset count]
      返回同上,不过是成员已经从大到小进行排列,注意这里是max-min。
  •   ZREMRANGEBYRANK key-name start stop
      将ZRANGEBYRANK返回的成员删除掉。
  •   ZREMRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]
      同样的道理,将ZRANGEBYSCORE返回的成员删除掉。
  •   ZINTERSTORE dest-key key-name [key-name...]
      和集合类似,分成INTER和STORE来看,也就是将INTER的结果存储在dest-key中。
  •   ZUNIONSTORE dest-key key-name [key-name...]
      和集合类似,分成UNION和STORE来看,也就是将UNION的结果存储在dest-key中。
散列
  Hash,所以以H开头

  •   HMSET key-name key value [key value...]
      设置一个或者多个键值对。
  •   HMGET key-name key...
      可以获取多个键对应的值。
  •   HDEL key-name key...
      删除多个键值对,返回成功删除的数量。
  •   HLEN key-name
      返回键值对数量
  •   HEXIST key-name key
      判断该键值是否存在于散列中。
  •   HKEYS key-name
      获取散列所有的键。
  •   HVALS key-name
      获取散列所有的值。
  •   HGETALL key-name
      获取所有的键值对。
  •   HINCREBY key-name key increment
      将key保存的值加上increment。
  •   HINCREBYFLOAT key-name key increment
      将key保存的值加上浮点数increment。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-630271-1-1.html 上篇帖子: redis3.2.8 设置开机自启动 下篇帖子: Linux,maven,redis,android,java,yum,ant部署相关命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表