目录
[1. set key value](#1. set key value)
[2. get key](#2. get key)
[3. append key string](#3. append key string)
[4. strlen key](#4. strlen key)
[5. incr key 和 decr key](#5. incr key 和 decr key)
[6. incrby key num 和 decrby key num](#6. incrby key num 和 decrby key num)
[7. getrange key start end](#7. getrange key start end)
[8. setrange key start string](#8. setrange key start string)
[9. setex key time value](#9. setex key time value)
[10. setnx key value](#10. setnx key value)
[11. mset key1 value1 key2 value2 ...](#11. mset key1 value1 key2 value2 ...)
[12. mget key1 key2 ...](#12. mget key1 key2 ...)
[13. msetnx key1 value1 key2 value2 ...](#13. msetnx key1 value1 key2 value2 ...)
[14. getset key value](#14. getset key value)
接下来的所有类型的操作中,-1都代表最后。
String类型适合存储字符串,用作计数器。
1. set key value
创建键值对,当再次set已经存在的key时会覆盖掉之前的value;并且set可以将任意类型的数据转换成一个string类型的数据,比如对一个list类型的list1使用set list1 abc可以将list替换为string类型的abc。
2. get key
获取key对应的内容,仅对string类型的value使用。
3. append key string
对指定key的value后添加其他信息,即对value的内容进行字符拼接;添加后会返回value的长度;如果不存在指定的key,那么就会创建一个并将string赋给value,相当于set。
4. strlen key
查看指定key对应的value的长度。
5. incr key 和 decr key
让指定键值对的value自增1;相反,decr key则是让指定键值对的value自减1。
6. incrby key num 和 decrby key num
让指定键值对的value自增指定步长;相反,decrby key num则是让指定键值对的value自减指定步长。
以上两类操作value的值必须是数字。
7. getrange key start end
获取指定键值对的指定部分的信息,该范围是闭区间,start和end设置为0和-1代表获取整个value。要注意的是,在截取时由于要构成一个区间,区间要求前面的数不能大于后面的数,所以start不能大于end;还有就是如果出现负数,那么会将这个负数处理成"字符串长度+负数",所以-1代表末尾是因为字符串长度-1=最后一个字符的下标。
如果 start和end都大于最后一个字符的下标,那么就会截取到空串,因为只是end大于末尾下标时才会处理成末尾,start大于末尾下标时还是会按照真实位置计算。
8. setrange key start string
替换指定键值对的部分区间的信息,从指定位置start开始替换(start是下标,字符串是从0开始的),替换的长度和string的长度相同;当不存在该键值对时,它会创建一个键值对,并从start的位置开始将string赋值给value,然后前面的位置补上\x00。\x00中\是转义字符,也就是十六进制的0x00。返回的结果是执行完setrange操作后value的长度。
9. setex key time value
setex为set+expire,当不存在指定key时会创建并赋值,当存在指定键值对时则会覆盖原来的value,set操作结束后设置过期时间;当对同一键值对执行多次setex操作时,后面的setex操作不仅会覆盖该键值对的value值,而且会重新设定过期时间。
10. setnx key value
setnx为set+notexists,仅当不存在key时才创建键值对,避免覆盖原有的键值对,在分布式锁中会经常用到。
11. mset key1 value1 key2 value2 ...
同时执行多个set操作。
12. mget key1 key2 ...
同时执行多个get操作。
13. msetnx key1 value1 key2 value2 ...
同时执行多个setnx操作,但msetnx是一个原子性操作,要么一起成功,要么一起失败,所以如果有一个key已经存在,那么这个key对应的setnx操作不会执行,就会导致所有setnx操作不会执行,即如果有一个key已经存在那么msetnx操作无效;区别于mget,当key不存在时get会返回nil而不是不执行,所以是成功执行get操作。
14. getset key value
先get后set,当key不存在时返回nil,并创建键值对;当key存在时则先返回原来的值,再用新值覆盖掉旧值。