redis string数据类型

本文详细介绍了 Redis 中 String 数据类型的多种操作方法,包括 GET、APPEND、BITCOUNT 等命令的使用方式及应用场景,适合 Redis 初学者及开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

牛逼的人在干牛逼的事之前总有一段苦逼的岁月,只要像傻逼一样坚持,终究也会牛逼


redis string数据类型是redis最简单的类型,相当于可以持久化的memcache服务器,和memcache相比,redis很大的特点在于比memcache拥有更多的数据类型,言归正传,简单进行string数据类型的操作

http://redisdoc.com/       文档地址



GET key

返回 key 所关联的字符串值。

如果 key 不存在那么返回特殊值 nil 。

假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值。

此命令一看都不陌生,获取key的值

127.0.0.1:6379[1]> get k2
"221"


APPEND key value

如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。就像java的StringBuilder类似

如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

127.0.0.1:6379[1]> set k1 aaa
OK
127.0.0.1:6379[1]> append k1 ttt     追加ttt

(integer) 6
127.0.0.1:6379[1]> get k1
"aaattt"
127.0.0.1:6379[1]> append k2 uuu     k2这个key不存在,直接创建一个key为k2,并给其value为uuu
(integer) 3
127.0.0.1:6379[1]> get k2
"uuu"
127.0.0.1:6379[1]> 

BITCOUNT key [start] [end]

计算给定字符串中,被设置为 1 的比特位的数量。

一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。

start 和 end 参数的设置和 GETRANGE 命令类似,都可以使用负数值: 比如 -1 表示最后一个字节, -2 表示倒数第二个字节,以此类推。


127.0.0.1:6379[1]> bitcount k1 -1 -1
(integer) 4


DECR key

将 key 中储存的数字值减一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。

127.0.0.1:6379[1]> set k2 333
OK
127.0.0.1:6379[1]> decr k2
(integer) 332

127.0.0.1:6379[1]> decr k3     k3不存在
(integer) -1
127.0.0.1:6379[1]> get k3
"-1"


DECRBY key decrement

将 key 所储存的值减去减量 decrement 。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。

127.0.0.1:6379[1]> set k2 333
OK
127.0.0.1:6379[1]> decr k2
(integer) 332

127.0.0.1:6379[1]> decrby k2 111     在k2上减去111
(integer) 221
127.0.0.1:6379[1]> decrby k4 666   k4不存在减去666为-666
(integer) -666


GETBIT key offset

对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

127.0.0.1:6379[1]> get k1
"aaattt"
127.0.0.1:6379[1]> getbit k1 9
(integer) 1


GETRANGE key start end

返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。说白了就是截图字符串

127.0.0.1:6379[1]> getrange k1 1 2
"aa"
127.0.0.1:6379[1]> getrange k1 1 3
"aat"
127.0.0.1:6379[1]> get k1
"aaattt"
127.0.0.1:6379[1]> 


GETSET key value

将给定 key 的值设为 value ,并返回 key 的旧值(old value)。重新设value,但是返回的是设置之前的value

当 key 存在但不是字符串类型时,返回一个错误。

127.0.0.1:6379[1]> get k1
"aaattt"
127.0.0.1:6379[1]> getset k1 aabbccddee
"aaattt"
127.0.0.1:6379[1]> get k1
"aabbccddee"


INCR key

将 key 中储存的数字值增一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

127.0.0.1:6379[1]> incr k1                 如果key不是数字,会报错
(error) ERR value is not an integer or out of range
127.0.0.1:6379[1]> set k6 888
OK
127.0.0.1:6379[1]> incr k6
(integer) 889
127.0.0.1:6379[1]> incr k9
(integer) 1


INCRBY key increment

将 key 所储存的值加上增量 increment 。     在key的value基础之上进行相加increment 返回

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。

127.0.0.1:6379[1]> get k9
"7"
127.0.0.1:6379[1]> incrby k9 8
(integer) 15

127.0.0.1:6379[1]> incrby k10 666            为k10的key不存在
(integer) 666


INCRBYFLOAT key increment

为 key 中所储存的值加上浮点数增量 increment 。

如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。

如果命令执行成功,那么 key 的值会被更新为(执行加法之后的)新值,并且新值会以字符串的形式返回给调用者。

127.0.0.1:6379[1]> incrby k10 666
(integer) 666
127.0.0.1:6379[1]> incrbyfloat k10 0.99
"666.98999999999999999"
127.0.0.1:6379[1]> incrbyfloat k11 0.89
"0.89"


MGET key [key ...]

返回所有(一个或多个)给定 key 的值。

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。

127.0.0.1:6379[1]> mget k6 k8 k9 k10 k11 k12              
1) "889"
2) (nil)
3) "15"
4) "666.98999999999999999"
5) "0.89"
6) (nil)          k12的key不存在,返回nil


