字符串类型是Redis中最基本的数据类型,它是二进制安全的,任何形式的字符串都可以存储,包括二进制数据、序列化后的数据、JOSN化的对象,甚至是一张经Base64编码后的图片
设置键值对
- SET命令:设置键值对
命令格式:
SET key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds:用于设置key的过期时间为多少秒
PX milliseconds:用于设置key的过期时间为多少毫秒
NX:表示当key不存在时,才对key进行设置操作
XX:表示当key存在时,才对key进行设置操作
D:\Redis\Redis3>redis-cli --raw # 启动客户端,后面的--raw是为了GET名字时显示汉字而不是二进制,具体看下面的GET
127.0.0.1:6379> select 3 # 我选择了数据库3,默认为数据库0,0不显示
OK
127.0.0.1:6379[3]> SET stuName-1 '小王'
OK
127.0.0.1:6379[3]> SET age-1 22
OK
127.0.0.1:6379[3]>二次补充
redis-cli -h 地址 -p 6379 -a ‘密码‘ -c
***注意密码带引号- MSET命令:设置多个键值对
命令格式:
MSET key value [key value ...] # 中间是没有逗号的,我之前加了逗号报错了,还有就是别加什么时间限制还有存在还是不存在时再设置,就只有key value使用MSET命令同时设置多个键值对时。如果key已经存在,那么新值就会覆盖旧值。MSET命令是一个原子性操作,所有给定的key都会在同一时间内被设置更新,不会说是你更新了而我没有更新
返回值永远是OK,因为MSET不可能设置失败
127.0.0.1:6379[3]> MSET age-5 22 height-5 166 birthday 1996-09-10
OK
127.0.0.1:6379[3]>- SETNX命令:设置不存在的键值对
其实这是另一种SET语法,我还是喜欢第一种SET,都到这了就写出来看看吧
命令格式:
127.0.0.1:6379[3]> SETNX collegeName 'jisuanji' # 第一次设置
1
127.0.0.1:6379[3]> SETNX collegeName 'jisuanji' # 第二次设置
0如果key不存在则设置键值。如果key存在时则什么都不做
返回值:设置成功返回1,设置失败返回0
- MSETNX命令:设置多个不存在的键值对
命令格式:
MSETNX key value [key value ...]使用此命令时,当且仅当所有的给定的key都不存在时设置。如果有任何一个key存在,那么MSETNX命令也会拒绝所有给定key的设置操作。MSETNX命令是原子性的
如果设置成功则返回1,否则返回0
127.0.0.1:6379[3]> MSETNX chinese-teacher 'guo' math-teacher 'wang'
1
127.0.0.1:6379[3]> MSETNX chinese-teacher 'guo' english-teacher 'wang'
0获取键值对
- GET命令:获取键值对的值
命令格式:
GET key当key存在时,返回key对应的值;如果key不存在,则返回nil;如果key不是字符串类型的,则返回错误
127.0.0.1:6379[3]> GET stuName-1
小王 # 返回的是中文,如果当时连接客户端时没有指定--raw则返回的就是"\xcd\xf5\xd3\xc0\xb7\xc9"
127.0.0.1:6379[3]> GET nnnnnnn # 这个键不存在
127.0.0.1:6379[3]>- MGET命令:获取多个键值对的值
命令格式:
MGET key [key...]使用MGET命令同时返回多个给定key的值,key之间使用空格隔开,如果给定的key不存在则返回nil
127.0.0.1:6379[3]> MGET stuName-1 nsf age-1
小王
# nsf键不存在则返回空
22
127.0.0.1:6379[3]>- GETRANGE命令:获取键的子字符串值
命令格式:
GETRANGE key start end使用此命令来获取key中字符串值从start到end结束的子字符串,下标从0开始,start和end为整数,当取负数时表示从字符串的最后开始计数,最后一个是-1,倒数第二个是-2,以此类推。
127.0.0.1:6379[3]> SET haha 'Python MySQL Redis MongoDB'
OK
127.0.0.1:6379[3]> GETRANGE haha 0 7
Python M
127.0.0.1:6379[3]> GETRANGE haha 1 7
ython M
127.0.0.1:6379[3]> GETRANGE haha -2 -1
DB
127.0.0.1:6379[3]> GETRANGE haha -8 -3
Mongo设置键的生存时间
- SETEX命令:为键设置生存时间(秒)
命令格式:
SETEX key seconds valueSETEX 命令是一个原子性命令,它设置value与设置生存时间是在同一时间完成的
127.0.0.1:6379[3]> SETEX city 60 'xian'
OK
127.0.0.1:6379[3]> GET city # 获取城市名
xian
127.0.0.1:6379[3]> TTL city # 查看剩余生存时间,剩余48秒
48
127.0.0.1:6379[3]> GET city # 48秒后查看,键值为空- PSETEX命令:为键设置生存时间(毫秒)
命令格式:
PSETEX key milliseconds value键值对的值操作
- SETRANGE命令:替换键的值
命令格式:
SETRANGE key offset value从指定的位置(offset)开始将key的值替换为新的字符串,value多长就替换多长。SETRANGE命令会确保字符串足够长,以便将value设置在指定的偏移量上。如果给定key原来存储的字符串长度比偏移量小(比如,字符串只有4个字符长,但设置的offset是9),那么原字符和偏移量之间的空白将用零字节来填充
127.0.0.1:6379[3]> GET haha
Python MySQL Redis MongoDB
127.0.0.1:6379[3]> SETRANGE haha 0 ppp
26 # 返回执行SETRANGE命令之后的字符串长度
127.0.0.1:6379[3]> GET haha
ppphon MySQL Redis MongoDB
127.0.0.1:6379[3]> SETRANGE haha 24 'nihao'
29
127.0.0.1:6379[3]> GET haha
ppphon MySQL Redis Mongonihao
127.0.0.1:6379[3]> SETRANGE haha 30 'lala' # 原字符没有30位那么原字符和偏移量之间的空白字符就用零字节填充
34
127.0.0.1:6379[3]> GET haha
"ppphon MySQL Redis Mongonihao\x00lala"- GETSET命令:为键设置新值
命令格式:
GETSET key value将给定key的值设置为value,并返回key的旧值。当key存在但不是字符串类型时,将返回错误。如果key不存在则返回nil
127.0.0.1:6379[3]> GETSET haha nihao''
"ppphon MySQL Redis Mongonihao\x00lala"
127.0.0.1:6379[3]> GET haha
"nihao"
127.0.0.1:6379[3]> GETSET haha2 'nihao2' # 不存在haha2这个键时
(nil)
127.0.0.1:6379[3]> GET haha2
"nihao2"- APPEND命令:为键追加值
命令格式:
APPEND key value如果key存在且是字符串类型的,则将value值追加到key旧值的末尾。如果key不存在,则将key设置值为value
127.0.0.1:6379[3]> APPEND haha2 'nice'
(integer) 10 # 返回的是追加过后字符串的长度
127.0.0.1:6379[3]> GET haha2
"nihao2nice"
127.0.0.1:6379[3]> APPEND haha3 'very nice' # 没有haha3这个键时
(integer) 9键值对的计算
- STRLEN命令:统计键的值的字符长度
命令格式:
STRLEN key统计key的值得字符长度。当key存储的不是字符串时报错,当key不存在时返回0
127.0.0.1:6379[3]> STRLEN haha3
(integer) 9
127.0.0.1:6379[3]> STRLEN haha4 # 此时haha4键不存在
(integer) 0键值对的值增量
- DECR命令:让键的值减1
命令格式:
DECR key将key中存储的数字值减1.如果key不存在,则key的值先被初始化为0,再执行DECR操作减1
注意:这个命令只对数字类型的数据进行操作,如果key对应的值包含错误类型,或者字符串类型的值不能表示为数字,则返回一个错误
127.0.0.1:6379[3]> MGET age-1 weight-1 birthday-1
1) "22"
2) "75"
3) "1996-02-14"
127.0.0.1:6379[3]> DECR age-1
(integer) 21
127.0.0.1:6379[3]> DECR weight-1
(integer) 74
127.0.0.1:6379[3]> DECR birthday-1
(error) ERR value is not an integer or out of range
127.0.0.1:6379[3]>- DECRBY命令:键的值减去减量值
命令格式:
DECRBY key decrement基本概念和上面的DECR是一样的,接下来做几个演示就行了
127.0.0.1:6379[3]> MGET age-1 weight-1
1) "21"
2) "74"
127.0.0.1:6379[3]> DECRBY age-1 2
(integer) 19
127.0.0.1:6379[3]> DECRBY weight-1 2
(integer) 72
127.0.0.1:6379[3]> DECRBY heng-1 2 # heng键不存在,先初始化为0再执行减操作
(integer) -2- INCR命令:让键的值加1
命令格式:
INCR key同DECR,只是将key中存储的值加1
127.0.0.1:6379[3]> MGET age-1 weight-1
1) "19"
2) "72"
127.0.0.1:6379[3]> INCR age-1
(integer) 20
127.0.0.1:6379[3]> INCR weight-1
(integer) 73- INCRBY命令:让键的值加上增量值
命令格式:
INCRBY key increment概念同DECRBY,只是执行加
127.0.0.1:6379[3]> MGET age-1 weight-1
1) "20"
2) "73"
127.0.0.1:6379[3]> INCRBY age-1 3
(integer) 23
127.0.0.1:6379[3]> INCRBY weight-1 3
(integer) 76- INCRBYFLOAT命令:让键的值加上浮点数增量值
命令格式:
INCRBYFLOAT key increment127.0.0.1:6379[3]> GET PI
"3.1415"
127.0.0.1:6379[3]> INCRBYFLOAT PI 0.1
"3.2415"
127.0.0.1:6379[3]> INCRBYFLOAT PI 0.1000002
"3.3415002"
127.0.0.1:6379[3]> INCRBYFLOAT num-1 3
"3"
127.0.0.1:6379[3]> INCRBYFLOAT num-1 0.1
"3.1"
















