Redis数据的类型

Redis一共分为五种基本数据类型:String、Hash、List、Set、Zset.

string

  • 内部编码有三种,raw,embstr,int  
  • String 是二进制的。可以存储序列化对象,图片,字符串,数值等  
  • set和get方法 :设置值 set key value;取值 get key ;删除值 del key  
  • setnx(not exists):name 如果不存在进行设置,存在就不需要进行设置了,返回0  
  • setex(expired)/psetex(毫秒单位)  :set key 10 value 设置key有效期为10秒,10秒后返回nil  
  • setrange  :setrange key index value (index 表示从第几位开始替换)
  • 使用一次性设置多个和获取多个值的mset、mget方法:mset key1 value1 key2 value2 key3 value3 ;mget key1 key2 key3 ;msetnx
  • 一次性设置和取值的getset方法 :set key value ;getset key value1,这个getset key value1返回的是value,使用get vakue得到value1的值
  • incr和decr方法:对某一个值进行递增和递减
  • incrby和decrby方法:对某个值进行指定长度的递增和递减
  • append [name]方法:字符串追加方法
  • strlen [name]方法:获取字符串的长度

HASH

  • Hash类型是String类型的field和value的映射表,或者说一个String集合。它的特别适合存储对象,相比较而言,将一个对象类型存储在Hash类型里要比存储在String类型里占用更少的内存空间,并方便存取整个对象。
  • 形如:hset key field value(含义是 hset是hash集合, key是集合名字 field是字段名 value为其值)使用hget  key field 获取内容,也可以存储多个值
  • hmset可以进行批量存储多个键值对:hmset key field1 value1 field2 value2,也可使用hmget进行批量获取多个键值对。
  • 同样也有hsetnx,和setnx大同小异,不存在则赋值,存在不修改
  • hincrby集合递增。
  • hexists 是否存在key 如果存在返回,不存在返回0
  • hlen 返回hash集合里的所有的键数值
  • hdel 删除指定hash的field
  • hkeys 返回hash里所有的字段
  • hvals 返回hash的所有value
  • hgetall 返回hash里所有的key和value

LIST

  • List类型是一个链表结构的集合,其主要功能有push、pop、获取元素等。更详细的说,List类型是一个双向链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,list的设计非常简单精巧,即可以做为栈,又可以作为队列
  • lpush方法: 从头部加入元素(栈) 先进后出: lpush key1 value ;lrange list1 0 -1表示从头取到末尾
  • rpush方法:从尾部加入元素(队列) 先进先出: rpush key2  value rpush list2  value2 lrange key2 0 -1
  • linsert方法:插入元素 Linsert keys before [element] [newelement]
  • LSET key index value 设置 index 位置的list元素的值为 value
  • LREM key count value 从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影响这个操作
  • count > 0: 从头往尾移除值为 value 的元素
  • count < 0: 从尾往头移除值为 value 的元素
  • count = 0: 移除所有值为 value 的元素
  • LTRIM key start stop 修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。start 和 stop 都是由0开始计数的, 这里的 0 是列表里的第一个元素(表头),1 是第二个元素,以此类推。
  • LPOP key 移除并且返回 key 对应的 list 的第一个元素
  • RPOP key 移除并返回存于 key 的 list 的最后一个元素
  • RPOPLPUSH source destination 原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素), 并把该元素放入存储在 destination 的列表的第一个元素位置(列表头部)
  • LINDEX key index 返回名称为key的list中 index位置的元素
  • LLEN key 返回存储在 key 里的list的长度

SET

  • set集合是string类型的无序集合 ,set是通过intset或者hashtable实现的,对集合我们可以取交集、并集、差集
  • 内部编码有 intset(元素类型是int类型的且元素的个数小于512字节)和hashtable(元素中有非int类型或者个数大于512字节)
  • SADD key member [member ...] 添加一个或多个指定的member元素到集合的 key中, set集合不允许重复元素 smembers查看set集合的元素
  • SREM key member [member ...] 在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0
  • SPOP key [count]随机返回删除的key
  • SDIFF key [key ...] 返回一个集合与给定集合的差集的元素.
  • SDIFFSTORE destination key [key ...] 该命令类似于 SDIFF, 不同之处在于该命令不返回结果集,而是将结果存放在destination集合中.如果destination已经存在, 则将其覆盖重写
  • SINTER key [key ...] 返回指定所有的集合的成员的交集.
  • SINTERSTORE destination key [key ...] 这个命令与SINTER命令类似, 但是它并不是直接返回结果集,而是将结果保存在 destination集合中.
  • SUNION key [key ...] 返回给定的多个集合的并集中的所有成员.
  • SUNIONSTORE destination key [key ...] 该命令作用类似于SUNION命令,不同的是它并不返回结果集,而是将结果存储在destination集合中.
  • SMOVE source destination member 将member从source集合移动到destination集合中. 对于其他的客户端,在特定的时间元素将会作为source或者destination集合的成员出现
  • SCARD key 集合元素的数量,SRANDMEMBER key [count]随机返回一元素
  • SISMEMBER key member 返回成员 member 是否是存储的集合 key的成员
  • 有序集合有两种内部编码方式:ziplist和skiplist

