Redis常用操作-----字符串
1.APPEND key value
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
- 可用版本:
- >= 2.0.0
- 时间复杂度:
- 平摊O(1)
- 返回值:
- 追加 value 之后, key 中字符串的长度。
2.DECR key
将 key 中储存的数字值减一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
关于递增(increment) / 递减(decrement)操作的更多信息,请参见 INCR 命令。
- 可用版本:
- >= 1.0.0
- 时间复杂度:
- O(1)
- 返回值:
- 执行 DECR 命令之后 key 的值。
3.DECRBY key decrement
将 key 所储存的值减去减量 decrement 。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
关于更多递增(increment) / 递减(decrement)操作的更多信息,请参见 INCR 命令。
- 可用版本:
- >= 1.0.0
- 时间复杂度:
- O(1)
- 返回值:
- 减去 decrement 之后, key 的值。
127.0.0.1:> incrby gender // 注意顺序
(error) ERR value is not an integer or out of range
127.0.0.1:> decrby gender
(integer) -
127.0.0.1:> decr name
(error) ERR value is not an integer or out of range
127.0.0.1:> incrby gender
(integer)
4.GET key
返回 key 所关联的字符串值。
如果 key 不存在那么返回特殊值 nil 。
假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值。
- 可用版本:
- >= 1.0.0
- 时间复杂度:
- O(1)
- 返回值:
-
当 key 不存在时,返回 nil ,否则,返回 key 的值。如果 key 不是字符串类型,那么返回一个错误。
127.0.0.1:> hmset user name zdx
OK
127.0.0.1:> hmget user name
) "zdx"
127.0.0.1:> get user
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:> get email
(nil)
5.GETRANGE key start end
返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推。
GETRANGE 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
在 <= 2.0 的版本里,GETRANGE 被叫作 SUBSTR。
- 可用版本:
- >= 2.4.0
- 时间复杂度:
-
O(N), N 为要返回的字符串的长度。复杂度最终由字符串的返回值长度决定,但因为从已有字符串中取出子字符串的操作非常廉价(cheap),所以对于长度不大的字符串,该操作的复杂度也可看作O(1)。
- 返回值:
- 截取得出的子字符串。
6.GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
当 key 存在但不是字符串类型时,返回一个错误。
- 可用版本:
- >= 1.0.0
- 时间复杂度:
- O(1)
- 返回值:
-
返回给定 key 的旧值。当 key 没有旧值时,也即是, key 不存在时,返回 nil 。
7.INCR key
将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
这是一个针对字符串的操作,因为 Redis 没有专用的整数类型,所以 key 内储存的字符串被解释为十进制 64 位有符号整数来执行 INCR 操作。
- 可用版本:
- >= 1.0.0
- 时间复杂度:
- O(1)
- 返回值:
- 执行 INCR 命令之后 key 的值。
8.INCRBY key increment
将 key 所储存的值加上增量 increment 。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
关于递增(increment) / 递减(decrement)操作的更多信息,参见 INCR 命令。
- 可用版本:
- >= 1.0.0
- 时间复杂度:
- O(1)
- 返回值:
- 加上 increment 之后, key 的值。
9.INCRBYFLOAT key increment
为 key 中所储存的值加上浮点数增量 increment 。
如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。
如果命令执行成功,那么 key 的值会被更新为(执行加法之后的)新值,并且新值会以字符串的形式返回给调用者。
无论是 key 的值,还是增量 increment ,都可以使用像 2.0e7 、 3e5 、 90e-2 那样的指数符号(exponential notation)来表示,但是,执行 INCRBYFLOAT 命令之后的值总是以同样的形式储存,也即是,它们总是由一个数字,一个(可选的)小数点和一个任意位的小数部分组成(比如 3.14 、 69.768 ,诸如此类),小数部分尾随的 0 会被移除,如果有需要的话,还会将浮点数改为整数(比如 3.0 会被保存成 3 )。
除此之外,无论加法计算所得的浮点数的实际精度有多长, INCRBYFLOAT 的计算结果也最多只能表示小数点的后十七位。
当以下任意一个条件发生时,返回一个错误:
- key 的值不是字符串类型(因为 Redis 中的数字和浮点数都以字符串的形式保存,所以它们都属于字符串类型)
- key 当前的值或者给定的增量 increment 不能解释(parse)为双精度浮点数(double precision floating point number)
- 可用版本:
- >= 2.6.0
- 时间复杂度:
- O(1)
- 返回值:
- 执行命令之后 key 的值。
10.MGET key [key ...]
返回所有(一个或多个)给定 key 的值。
如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。
- 可用版本:
- >= 1.0.0
- 时间复杂度:
- O(N) , N 为给定 key 的数量。
- 返回值:
- 一个包含所有给定 key 的值的列表。
redis> SET redis redis.com
OK redis> SET mongodb mongodb.org
OK redis> MGET redis mongodb
) "redis.com"
) "mongodb.org" redis> MGET redis mongodb mysql # 不存在的 mysql 返回 nil
) "redis.com"
) "mongodb.org"
) (nil)
11.MSET key value [key value ...]
同时设置一个或多个 key-value 对。
如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。
MSET 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。
- 可用版本:
- >= 1.0.1
- 时间复杂度:
- O(N), N 为要设置的 key 数量。
- 返回值:
- 总是返回 OK (因为 MSET 不可能失败)
12.MSETNX key value [key value ...]
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。
MSETNX 是原子性的,因此它可以用作设置多个不同 key 表示不同字段(field)的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。
- 可用版本:
- >= 1.0.1
- 时间复杂度:
- O(N), N 为要设置的 key 的数量。
- 返回值:
-
当所有 key 都成功设置,返回 1 。如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。
13.PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
- 可用版本:
- >= 2.6.0
- 时间复杂度:
- O(1)
- 返回值:
- 设置成功时返回 OK 。
-
redis> PSETEX mykey "Hello"
OK redis> PTTL mykey
(integer) redis> GET mykey
"Hello"
14.SET key value [EX seconds] [PX milliseconds] [NX|XX]
将字符串值 value 关联到 key 。
如果 key 已经持有其他值, SET 就覆写旧值,无视类型。
对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。
可选参数
从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:
- EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
- PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX keymillisecond value 。
- NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
- XX :只在键已经存在时,才对键进行设置操作。
因为 SET 命令可以通过参数来实现和 SETNX 、 SETEX 和 PSETEX 三个命令的效果,所以将来的 Redis 版本可能会废弃并最终移除 SETNX 、 SETEX 和 PSETEX 这三个命令。
- 可用版本:
- >= 1.0.0
- 时间复杂度:
- O(1)
- 返回值:
-
在 Redis 2.6.12 版本以前, SET 命令总是返回 OK 。
从 Redis 2.6.12 版本开始, SET 在设置操作成功完成时,才返回 OK 。如果设置了 NX 或者 XX ,但因为条件没达到而造成设置操作未执行,那么命令返回空批量回复(NULL Bulk Reply)。
# 对不存在的键进行设置 redis 127.0.0.1:> SET key "value"
OK redis 127.0.0.1:> GET key
"value" # 对已存在的键进行设置 redis 127.0.0.1:> SET key "new-value"
OK redis 127.0.0.1:> GET key
"new-value" # 使用 EX 选项 redis 127.0.0.1:> SET key-with-expire-time "hello" EX
OK redis 127.0.0.1:> GET key-with-expire-time
"hello" redis 127.0.0.1:> TTL key-with-expire-time
(integer) # 使用 PX 选项 redis 127.0.0.1:> SET key-with-pexpire-time "moto" PX
OK redis 127.0.0.1:> GET key-with-pexpire-time
"moto" redis 127.0.0.1:> PTTL key-with-pexpire-time
(integer) # 使用 NX 选项 redis 127.0.0.1:> SET not-exists-key "value" NX
OK # 键不存在,设置成功 redis 127.0.0.1:> GET not-exists-key
"value" redis 127.0.0.1:> SET not-exists-key "new-value" NX
(nil) # 键已经存在,设置失败 redis 127.0.0.1:> GEt not-exists-key
"value" # 维持原值不变 # 使用 XX 选项 redis 127.0.0.1:> EXISTS exists-key
(integer) redis 127.0.0.1:> SET exists-key "value" XX
(nil) # 因为键不存在,设置失败 redis 127.0.0.1:> SET exists-key "value"
OK # 先给键设置一个值 redis 127.0.0.1:> SET exists-key "new-value" XX
OK # 设置新值成功 redis 127.0.0.1:> GET exists-key
"new-value" # NX 或 XX 可以和 EX 或者 PX 组合使用 redis 127.0.0.1:> SET key-with-expire-and-NX "hello" EX NX
OK redis 127.0.0.1:> GET key-with-expire-and-NX
"hello" redis 127.0.0.1:> TTL key-with-expire-and-NX
(integer) redis 127.0.0.1:> SET key-with-pexpire-and-XX "old value"
OK redis 127.0.0.1:> SET key-with-pexpire-and-XX "new value" PX
OK redis 127.0.0.1:> GET key-with-pexpire-and-XX
"new value" redis 127.0.0.1:> PTTL key-with-pexpire-and-XX
(integer) # EX 和 PX 可以同时出现,但后面给出的选项会覆盖前面给出的选项 redis 127.0.0.1:> SET key "value" EX PX
OK redis 127.0.0.1:> TTL key
(integer) # 这是 PX 参数设置的值 redis 127.0.0.1:> SET another-key "value" PX EX
OK redis 127.0.0.1:> TTL another-key
(integer) # 这是 EX 参数设置的值
15.SETEX key seconds value
将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。
如果 key 已经存在, SETEX 命令将覆写旧值。
这个命令类似于以下两个命令:
SET key value
EXPIRE key seconds # 设置生存时间
不同之处是, SETEX 是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。
- 可用版本:
- >= 2.0.0
- 时间复杂度:
- O(1)
- 返回值:
-
设置成功时返回 OK 。当 seconds 参数不合法时,返回一个错误。
# 在 key 不存在时进行 SETEX redis> SETEX cache_user_id
OK redis> GET cache_user_id # 值
"" redis> TTL cache_user_id # 剩余生存时间
(integer) # key 已经存在时,SETEX 覆盖旧值 redis> SET cd "timeless"
OK redis> SETEX cd "goodbye my love"
OK redis> GET cd
"goodbye my love" redis> TTL cd
(integer)
16.SETNX key value
将 key 的值设为 value ,当且仅当 key 不存在。
若给定的 key 已经存在,则 SETNX 不做任何动作。
SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
- 可用版本:
- >= 1.0.0
- 时间复杂度:
- O(1)
- 返回值:
-
设置成功,返回 1 。设置失败,返回 0 。
17.SETRANGE key offset value
用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。
不存在的 key 当作空白字符串处理。
SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果给定 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ),那么原字符和偏移量之间的空白将用零字节(zerobytes, "\x00" )来填充。
注意你能使用的最大偏移量是 2^29-1(536870911) ,因为 Redis 字符串的大小被限制在 512 兆(megabytes)以内。如果你需要使用比这更大的空间,你可以使用多个 key 。
当生成一个很长的字符串时,Redis 需要分配内存空间,该操作有时候可能会造成服务器阻塞(block)。在2010年的Macbook Pro上,设置偏移量为 536870911(512MB 内存分配),耗费约 300 毫秒, 设置偏移量为 134217728(128MB 内存分配),耗费约 80 毫秒,设置偏移量 33554432(32MB 内存分配),耗费约 30 毫秒,设置偏移量为 8388608(8MB 内存分配),耗费约 8 毫秒。 注意若首次内存分配成功之后,再对同一个 key 调用 SETRANGE 操作,无须再重新内存。
- 可用版本:
- >= 2.2.0
- 时间复杂度:
-
对小(small)的字符串,平摊复杂度O(1)。(关于什么字符串是”小”的,请参考 APPEND 命令)否则为O(M), M 为 value 参数的长度。
- 返回值:
- 被 SETRANGE 修改之后,字符串的长度。
18.STRLEN key
返回 key 所储存的字符串值的长度。
当 key 储存的不是字符串值时,返回一个错误。
- 可用版本:
- >= 2.2.0
- 复杂度:
- O(1)
- 返回值:
-
字符串值的长度。当 key 不存在时,返回 0 。
Redis常用操作-----字符串的更多相关文章
- 【Redis使用系列】Redis常用操作
一.string类型的常用命令 set key value #一个key对应一个value.多次赋值,会覆盖前面. setnx key value #如果key存在则创建key1,并返回1,如果 ...
- Python Redis常用操作(持续更新)
目录 1.Redis简介 2.Redis部署 3.Redis API应用 4.String操作 1.Redis简介 redis是业界主流的key-value,nosql数据库之一.和Memcached ...
- redis常用操作总结
在项目中时常会用到redis,redis看起来好像很难的样子,而且我也确认反复学习了很久,但是,总结下来,自己使用到的东西并不太多,如下作一些总结工作. 1.安装(单机) 1.1 windows, 直 ...
- Redis常用操作
一.string类型的常用命令 set key1 com #一个key对应一个value,多次复制,会覆盖前面的value setnx key1 zhangsan #如果key1不存在则创建key1, ...
- Python Redis 常用操作
delete(*names) # 根据删除redis中的任意数据类型 exists(name) # 检测redis的name是否存在 keys(pattern='*') # 根据模型获取redis的n ...
- Redis常用操作--------SortedSet(有序集合)
1.ZADD key score member [[score member] [score member] ...] 将一个或多个 member 元素及其 score 值加入到有序集 key 当中. ...
- Redis常用操作-------Hash(哈希表)
1.HDEL key field [field ...] 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略. 在Redis2.4以下的版本里, HDEL 每次只能删除单个域,如果你需要在一 ...
- Redis常用操作-------Key(键)
1.DEL key [key ...] 删除给定的一个或多个 key . 不存在的 key 会被忽略. 可用版本: >= 1.0.0 时间复杂度: O(N), N 为被删除的 key 的数量. ...
- Redis常用操作大全和Python操作Redis
简单使用 utils.py import redis POOL=redis.ConnectionPool(host='127.0.0.1',port=6379) view.py 第一种方式 (通用方式 ...
随机推荐
- Linux 小知识翻译 - 「Linux」和病毒
据说,「Linux」系统上的病毒要远远少于Windows系统上病毒.从2种系统的普及度来看,这是很显然的, 「Linux」的使用人群很少,所以「Linux」上的病毒的扩散时,受害的范围也不大. 但是, ...
- 阿里八八β阶段Scrum(5/5)
今日进度 陈裕鹏: 简单信息抽取编码完成 叶文滔: 处理了信息抽取编码的一些BUG,修复了日程界面不会自动更新添加的日程的BUG,修改了原先测试用的TAG以及数据分析部分数据计算数值错误的问题 王国超 ...
- Dubbo+zookeeper+SpringMVC搭建最简单的分布式项目
Dubbo 是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 Dubbo 架构流程图 Provider:服务提供方 Consumer:服务消费者 Registry ...
- Python解析器
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开源的 ...
- qlexpress
qlexpress也是一个用于执行文本代码的解析器
- Domain Adaptation (1)选题讲解
1 所选论文 论文题目: <Unsupervised Domain Adaptation with Residual Transfer Networks> 论文信息: NIPS2016, ...
- protobuf可变长编码的实现原理
protobuf中的整数,如int32.int64.uint32.uint64.sint32.sint64.bool和enum,采用可变长编码,即varints. 这样做的好处是,可以节省空间.根据整 ...
- [TPYBoard - Micropython之会python就能做硬件 开篇]会python就能做硬件!
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 会python就能做硬件! 在写这套教程之前,首先感觉山东萝卜电子科技有限公司(turnip ...
- SpringMVC异常处理方式
一.描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合 ...
- 17-(基础入门篇)GPRS(Air202)串口
https://www.cnblogs.com/yangfengwu/p/9968716.html 现在看一下官方给的demo 其实只要有两个就好说了 module(...,package.seeal ...