赞
踩
将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,无论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。
set key value [expiration EX seconds|PX milliseconds] [NX|XX]
EX seconds⸺使用秒作为单位设置 key 的过期时间。
PX milliseconds⸺使用毫秒作为单位设置 key 的过期时
(设置key1有10秒存活时间,值为5000)
(设置key2 为111,存活时间10秒)
上面两种写法都可以
NX ⸺只在 key 不存在时才进行设置,即如果 key 之前已经存在,设置不执行。
XX ⸺只在 key 存在时才进行设置,即如果 key 之前不存在,设置不执行。
也就是说,NX是用来插入新数据,XX用来更新已有数据
(先设置key1为111,然后再设置key1以NX方式为222,发现返回nil,数据还是111,数据设置失败)
(如果这时候在以XX方式设置key1就可以设置成功。如果key2不存在,以XX方式key2,返回nil,插入失败)
获取 key 对应的 value。如果 key 不存在,返回 nil。如果 value 的数据类型不是 string,会报错。 语法:
GET key
⼀次性设置多个 key 的值 。返回值永远是 OK
MSET key value [key value ...]
⼀次性获取多个 key 的值。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil。
使用 mget / mset 由于可以有效地减少了网络时间,所以性能相较更高。
使用批量操作,可以有效提高业务处理效率,但是要注意,每次批量操作所发送的键的数量也不 是无节制的,否则可能造成单⼀命令执行时间过长,导致 Redis 阻塞。
将 key 对应的 string 表示的数字加一。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错。
incr key
(先设置key为1,get到的key为1.然后对key进行incr操作,key变为2)
将 key 对应的 string 表示的数字加对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错。
incrby key decrement
(对key增加10)
将 key 对应的 string 表示的数字加一。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错。
decr key
DECRBY key decrement
(这些相关的命令都可以加/减上一个负数)
将 key 对应的 string 表示的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是⼀个浮点数,则报错。允许采用科学计数法表示浮点数。
incrbyfloat key increment
如果 key 已经存在并且是一个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在, 则效果等同于 SET 命令。 返回值:追加完成之后 string 的长度。
append key value
返回 key 对应的 string 的子串,由 start 和 end 确定(左闭右闭)。可以使用负数表示倒数。-1 代表倒数第一个字符,-2 代表倒数第而个,其他的与此类似。超过范围的偏移量会根据 string 的长度调整成正确的值。返回值:string 类型的子串
getrange key start end
覆盖字符串的一部分,从指定的偏移开始。
setrange key offset value
(如果在一个不存在的key2里使用setrange命令,会在偏移量前面插入一个字节,就是 0x00)
(\0x00中,0x表示十六进制,00表示十六进制一个空字符)
获取 key 对应的 string 的长度。当 key 存放的类型不是 string 时,报错
strlen key
(strlen操作不存在的key时,返回0)
(类型不是string时,报错)
字符串类型的内部编码有 3 种:
int:8 个字节的长整型。
embstr:小于等于 39 个字节的字符串。
raw:大于 39 个字节的字符串。
(这个39这个数字,是可以配置的,根据具体的使用场景设置不同的数字 )
Redis 会根据当前值的类型和长度动态决定使用哪种内部编码实现。
比较典型的缓存使用场景,其中 Redis 作为缓冲层,MySQL 作为存储层,绝大部分请求的数据都是从 Redis 中获取。由于 Redis 具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。
通过增加缓存功能,在理想情况下,每个用户信息,一个小时期间只会有一次 MySQL 查询,极大地提升了查询效率,也降低了 MySQL 的访问数。
与 MySQL 等关系型数据库不同的是,Redis 没有表、字段这种命名空间,⽽且也没有对键名 有强制要求(除了不能使用一些特殊字符)。但设计合理的键名,有利于防⽌键冲突和项⽬ 的可维护性,比较推荐的方式是使用 "业务名:对象名:唯⼀标识:属性" 作为键名。例如 MySQL 的数据库名为 vs,用户表名为 user_info,那么对应的键可以用"vs:user_info:6379"、"vs:user_info:6379:name" 来表示
许多应用都会使用 Redis 作为计数的基础工具,它可以实现快速计数、查询缓存的功能,同时数 据可以异步处理或者落地到其他数据源。如图所示,例如视频网站的视频播放次数可以使用 Redis 来完成:用户每播放一次视频,相应的视频播放数就会自增 1。
一个分布式 Web 服务将用户的 Session 信息(例如用户登录信息)保存在各自的服务器中,但这样会造成一个问题:出于负载均衡的考虑,分布式服务会将用户的访问请求均衡到不同的服务器上,并且通常无法保证用户每次请求都会被均衡到同一台服务器上,这样当用户刷新一次访问是可能会发现需要重新登录,这个问题是用户无法容忍的。
为了解决这个问题,可以使用 Redis 将用户的 Session 信息进行集中管理,如图,在这种模式下,只要保证 Redis 是高可用和可扩展性的,无论用户被均衡到哪台 Web 服务器上,都集中从 Redis 中查询、更新 Session 信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。