ZSET

  • 元素个数小于128且元素值小于64使用ziplist编码,否则使用skiplist编码
  • ZADD key [NX|XX] [CH] [INCR] score member [score member ...] 将所有指定成员添加到键为key有序集合(sorted set)里面。 添加时可以指定多个分数/成员(score/member)对。 如果指定添加的成员已经是有序集合里面的成员,则会更新改成员的分数(scrore)并更新到正确的排序位置.
  • XX: 仅仅更新存在的成员,不添加新成员。
  • NX: 不更新存在的成员。只添加新成员
  • CH: 修改返回值为发生变化的成员总数,原始是返回新添加成员的总数
  • INCR: 当ZADD指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作
  • ZREM key member [member ...]删除名称为key的zset中的元素member
  • ZINCRBY key increment member 为有序集key的成员member的score值加上增量increment
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序
  •  ZREMRANGEBYRANK key start stop 移除有序集key中,指定排名(rank)区间内的所有成员。下标参数start和stop都以0为底,0处是分数最小的那个元素
  • ZRANK key member 返回有序集key中成员member的排名,从小到大。
  • ZREVRANK key member 返回有序集key中成员member的排名,其中有序集成员按score值从大到小排列。
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 找到指定区间范围的数据进行返回
  • COUNT key min max 返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员个数。

查看

  • 如果使用set test1 value1进行设置,使用命令object encoding test1查看编码方式
  • 字符串39位数以内使用embstr编码,39位以上使用raw编码
  • list编码方式最新的只有quicklist,原先的ziplist和linkedlist已经取消

RedisObject实例讲解

 

  • 数据类型,参考上图的数据结构
  • 编码方式,参考上图的内部编码
  • 数据指针,key对应的数据存在哪个SDS对象中
  • SDS包含三部分,len表示数据的长度,free表示空闲空间,buffer存储数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis高级命令与特性以及单点模式的介绍

高级命令 keys * 返回满足条件的所有key&#xff0c;可以模糊匹配exists 是否存在指定的keypersist 取消过期时间select 选择数据库 &#xff08;0-15&#xff0c;总共16个数据库&#xff09;move key index 将当前数据库的 key 移动到给定的数据库 db 当中randomkey 随机返回…

华为副总裁徐家骏离职:年薪千万工作感悟十二条

从普通的公司职员&#xff0c;到年薪千万的华为副总裁&#xff0c;再到离开华为转战百度&#xff0c;徐家骏的十年从业经历和经验可资借鉴&#xff0c;我们从中也可以一窥华为的运作过程。徐家骏是华为数据中心的头&#xff0c;技术超级牛人&#xff0c;一级部门总监&#xff0…

Redis持久化之RDB和AOF

Redis持久化之RDB和AOF Redis 有两种持久化方案&#xff0c;RDB &#xff08;Redis DataBase&#xff09;和 AOF &#xff08;Append Only File&#xff09;&#xff1b; RDB 详解 RDB 是 Redis 默认的持久化方案。在指定的时间间隔内&#xff0c;执行指定次数的写操作&#…

同为程序员 为什么我的工资最低

我看着工资单上每一个开发团队成员的薪水&#xff0c;慢慢地我不能保持淡定了。 而当我看到我的工资排名是倒数的时候——靠近最后一名——我不由得倒抽一口冷气。就像圣诞故事中的那个可爱的小男孩Ralphie &#xff0c;想买气枪却被忽悠会有危险一样&#xff0c;我也不断忽悠…

Docker安装Redis以及配置Redis环境

1&#xff0c;下载Redis镜像 首先拉取 Redis 镜像, 这里我选择的是 redis:alpine 轻量级镜像版本 docker pull redis:alpine 下载完成后&#xff0c;通过 docker images 查看我们已经下载的镜像&#xff0c;看看是否已经下载到本地 2&#xff0c;运行 Redis 容器 docker run …

.NET程序性能的基本要领

摘要&#xff1a;本文分享了性能优化的一些建议和思考&#xff0c;比如不要过早优化、好工具很重要、性能的关键&#xff0c;在于内存分配等。开发者不要盲目的没有根据的优化&#xff0c;首先定位和查找到造成产生性能问题的原因点最重要。 【编者按】Bill Chiles&#xff08…

redis.conf配置文件详解

基本配置 daemonize no #是否以后台进程启动databases 16 #创建database的数量(默认选中的是database 0)save 900 1 #刷新快照到硬盘中&#xff0c;必须满足两者要求才会触发&#xff0c;即900秒之后至少1个关键字发生变化save 300 10 #必须是300秒之后至少10个关键字发生变…

