如果value类型是string,那么我们存入的时候是什么,编码的时候就是什么,不会进行任何转换(已二进制方式存储),其不仅可以存文本数据,还包括整数,json,xml等。
我们来讲一下其类型的相关命令
1.set
之前我们提到过,set key value的用法,其还有额外的选项
我们可以把设置过期时间命令写在一块
set key value [expire seconds] [NX|XX]
\]代表写不写都行,\|代表只能二选一或都不选,后面的NX和XX是啥 如果选项带了NX:代表如果Redis中没有这个key,才设置,key若存在则不作为(返回nil) XX:key存在,则更新key对应的value(以及对应的过期时间),key不存在不作为(返回nil) 如果没写此选项:key不存在,创建新键值对,key存在,覆盖原有的value(数据结构可能改变) 并且,原来的ttl也会失效 2.get 也提到过,提醒一下,一定要确保value是string类型才能get不然会报错 为了保证高效性,如果我们有多个key要设置和多个value要获取,就要输入多次get和set,然而每次都会有一定开销,为了多合一我们有mset和mget 语法:mset key1 value1 \[key2,value2.....
mget key1 key2 .....
除此之外,还有
setnx:给key对应的value设置过期时间(key不存在的情况下,存在则失败)
setex:设置key的过期时间(秒) psetex(毫秒)
3.加减操作命令
incr:value+1
incrby :value+n
decr: value -1
decrby : value -n
incrbyfloat : value +/- 小数
语法:incr key
返回+1后的数(对应的value必须是整数不然会报错,虽然以字符串形式存储)
并且value不可大于long long的范围
如果key不存在,就会创建key并默认value为0再加1返回1
incrby key n,其他规则和上述相同
decr key 和incr key相同,功能为减法(incrby也可以实现减法 +(-1),功能重合)
decrby key n和incrbyfloat key n同理
4.append
追加/拼接字符串
语法:append key value
在指定key后再加上value字符串(前提key对应的value是string类型)如果key不存在,此命令等同于set。成功返回拼接后的长度(字节)一个汉字三个字节(utf8)set汉字时get返回对应的编码(16进制)如果想显示汉字,启动redis时加 --raw
5.getrange
获取字符串的子串(substr)
getrange key start end(左闭右闭)下标依旧从0开始
特别的是,Redis支持负数下标 -1代表倒数第一个位置 [0,-1]代表整个字符串
注:切汉字需要以3字节为单位进行切割,否则会不完整
6.setrange
字符串替换
setrange key offset value
在串的第offset(偏移量开始覆盖为value)包括offset
返回替换后的长度,覆盖的时候同样注意汉字的切割问题
可以操作不存在的key,并在0,offset范围生成字节0x00
7.strlen
strlen key 返回字符串长度(字节)
string的编码方式(object encoding key查看)
int :8字节长整型(long long)
小数用字符串来存
embstr:<=39字节字符串
raw:>39字节字符串(二者不绝对)
string的应用场景
一、缓存

应用层访问数据时,先访问Redis,如果有直接返回,不再访问数据库
如果Redis没找到,读取MySQL,返回数据给应用层的同时把数据写进Redis
二、计数功能
比如利用上面的命令统计视频播放次数
三、session会话
利用Redis与负载均衡机制记录多个常用的session对话(把所有session放入Redis服务器,每个负载均衡的服务器只要去Redis查找即可),便于多次查找且对话
四、手机验证码
在有效时间内把验证码存入Redis并设置过期时间,过了时间再输入也无效了,同时有时候会显示每隔一定时间只能获取一次(防止Redis服务器压力过大)