Redis 数据类型之String

184 阅读7分钟

先用Redis-Key热个身

命令含义以及返回值
set将字符串值 value 关联到 key 。如果 key 已经持有其他值, SET 就覆写旧值, 无视类型。当 SET 命令对一个带有生存时间(TTL)的键进行设置之后, 该键原有的 TTL 将被清除。
move将当前数据库的 key 移动到给定的数据库 db 当中。如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)。移动成功返回 1 ,失败则返回 0 。
exists检查给定 key 是否存在。返回值若 key 存在,返回 1 ,否则返回 0 。
get返回与键 key 相关联的字符串值。
expire好多内容
ttl以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。返回值当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。
type返回 key 所储存的值的类型。返回值:none (key不存在)、string (字符串)、list (列表)、set (集合)、zset (有序集)、hash (哈希表)、stream (流)
127.0.0.1:6379> set name kittyguy
OK
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> EXISTS age   # 查看key是否存在
(integer) 1
127.0.0.1:6379> EXISTS agee
(integer) 0
127.0.0.1:6379> move name 3   # 将key 移动到相应数据库
(integer) 1
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> get name
"kittyguy"
127.0.0.1:6379[3]> expire name 12  # 设置key的阳寿,单位为秒
(integer) 1
127.0.0.1:6379[3]> ttl name     # 查看对应key的剩余阳寿
(integer) 7
127.0.0.1:6379[3]> ttl name
(integer) 5
127.0.0.1:6379[3]> ttl name
(integer) 4
127.0.0.1:6379[3]> ttl name
(integer) 3
127.0.0.1:6379[3]> ttl name
(integer) 1
127.0.0.1:6379[3]> ttl name
(integer) 0
127.0.0.1:6379[3]> ttl name # 阳寿已尽
(integer) -2
127.0.0.1:6379[3]> get name  # 再无此key
(nil)
127.0.0.1:6379[3]> select 0
OK
127.0.0.1:6379> type age  # 查看key对应的value数据类型
string

关于String的操作

拼接操作

命令含义以及返回值
append如果键 key 已经存在并且它的值是一个字符串, APPEND 命令将把 value 追加到键 key 现有值的末尾。如果 key 不存在, APPEND 就简单地将键 key 的值设为 value , 就像执行 SET key value 一样。返回值:追加 value 之后, 键 key 的值的长度。
strlen获取对应key 的value长度 
127.0.0.1:6379> set name java
OK
127.0.0.1:6379> append name " is good"   # 追加
(integer) 12
127.0.0.1:6379> get name
"java is good"
127.0.0.1:6379> strlen name   # 获取对应key 的value长度
(integer) 12
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> append age 123456  # 如果对应的key不存在,追加操作会创建它
(integer) 6
127.0.0.1:6379> keys *
1) "age"
2) "name"

递增递减操作

命令含义以及返回值
incr为键 key 储存的数字值加上一。如果键 key 不存在, 那么它的值会先被初始化为 0 , 然后再执行 INCR 命令。如果键 key 储存的值不能被解释为数字, 那么 INCR 命令将返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。
decr为键 key 储存的数字值减去一。如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECR 操作。如果键 key 储存的值不能被解释为数字, 那么 DECR 命令将返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。
incrby为键 key 储存的数字值加上增量 increment 。如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 INCRBY 命令。
decrby  将键 key 储存的整数值减去减量 decrement 。如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECRBY 命令。如果键 key 储存的值不能被解释为数字, 那么 DECRBY 命令将返回一个错误。 
127.0.0.1:6379> set count 0 
OK
127.0.0.1:6379> incr count # 增加1
(integer) 1
127.0.0.1:6379> get count
"1"
127.0.0.1:6379> decr count  # 减少1
(integer) 0
127.0.0.1:6379> get count
"0"
127.0.0.1:6379> decr count
(integer) -1
127.0.0.1:6379> decr count
(integer) -2
127.0.0.1:6379> incrby count 4  # 增加步长为4
(integer) 2                     
127.0.0.1:6379> get count   
"2"                          # -2+4=2
127.0.0.1:6379> decrby count 10   # 减少步长为10
(integer) -8           
127.0.0.1:6379> get count
"-8"                         # 2-10=-8   

截取替换操作