什么原因成就了一位优秀的程序员?

这些年我曾和很多程序员一起工作&#xff0c;他们之中的一些人非常厉害&#xff0c;而另一些人显得平庸。不久前因为和一些技术非常熟练的程序员工作感觉很愉快&#xff0c;我花了一些时间在考虑我佩服他们什么呢&#xff1f;什么原因让优秀的程序员那么优秀&#xff0c;糟糕的…

Redis的哨兵模式Sentinel

sentinel功能 redis的sentinel系统用于管理多个redis服务器&#xff0c;该系统主要执行三个任务&#xff1a;监控、提醒、自动故障转移。 1、监控&#xff08;Monitoring&#xff09;&#xff1a; Redis Sentinel实时监控主服务器和从服务器运行状态&#xff0c;并且实现自动…

csdn 到底怎么了?不准转载?

我转载了20多文章&#xff0c;很多人阅读过&#xff0c;但是今天看到阅读量是0&#xff0c; csdn 到底怎么了&#xff1f; 对用户这样&#xff1f;请大家看看是不是这样&#xff1f;

python3之后版本读取网页的内容

import urllib.request url "http://helloworldbook2.com/data/message.txt" #直接通过url来获取网页数据 print(第一种) response urllib.request.urlopen(url) code response.getcode() html response.read() mystr html.decode("utf8") response.c…

三十功名尘与土——资深程序员生涯自白

摘要&#xff1a;作者Codist&#xff08;网名&#xff09;在程序员岗位上工作了三十多年&#xff0c;在这期间他悟出了一些真理&#xff0c;比如&#xff0c;成功来自对失败的总结学习&#xff1b;条条大路通罗马&#xff0c;罗马并不在乎你用什么方式到达。你在生活中积累了哪…

linux/unix核心设计思想

1&#xff09; 程序应该小而专一&#xff0c;程序应该尽量的小&#xff0c;且只专注于一件事上&#xff0c;不要开发那些看起来有用但是90%的情况都用不到的特性&#xff1b; 2&#xff09; 程序不只要考虑性能&#xff0c; 程序的可移植性更重要&#xff0c;shell和perl&…

操作系统环境变量

在 Java中&#xff0c;许多类都是 Iterable &#xff0c;主要包括所有的 Collection 类&#xff08;但不包括各种 Maps &#xff09;。 例如&#xff0c;下面的代码可以显示所有的操作系统环境变量&#xff1a; // collections/EnvironmentVariables.java // {VisuallyInspect…

用Unix的设计思想来应对多变的需求

摘要&#xff1a;无论是Unix设计&#xff0c;还是面向对象设计&#xff0c;还是别的什么如SOA&#xff0c;ECB&#xff0c;消息&#xff0c;事件&#xff0c;MVC&#xff0c;网络七层模型&#xff0c;数据库设计&#xff0c;等等&#xff0c;他们都在干三件事——解耦&#xff…

学习较底层编程:动手写一个C语言编译器

动手编写一个编译器&#xff0c;学习一下较为底层的编程方式&#xff0c;是一种学习计算机到底是如何工作的非常有效方法。 编译器通常被看作是十分复杂的工程。事实上&#xff0c;编写一个产品级的编译器也确实是一个庞大的任务。但是写一个小巧可用的编译器却不是这么困难。…

Arrays.deepToString() 方法同时适用于基元数组和对象数组

Arrays.deepToString() 方法同时适用于基元数组和对象数组&#xff1a; import java.util.*;public class MultiDimWrapperArray {public static void main(String[] args) {Integer[][] a1 { // Autoboxing{ 1, 2, 3, },{ 4, 5, 6, },};Double[][][] a2 { // Autoboxing{ {…

高效程序员的7个共同特征

要想成为高效的程序员&#xff0c;你需要具备一定的综合素质才能够让你用你所掌握的技能、经验和知识编写出有效的代码。有一些开发人员在技术方面具备一定的技巧&#xff0c;但他们永远无法成为高效的程序员&#xff0c;就是因为他们缺乏所需的其它几项特质。本文将给出成为一…

java.util.Array中的方法

概述 asList(): 获取任何序列或数组&#xff0c;并将其转换为一个 列表集合 &#xff08;集合章节介绍了此方法&#xff09;。 copyOf()&#xff1a;以新的长度创建现有数组的新副本。 copyOfRange()&#xff1a;创建现有数组的一部分的新副本。 equals()&#xff1a;比较两…

有关编程的12个猜想

摘要&#xff1a;编程世界的将来如何目前仍难预料&#xff0c;但可以肯定的一点是技术一直在加速发展。本文搜罗出12个独特的编程视角猜想&#xff0c;一起来看看有哪些猜想在不久的将来就能变为现实。 编程世界的将来如何目前仍难预料&#xff0c;但可以肯定的一点是技术一直…