辛星浅析Redis中的字符串类型

字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这就意味着该类型可以接受任何格式的数据,比如图像数据或者json对象等信息,在Redis中字符串类型的value最多可以容纳的数据长度为512M。

我们常用的命令如下:

(1)append  key   value   如果该key已经存在,那么append命令会将参数value的值追加到已经存在的value的末尾,如果该key不存在,那么该命令会创建一个新的空字符串,并且把value追加到其末尾。

(2)decr   key   将指定的key对应的value原子性的递减1.如果该key不存在,那么其初始值为0,在decr之后其值变成-1,。如果value的值不能转换为整型值,比如hello,该操作将执行失败并且返回错误信息。注意,该操作的取值范围是64位有符号整型。

(3)incr   key    将指定的key对应的value原子性的递增1.如果该key不存在,那么其初始值为0,在incr之后其值变成1,如果vlaue的值不能转换为整型值,比如hello,那么该操作会执行失败并且返回错误信息。注意,该操作的取值范围是64位有符号整型。

(4)decrby     key  decrement    将存储在key上的值减去由decrement指定的值,如果该key不存在,那么在进行操作前会将其设置为0,如果与key相关联的值具有错误的数据类型或者包含一个不能转换为整数的字符串时,该操作将会出现错误。该操作只针对64位有符号数。

(5)get   key   该操作获取存储在key上的值,如果key并不存在,那么将会返回nil。如果存储在key上的值的数据类型并非string,那么将会出现错误。因为get仅仅处理string类型的值。

(6)getbit   key  offset  它返回存储在key上的字符串在offset偏移处的所具有的位置,如果指定的偏移值超出了字符串的长度,后续字符串被视作由0填充的一片连续空间。如果指定的key不存在,那么将被视为一个空串,在这种情况下,偏移值会超出范围并且可以看做是由0填充的一片连续空间。

(7)getrange   key   start  end   它的时间复杂度为O(N),这里的N为需要返回的字符串的长度。时间复杂度由最终返回的长度决定,因为从已经存在的字符串中创建一个子串代价很低,可以认为对于较小的字符串而言时间复杂度为O(1)。需要注意的是:该命令在Redis2.0版本之前,被叫做substr。该命令返回在key上的字符串的特定子串,子串的范围由start和end两个偏移值指定,并且均包含端点。在该命令中可以指定负的偏移值,此时偏移值从字符串尾部开始计算。因此,-1意味着最后一个字符,-2意味着倒数第二个字符。如果指定的偏移值超出了字符串固有的长度,则命令将会限定结果的范围为字符串的真实长度。

(8)getset   key  value   它是原子性的将key上存储的值设置为value,并且返回原有的值。如果key存在但是所存储的值并不是字符串类型,那么将会返回错误。

(9)incrby   key   increment    它对存储在key上的值加上increment指定的值,如果该key不存在,在执行操作之前会现将其设置为0,然后再执行操作。如果存储在该key上的值具有错误的数据类型或者包含一个不能转换为整型的字符串值,那么将会返回一个错误,该操作只能针对64位有符号整数。

(10)mget   key1  key2 ....     该操作返回存储在指定keys上面的值。对于每一个其值的数据类型不是字符串类型或者不存在的key,返回值将会成为nil。因此该操作并不会出现失败的情况。

(11)mset   key1   value1   key2  value2 .....  该操作对指定的keys设置相应的值。与set命令一样,mset将会使用新值替代原有的值,mset操作是原子性的,因此所有指定的keys将会在一次操作过程中设置完成。返回值总是OK,因为该操作不会失败。

(12)msetnx    key1  value1  key2  value2 ....   它是将给定的keys设置为相应的值,如果指定的keys中任何一个已经存在,那么该操作将不会被执行。因此,msetnx可以用来对唯一的逻辑对象中的表示不同字段的keys设置其值,一遍能够确保这些字段要么全部被设置成功要么均不会设置。msetnx操作是原子性的,因此所有的keys将会在一次操作过程中被设置。如果所有的keys值均被设置,那么返回值为1.如果没有key被设置其值,那么返回值为0.