MSET key value [key value ...]

同时设置一个或多个 key-value 对。

如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。

MSET 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。

127.0.0.1:6379[1]> mset kk1 haha kk2 hehe
OK
127.0.0.1:6379[1]> mget kk1 kk2
1) "haha"
2) "hehe"


MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。

127.0.0.1:6379[1]> mget kk1 kk2
1) "haha"
2) "hehe"

127.0.0.1:6379[1]> msetnx kk1 666         kk1的key存在   msetnx命令不生效
(integer) 0
127.0.0.1:6379[1]> get kk1
"haha"

127.0.0.1:6379[1]> msetnx kkk1 iii            kkk1的key不存在,生效
(integer) 1
127.0.0.1:6379[1]> get kkk1
"iii" 


PSETEX key milliseconds value

这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

127.0.0.1:6379[1]> psetex kkk1 3600000  hhh   设置有效时间,毫秒单位
OK
127.0.0.1:6379[1]> pttl kkk1                       返回剩余有效时间,毫秒单位        
(integer) 3573453
127.0.0.1:6379[1]> get kkk1
"hhh"


SET key value [EX seconds] [PX milliseconds] [NX|XX]

将字符串值 value 关联到 key 。

如果 key 已经持有其他值, SET 就覆写旧值,无视类型。

对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除(言下之意,重新覆盖value后,设127.0.0.1:6379[1]> get kkk1
"uuu"
127.0.0.1:6379[1]> setrange kkk1 1 hhh
(integer) 4
127.0.0.1:6379[1]> get kkk1
"uhh127.0.0.1:6379[1]> get kkk1
"uuu"
127.0.0.1:6379[1]> setrange kkk1 1 hhh
(integer) 4
127.0.0.1:6379[1]> get kkk1
"uhhh"h"置的有效时间就不起作用了)

127.0.0.1:6379[1]> psetex kkk1 3600000  hhh
OK
127.0.0.1:6379[1]> pttl kkk1
(integer) 3573453
127.0.0.1:6379[1]> get kkk1
"hhh"
127.0.0.1:6379[1]> set kkk1 iii
OK
127.0.0.1:6379[1]> pttl kkk1       剩余有效时间已经不存在
(integer) -1
127.0.0.1:6379[1]> get kkk1        重新赋值了,无视类型,set直接覆盖原value
"iii"

SETBIT key offset value

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。      

位的设置或清除取决于 value 参数,可以是 0 也可以是 1 。

当 key 不存在时,自动生成一个新的字符串值。

字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。

offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内)。

127.0.0.1:6379[1]> setbit kkk1 1 0
(integer) 1


SETEX key seconds value

将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。

如果 key 已经存在, SETEX 命令将覆写旧值。

127.0.0.1:6379[1]> setex kkk1 60 yyy       kkk1的key已存在的,设置60秒过期,并重新设置value为yyy
OK
127.0.0.1:6379[1]> pttl kkk1
(integer) 54088      还有54088毫秒过期,pttl返回毫秒单位剩余过期时间
127.0.0.1:6379[1]> ttl kkk1
(integer) 44         还有44秒过期,ttl返回秒单位剩余过期时间
127.0.0.1:6379[1]> get kkk1    
"yyy"
127.0.0.1:6379[1]> set kkk1 uuu    重新set一个value,该key的剩余过期时间清除
OK


SETNX key value

将 key 的值设为 value ,当且仅当 key 不存在。

若给定的 key 已经存在,则 SETNX 不做任何动作。

设置成功,返回  1 。
设置失败,返回  0 。

127.0.0.1:6379[1]> setnx kkk2 77i     kkk2的key不存在,设置kkk2的value为77i
(integer) 1
127.0.0.1:6379[1]> get kkk2 
"77i"
127.0.0.1:6379[1]> setnx kkk1 ooo     kkk1的key存在,不起作用
(integer) 0
127.0.0.1:6379[1]> get kkk1
"uuu"



SETRANGE key offset value

用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。

不存在的 key 当作空白字符串处理。

127.0.0.1:6379[1]> get kkk1
"uuu"
127.0.0.1:6379[1]> setrange kkk1 1 hhh    偏移量相当于平时我们数组的下标,string也有length,相当于byte数组的下标开   始进行替换
(integer) 4
127.0.0.1:6379[1]> get kkk1
"uhhh"


STRLEN key

返回 key 所储存的字符串值的长度。

当 key 储存的不是字符串值时,返回一个错误。

127.0.0.1:6379[1]> get kkk1
"uhhh"
127.0.0.1:6379[1]> strlen kkk1     长度4
(integer) 4
127.0.0.1:6379[1]> set kkk1 9999
OK
127.0.0.1:6379[1]> stalen kkk1         
(error) ERR unknown command 'stalen'        错误,不是字符串值




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值