1 String类型
1.1 介绍
存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
存储数据的格式:一个存储空间保存一个数据
存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
1.2 基本操作
增加,查询,删除
- 增加或者修改数据
set key value
setnx key value # 如果这个key不存在,就添加对应数据,如果存在则没有任何作用
- 获取数据
get key
- 删除数据
del key
eg:
localhost:6379> set name kobe # 添加一个数据
OK
localhost:6379> get name # 获取数据
"kobe"
localhost:6379> set name wade # 修改数据
OK
localhost:6379> get name
"wade"
localhost:6379> del name # 删除数据
(integer) 1
localhost:6379> get name # 删除之后,在获取,返回的就是nil(null )
(nil)
localhost:6379>
eg:测试setnx
localhost:6379> get name
(nil)
localhost:6379> setnx name kobe
(integer) 1
localhost:6379> get name
"kobe"
localhost:6379> setnx name wade
(integer) 0
localhost:6379> get name
"kobe"
批量操作
- 批量添加/修改
mset key1 value1 key2 value2 ...
msetnx key1 value1 key2 value2 ... ## 可以同时设置多个key,只有有一个存在都不保存
- 批量获取
mget key1 key2 ...
- 删除本本身就支持批量
del key1 key2 ...
eg:
localhost:6379> mset name kobe age 18 gender man
OK
localhost:6379> mget name age gender
1) "kobe"
2) "18"
3) "man"
localhost:6379> del name age gender
(integer) 3
localhost:6379> mget name age gender
1) (nil)
2) (nil)
3) (nil)
eg: 测试:msetnx
localhost:6379> mget name age
1) (nil)
2) (nil)
localhost:6379> msetnx name kobe age 18
(integer) 1
localhost:6379> mget name age
1) "kobe"
2) "18"
localhost:6379> msetnx name gender wade man
(integer) 0
localhost:6379> get name age gender
(error) ERR wrong number of arguments for 'get' command
localhost:6379> mget name age gender
1) "kobe"
2) "18"
3) (nil)
其他操作
- 追加信息到原始信息后补
append key value
- 这个命令返回值是新数据的长度
- 如果key不存在,这个命令就是添加数据
eg:
localhost:6379> set name zhang
OK
localhost:6379> get name
"zhang"
localhost:6379> append name san # 这个命令返回值是新数据的长度
(integer) 8
localhost:6379> get name
"zhangsan"
localhost:6379> append gender man ## gender这个key不存在
(integer) 3
localhost:6379> get gender
"man"
- 获取长度
strlen key
- 如果key不存在返回的就是0
localhost:6379> set name kobe
OK
localhost:6379> strlen name
(integer) 4
localhost:6379> strlen gender
(integer) 0
- 截取字符串,索引从0开始
getrange key start end
eg:
localhost:6379> set name zhangsan
OK
localhost:6379> getrange name 1 3
"han"
localhost:6379> get name
"zhangsan"
localhost:6379> getrange name 0 -1 # -1 就是到末尾
"zhangsan"
1.3 数值数据操作
- redis中可以用String在做数值类型的数据
- 按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。(9223372036854775807(java中long型数据最大值,Long.MAX_VALUE))
- redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发
带来的数据影响。
- 设置数值数据增加指定范围的值
incr key # 递增++1
incrby key increment # 增加指定的值(increment)
incrbyfloat key increment # 增加小数
eg:
localhost:6379> set num 1
OK
localhost:6379> get num
"1"
localhost:6379> incr num
(integer) 2
localhost:6379> get num
"2"
localhost:6379> incrby num 3
(integer) 5
localhost:6379> get num
"5"
localhost:6379> incrbyfloat num 2.5
"7.5"
localhost:6379> get num
"7.5"
localhost:6379>
- 设置数值数据减少指定范围的值
decr key # 对应incr,递减操作
decrby key increment # 对应incrby ,减指定的数
- 注意没有
decrbyfloat
这个命令
eg:
localhost:6379> set num 10
OK
localhost:6379> get num
"10"
localhost:6379> decr num
(integer) 9
localhost:6379> get num
"9"
localhost:6379> decrby num 3
(integer) 6
localhost:6379> get num
"6"
localhost:6379> decrbyfloat num 0.5
(error) ERR unknown command `decrbyfloat`, with args beginning with: `num`, `0.5`,
localhost:6379>
应用场景:分库分表时候可以用来做id自增,保证id的唯一性,将ID自增交给外部的redis去做,而不是数据库的自增id去做,并且redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
- 上面的操作可以合并为一个:因为增加一个负数,就是减; 减一个负数,就是加
localhost:6379> set num 10
OK
localhost:6379> incrby num -1
(integer) 9
localhost:6379> get num
"9"
localhost:6379> decrby num -1
(integer) 10
localhost:6379> get num
"10"
- 非数值类型数据,进行上述操作会报错
localhost:6379> set num hello
OK
localhost:6379> incr num
(error) ERR value is not an integer or out of range
1.4 设置数据的有效时间
setex key seconds value # 单位是秒
psetex key milliseconds value # 单位是豪秒
eg:
localhost:6379> setex name 10 kobe
OK
localhost:6379> get name
"kobe"
localhost:6379> get name # 10s后获取,就是nil
(nil)
localhost:6379>
1.5 常用命令总结
命令 | 说明 |
---|---|
set | 设置一个key/value |
get | 根据key获得对应的value |
mset | 一次设置多个key value |
mget | 一次获得多个key的value |
getset | 获得原始key的值,同时设置新值 |
strlen | 获得对应key存储value的长度 |
append | 为对应key的value追加内容 |
getrange 索引0开始 | 截取value的内容 |
setex | 设置一个key存活的有效期(秒) |
psetex | 设置一个key存活的有效期(毫秒) |
setnx | 存在不做任何操作,不存在添加 |
msetnx原子操作(只要有一个存在不做任何操作) | 可以同时设置多个key,只有有一个存在都不保存 |
decr | 进行数值类型的-1操作 |
decrby | 根据提供的数据进行减法操作 |
Incr | 进行数值类型的+1操作 |
incrby | 根据提供的数据进行加法操作 |
Incrbyfloat | 根据提供的数据加入浮点数 |