(13)set   key  value    它是对指定的key设置一个字符串值,如果该key已经具有值,那么该值将会重写而不管它的数据类型。返回值总是OK,因为set操作不会失败。

(14)setbit   key  offset   value    它设置或者清除存储在key上的字符串在指定偏移处的位置。命令中的value可以指定为0或者1,根据value的不同,位置可以被设置或者被清除。当该key不存在时,将会创建一个新的字符串的值。字符串的长度可以增长一遍能够包含offset偏移处的值。命令中的offset的值需要大于或者等于0,但是需要小于232。这会将位图的大小限定在512MB以内。当存储在该key上的字符串被扩展时,增加的位将会被设置为0.需要注意的是,当设置最后一个可能的位,偏移值等于231,并且存储在该key上的字符串还没包含字符串值或者包含长度较小的字符串值时,Redis需要重新分配中间内存,这可能会阻塞服务器一段时间。一旦第一次分配空间分配完成后,对相同key后续的setbit调用将不再有空间分配的开销。

(15)setex   key   seconds   value   该操作设置key上存储的值为value,并且该key在给定的seconds秒后自动超时。该命令等价于set    mykey   value    expire    mykey   seconds。其中setex操作是原子性的,并且可以使用位于multi/exec块中的上述两条命令来取代。该命令提供了对指定操作序列中的一种替代方式,该操作在Redis用作缓存时非常普遍。

(16)setnx   key  value     如果指定的key不存在,那么将其设置为一个字符串。在这种情况下,该命令等同于set。当在key上已经存储有值时,将不进行任何操作。setnx中可以看做是set   if  not   exists的缩写。

(17)setrange    key  offset  value     它是存储在key上的字符串被重写的部分从指定的offset位置开始,长度与value所具有的长度相同。如果offset大于当前字符串的长度,字符串会使用0来补充以便适应指定的offset。如果指定的key不存在,那么存储在其上的值会被认为是空格,因此该命令将确保该key会持有一个足够打的字符串以便能够设置其在offset偏移处的值。不过需要注意的是,我们可以设置的最大偏移值为229-1,因为Redis字符串的大小被限定在512MB以内。

(18)strlen  key   表示返回存储在key上的字符串的长度。如果在该key上存储的值不是字符串类型,那么将返回一个错误。如果该key不存在,那么返回值为0.

时间: 2024-10-27 06:07:13

辛星浅析Redis中的字符串类型的相关文章

辛星浅析Redis中与key有关的命令

在Redis中,我们还可以直接对key直接操作,下面是我们常用的主要命令: (1)keypattern   它表示获取所有匹配pattern的keys,这里需要注意的是,我们应该避免使用该命令,因为对于大型数据库而言,该命令非常耗时,对Redis服务器的性能打击也是比较大的.它支持glob-style的通配符格式,比如用*表示任意一个或者多个字符,用?表示任意字符,用[xyz]表示方括号中的任意一个字母. (2)del   key ....   它是从数据库中删除参数中指定的keys,如果指定的

辛星浅析Redis中的有序集合

Redis中的有序集合也就是sorted-set,它和set很相似,都是字符串的集合,都不允许重复的成员出现在一个集合张.有序集合与集合的主要差别是有序集合中的每一个元素都有一个序号与其相连,这个序号即score,Redis通过这个序号来为集合中的成员进行从小到大的排列.需要特别说明的是,尽管有序集合的元素值是唯一的,但是该value对应的score却可以是多个.在有序集合中添加.删除.更新一个成员的操作都很快,其时间复杂度是集合中成员的对数. 因为有序集合中的成员在集合中的位置是有序的,即便是

辛星浅析Redis中的pub/sub功能

