长沙有什么做试卷的网站,设计学习,网站建设落后发言,广州出名的网站Redis-string类型 Redis中的数据类型全局命令getsetredis中变量设置的过期时间是如何检测的 keysexistsdelexpirettlpexpirepttltype string数据类型的底层的数据结构操作string类型的常用命令getsetmsetmgetsetnxsetexpsetexincrdecrincrbydecrbyinc… Redis-string类型 Redis中的数据类型全局命令getsetredis中变量设置的过期时间是如何检测的 keysexistsdelexpirettlpexpirepttltype string数据类型的底层的数据结构操作string类型的常用命令getsetmsetmgetsetnxsetexpsetexincrdecrincrbydecrbyincrbyfloatapendgetrangesetrangestrlen string类型的使用场景作为缓存作为计数器共享会话手机验证码 Redis中的数据类型
在redis中数据是采用键值对(key-value)的方式进行存储的并且key的类型只能是string类型而对于value的类型常用的有以下几种{stringhashlistsetzset}以list为例意思就是说虽然redis中的所有数据都是以key-value形式组织的但这个value有许多类型拿list来说这个value就是一个列表。例如我们存储了一个变量它的key是mylist那么它的value是这样组织的[1,2,3,4,5]这是一个列表里面有12345这五个元素。
全局命令
getset
首先说明get和set并不是全局的命令这两个命令是用于操纵string类型的。在这里引出这两个命令主要是为方便掩饰其他的全局命令。 最简单的使用方法就是set key value例如set name “张三”。
NXkey不存在才设置否则不设置XXkey存在才设置否则不设置EX给变量一个过期时间例如使用redis实现手机验证码功能那么这个过期时间就会派上用场。EX设置的过期时间是以秒为单位的。PX用PX设置的过期时间是以毫秒为单位的。 get命令十分简单就是根据key返回其对应的value即可如果不存在返回nil。
set name 张三 # 设置一个变量key为namevalue为张三
get name # 获取key为name的变量的value的值可以看到我们在get name的时候我们想看到的是张三显示在屏幕上但是显示的却是遗一串16进制的串。这是因为redis是不涉及编码方式的也就是说在redis看来都是二进制没有什么编码方式所以导致中文的显示就会有些问题。 在启动redis客户端的时候加上 --raw选项此是redis客户端就会尝试对二进制数据进行解释。 redis-cli --raw。 redis中变量设置的过期时间是如何检测的
定期删除 redis每次抽取一部分进行时间的验证保证抽取的时间足够快。这是因为redis是一个单线程服务的模型处理任务扫描任务等都是一个线程来完成的如果抽取/验证的时间过长可能导致正常的处理请求就会被阻塞住。 惰性删除 假设某个key的过期时间已经到了但是redis暂时还没有将它删除紧接着后面一次访问正好用到了这个key那么redis就会将这个key进行删除然后返回nil。 keys
用于查询当前服务器上匹配的key。通过一些特殊分符号来描述key的模样匹配这些描述信息的key就会被查询出来。
匹配任意一个字符
*匹配任意一个或者多个字符
[a,b,c]匹配a/b/c中的任意一个
[^a,b,c]匹配除了a/b/c外的其他字符
[a-e]匹配一个范围可以匹配a到e之间的字符闭区间。exists
判断某个key是否存在。 返回key存在的个数如果只查询一个key那么如果这个key存在就返回1如果不存在那么就返回0。如果查询多个key那么就返回存在的key的个数。
del
删除指定的key返回成功删除的key的个数。
expire
给key指定一个过期时间。
NX只有当这个key不存在过期时间的时候才会被设置。
XX只有当这个key存在过期时间的时候才会被设置。
GT只有当设置的新的过期时间比当前这个大才会被设置。
LT只有当设置的新的过期时间比当前这个小才会被设置。ttl
查看变量key的过期时间。返回的就是还剩的过期时间如果不存在过期时间就返回-1。
pexpire
与expire类似就是设置的过期时间单位是毫秒。
pttl
与pexpire搭配使用查看key当前的过期时间。
type
返回变量的数据类型。 这个类型是key对应的value的类型因为key的类型只能是string。
string数据类型的底层的数据结构
在redis中string这种数据类型在底层时间的时候采用的是哪种数据结构呢
底层结构描述embstr对短字符串的优化当字符串的长度较小时int8bytes的int类型当value的值为整形值的时候raw正常的字符串实现
操作string类型的常用命令
getset
在上面已经提到了这里就不做过多的叙述。
msetmget
一次可以同时操作多个变量同set和get相比。 返回多个key所对应的value值如果key不存在那么就返回nil。
setnx
相当于对set命令的加强setnx key value set key value nx。如果key不存在才会设置这个键值对否则不会设置这个键值对。
setex
setex是对set命令和expire命令的集成在设置一个变量的同时也设置了其过期时间。这里的过期时间默认是以秒为单位的。
psetex
psetex同setex是相似的区别就是设置的过期时间是以毫秒为单位的。
incrdecr
incr要求key对应的value必须是整数作用就是将value的值变为value1然后返回1之后的值。如果key不存在那么就创建这个key并将其value设为0。 decr与incr相对应是将value的值变为value-1。其他细节与incr相类似。
incrbydecrby
incrby和decrby其实是对incr和decr的加强它们的作用是将value的值变为value n/value - n。其他细节与上述类似。
incrbyfloat
这条命令与上述的略微有些不同就是将key对应的value值变为value /- 某个小数值。当key不存在的时候就创建这个key并且对应value的值为0。
apend
对key对应的value的内容后面追加上一个字符串如果key不存在那么效果等同于set key value。返回值为操作后value对应的长度(单位字节)。
getrange
获取key对应value的某个区间的字串。区间[start,end]是闭区间并且单位是字节。
setrange
设置key对应value的某一段如果key不存在那就创建keyvalue的前 offset -1 字节会被0字节填充然后在offset字节开始填充新的字符串。返回值为操作后value对应的长度单位仍然是字节。
strlen
返回key对应value的字符串的长度单位是字节。如果字符串不存在那就返回0。
string类型的使用场景
作为缓存
redis最常用的一个作用就是作为缓存来减轻关系型数据库例如MySQL的压力的。当流量很大时MySQL可能承受不住这么巨大的流量导致服务崩溃。redis作为缓存就是我们在查询某个字段的时候先去缓存中查询缓存中不存在再去MySQL中查询并且在MySQL中查询到此数据之后还要将此数据放到缓存中还要为其设置一定的热点事件防止redis中的数据量过大。
作为计数器
例如记录某一视频的播放量、点赞数量、评论数量等。但是redis不擅长做数据的统计像在MySQL中一条SQL语句就能根据某个字段进行排序。
共享会话
通常服务器在为客户端提供服务的时候会为每个客户端创建一个Session对象(通常与Cookies搭配使用)但是在这种分布式系统中不再是单机架构我的客户端这次的请求会打到这台服务器上下次可能就会打到下一个服务器上了所以将Session存储到某台服务器上是不合理的通常存储在redis中为多台服务器共同使用。
手机验证码
手机验证码通常都有一个过期时间利用redis就很容易实现在产生一个验证码的时候在redis中设置这个变量并且设置其过期时间当过期时间一到redis就会删除这个变量那么也就意味着这个验证码已经过期了。