Redis---string类型
redis中的字符串直接按照二进制方式存储的不会做任何编码转换存的是什么取出来还是什么所以可以存储文本数据整数普通字符串JSONxml图片数据音频但是音频视频体积可能过大redis对于string类型限制了大小最大是512Mbredis单线程模型希望进行操作都是比较快的SET操作格式set key value [ex(expiration) seconds | px seconds] [NX|XX]NX如果key不存在才设置如果key存在则不设置返回nilEX如果key存在才设置相当于更新操作可以不存在则不设置返回nilset命令的变种SETNX不存在才能设置存在则设置失败SETEX设置键值对的同时设置时间举个例子set key1 10 value1PSETEX设置key过期时间与SETEX无非是单位不同上面是秒下面是毫秒新的键值对如果key存在则让新的value覆盖旧的value如果进行覆盖的话创建的时间也会被重新设置。举个例子//设置定时删除 set key1 123 ex 10 //不存在才设置 set key2 123 ex 10 NX清空全部键值对的操作FLUSHALLGET对于get来说只支持string类型的value如果value是其他类型使用get则会失效。MSET/MGET与上面STE/GET最明显的区别就是一次可以操作多组键值对操作格式mset key value [key value...]举个例子mset key1 value1 key2 value2 key3 value3 mget key1 key2 key3时间复杂度O(N)N为key的数量INCR/INCRBY/DECR/DECRBY/INCRBYFLOTincr对value进行1incrbyduivalue进行ndecr对value进行-1decrby对value进行-nincrbyfloat对value/-小数n举个例子set key 10 incr key注意该整数大小对应C中的long longincr操作的key如果不存在就会把这个key的value当作0来使用incr/incrby/incrbyfloat加上负数就可以当减来使用value支持负数的存在时间复杂度O(1)APPEND如果key已经存在并且是一个string命令会将value追加到原有string后边。如果key不存在那么该命令相当于set命令操作格式append key value举个例子append key1 value1返回值追加后string的长度时间复杂度O(1)注意在Xshell终端默认字符编码为utf8所以在该终端输入汉字后也是utf8编码的所以一个汉字在itf8字符集中通常是3个字节在启动redis客户端的时候加上--raw这样的选项就可以使redis客户端能自动把二进制数据尝试翻译CTRL s在XShell中的作用是冻结当前画面CTRL q在XShell中的作用是解除冻结当前画面getrange获取字符串中的子串相当于C中的substr操作格式getrange key start end注意该指定的区间是前闭后闭而不是大多数的前闭后开redis下标还支持负数-1表示倒数第一个举个例子//设置一组键值对 set key helloworld //获取该键值对中的子串从头拿到最后一个字符 getrange key 0 -1注意如果字符串中的是汉字此时切分字串很可能不是完整的汉字结果就非常随机SETRANGE对字串进行修改操作格式setrange key offset偏移量可以理解为从第几个字节开始替换的value返回值替换后新的字符串的长度注意替换后的长度不一定等于原长度因为替换字串可能过长导致长度高于原串长度举个例子//设置键值对 set key1 helloword //替换字串这样长度就高于燕来的子串 setrange key1 offset aaaaaaaaaaaaaaaaaaaa注意该方式也可能导致汉字成乱码setrange针对不存在的key也是可以操作的不过会把offset之前不存在的内容填充成0x00STRLEN获取字符串的长度单位是字节当key存放的不是类型string时会进行报错操作格式strlen key时间复杂度O(1)返回值string的长度当key不存在时返回0举个例子set key1 value1 strlen key1string的编码方式字符串类型内部的编码方式有3种int8字节编码embstr小于等于39个字节的字符串raw大于39个字节字符串注意不用刻意记住这些数字这些数字可以根据需求场景进行配置redis存储小数本质上还是当作字符串来存也就意味之在进行小数运算时需要先将字符串转换成小数计算完毕后再将小数转换成字符串进行存储所以相对于整数计算小数的开销更大。