pub/sub功能也就是publish/subscribe功能,也就是发布订阅功能.基于事件的系统中,pub/sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者比如客户端以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件,发布者比如服务器可以将订阅者兴趣的事件随时通知相关订阅者. pub/sub功能可以有三个非耦合: (1)时间非耦合,也就是发布者和订阅者不必同时在线,它们不必同时参与交互. (2)空间非耦合,也就是发布者和订阅者不

辛星浅析Redis中的服务器管理

Redis在设计之初就被定义为可以长时间不间断运行的服务进程,因此大多数系统配置参数都可以在不重新启动的情况下立即生效.即便是当前的持久化模式从AOF切换到RDB也无需重启.在Redis中,我们还有一些和服务器管理相关的命令,我们介绍如下: (1)config    get   parameter    主要用于读取服务器的运行时参数,但是并不是所有的配置参数都可以通过该命令进行读取.其中该命令的参数接受glob风格的模式匹配规则,因此如果参数中包含模式元字符,那么所有匹配的参数都将以key/v

辛星浅析Redis中的配置文件

Redis中的主要配置项如下: (1)daemonize  yes     它表示是否在后台运行,如果写成yes,那么在后台运行,如果是no,则表示不在后台运行. (2)pidfile  /var/run/redis.pid 当Redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,我们也可以在运行多个Redis服务时,指定不同的pid文件和端口 (3)port    6379    指定Redis运行的端口,默认是6379 (4)127.0.0.1  

辛星浅析Redis中的主从复制

首先简单介绍下Redis中的复制: (1)同一个master可以同步多个slave. (2)slave同样可以接受其他slaves的连接和同步请求,这样可以有效的分担master的同步压力. (3)master  server是以非阻塞的方式为slaves提供服务的,所以在master-slave同步期间,客户端仍然可以提交查询或修改请求. (4)slave   server同样是以非阻塞的方式完成数据同步.在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据. (5)为了分担m

辛星浅析postgresql中的全文索引(上)

全文搜索通常也就是文本搜索,它可以提供满足查询的识别自然语言的能力,并且任意性地通过相关性查询进行排序.搜索最常见的类型就是找到所有包含给定的查询术语的记录,并且以相似性的查询顺序返回它们. 对于~.~*.like和ilike操作符来说,它们缺少很多特性:①对语言支持较弱,比如不能识别单词的复数形式.②没有有效的分类和排序手段 . ③执行速度缓慢,通常就是因为无法有效的使用索引. 全文索引允许文档被预处理,并且它可以为后边的快速搜索保存一个索引.预处理做的工作主要有:①解析文档标记.比如它可以标

辛星浅析linux中常用的日志文件

日志对于系统的安全来说非常重要,它记录了系统每天发生的各种各样的事情,用户可以通过它来检查错误发生的原因,或者寻找受攻击时攻击者留下的痕迹.日志的主要功能就是审计和检测.它还可以实时地检测系统的状态.检测和追踪侵入者. 通常日志根据类型可以分为连接时间日志.进程统计日志和错误日志.连接时间日志由多个程序执行,它把记录写到/var/log/wtmp和/var/run/utmp当中,而login程序负责更新wtmp和utmp文件,使得系统管理员能够够跟踪谁在何时登录了系统.对于进程统计日志由内核执行

辛星浅析网站中的sitemap

所谓sitemap,通俗来说就是"网站地图",sitemap文件主要包含了网站中的有效连接,它会便于搜索引擎的抓取和收录,如果没有sitemap文件,蜘蛛就需要一个一个的通过我们网站中的超链接来进行抓取.有了sitemap之后,搜索引擎直接读取该文件就可以了,它可以让搜索引擎抓取我们的网页更加有效. 最通用的也是最简单的sitemap形式的文件,就是xml文件,我们在其中列出网站中的网址,以及关于每个网址的一些元数据.这些元数据通常是上次更新的时间.更新的频率.重要程度等等,它可以让搜