命令含义以及返回值
getrange  返回键 key 储存的字符串值的指定部分, 字符串的截取范围由 start 和 end 两个偏移量决定 (包括 start 和 end 在内)。负数偏移量表示从字符串的末尾开始计数, -1 表示最后一个字符, -2 表示倒数第二个字符, 以此类推。 
setrange 内容较多请仔细阅读
setex   将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟。如果键 key 已经存在, 那么 SETEX 命令将覆盖已有的值。
setnx  只在键 key 不存在的情况下, 将键 key 的值设置为 value 。若键 key 已经存在, 则 SETNX 命令不做任何动作。SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。 
127.0.0.1:6379> set str "0123456789"
OK
127.0.0.1:6379> getrange str 2 5   # 截取 但是value不会变
"2345"
127.0.0.1:6379> getrange str 2 -1  # -1 就直接到最后
"23456789"
127.0.0.1:6379> set str2 aaaaaaaa   
OK
127.0.0.1:6379> setrange str2 3 kkk  #  替换 key 接开始的要被替换的下标
(integer) 8
127.0.0.1:6379> get str2            
"aaakkkaa"                          # 有几个就替换几个
127.0.0.1:6379> setex str3 12 "redis"    # 将键 key 的值设置为 value ,并将键 key 的生存时                                           
OK                                       #设置为 seconds 秒钟。
                                         #如果键 key 已经存在, 那么 SETEX 命令将覆盖已有的值
127.0.0.1:6379> ttl str3
(integer) 5
127.0.0.1:6379> ttl str3
(integer) 4
127.0.0.1:6379> ttl str3
(integer) 3
127.0.0.1:6379> ttl str3
(integer) 1
127.0.0.1:6379> ttl str3
(integer) 0
127.0.0.1:6379> ttl str3
(integer) -2
127.0.0.1:6379> get str3
(nil)
127.0.0.1:6379> keys *
1) "str2"
2) "str"
127.0.0.1:6379> setnx str3 "kitty"     是『SET if Not exists』(如果不存在,则 SET)的简写。如果存在就不操作
(integer) 1
127.0.0.1:6379> setnx str3 "7878787"
(integer) 0
127.0.0.1:6379> get str3
"kitty"

多值操作

命令含义以及返回值
mset 同时为多个键设置值。如果某个给定键已经存在, 那么 MSET 将使用新值去覆盖旧值, 如果这不是你所希望的效果, 请考虑使用 MSETNX 命令, 这个命令只会在所有给定键都不存在的情况下进行设置。MSET 是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。 
mget  返回给定的一个或多个字符串键的值。如果给定的字符串键里面, 有某个键不存在, 那么这个键的值将以特殊值 nil 表示。 
msetnx 当且仅当所有给定键都不存在时, 为所有给定键设置值。即使只有一个给定键已经存在, MSETNX 命令也会拒绝执行对所有键的设置操作。MSETNX 是一个原子性(atomic)操作, 所有给定键要么就全部都被设置, 要么就全部都不设置, 不可能出现第三种状态。返回值:当所有给定键都设置成功时, 命令返回 1 ; 如果因为某个给定键已经存在而导致设置未能成功执行, 那么命令返回 0 。 
127.0.0.1:6379> mset str "jk" str1 "mk" str2 "kitty" str3 "guy"  # 一次添加多个K-V
OK
127.0.0.1:6379> keys *
1) "str1"
2) "str"
3) "str2"
4) "str3"
127.0.0.1:6379> mget str1 str2 str3   # 一次查询多个K
1) "mk"
2) "kitty"
3) "guy"
127.0.0.1:6379> msetnx str "hH" str1 "love" str4 "false"  # 原子操作,要么都失败要么都成功    
(integer) 0                                           # 本例不存在str4 ,所以失败,0失败,1成功      
127.0.0.1:6379> mget str1 str2 str3
1) "mk"
2) "kitty"
3) "guy"
127.0.0.1:6379> 

对象的操作(json)

127.0.0.1:6379> mset user:1:id "454545445446pp" user:1:name "jonh" user:1:address "China"
OK   # 设置user:1 对象
127.0.0.1:6379> mget user:1:id user:1:name user:1:address
1) "454545445446pp"
2) "jonh"
3) "China"
127.0.0.1:6379> getset user:1:address "USA"   # 取旧值,设新值,null也可以取
"China"
127.0.0.1:6379> get user:1:address
"USA"
127.0.0.1:6379>