1.简介
- redis最基本的数据类型,一个key对应一个value。
- 值可以是任何种类的字符串(包括二进制数据),值的长度不能超过512 MB。
- 内容通常采用字符串的形式存储,如果字符串以整数形式展示,可以作为数字操作使用
2.应用场景
- 计算器:文章访问量,每日用户访问量,阅读数(incr命令 自增1)
- 单值缓存:缓存商品库存,key=商品id,value=库存数量
- 对象缓存:set 存储用户信息,key=userid value=json格式数据,适用于数据不断变化的应用场景,如用户微信余额,存取方便,效率高。(对象一般更推荐采用Hash缓存,通过field属性更方便拿到对象指定属性)
- 分布式锁:在一个集群环境下,多个web应用时对同一个商品进行抢购和减库存操作时,
可能出现超卖时会用到分布式锁,SETNX命令(SET if Not eXists)。功能:当且仅当 key 不存在,将 key 的值设为 value ,并返回1;若给定的 key 已经存在,则 SETNX 不做任何动作,并返回0。 -
127.0.0.1:6379> SETNX block 10000 //返回1代表获取锁成功,返回0代表获取锁失败 (integer) 1 (1.26s) ....... //执行业务操作 127.0.0.1:6379> DEL block 10000 //执行完业务删除锁 (integer) 0 127.0.0.1:6379> SET block 10000 ex 10 nx //防止程序意外中止导致死锁 SET key value [EX seconds] [PX milliseconds] [NX|XX] 将字符串值 value 关联到 key 。如果 key 已经持有其他值, SET 就覆写旧值,无视类型。对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。 EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。 PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。 NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。 XX :只在键已经存在时,才对键进行设置操作。
- 分布式系统全局序列号:一般数据库表的主键用自增长序列号,如果后端做了分库分表,
数据库自带的auto_increment就不适用了,可以使用redis的自增,由于Redis为单进程单线程模式, 采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。
incr orderId redis压力大
incr orderId 1000 提升性能,降低redis压力假设有3台机器访问redis,我们可以利用redis单线程的特点 incrby orderid 1000,让每台每次拿1000,0-1000,1001-2000,2001~3000,拿完之后再各自慢慢处理这1000的容量
3.基本语法
set key value | 在当前的数据库中设置一个字符串的key | |
get key | 在当前的数据库中获取指定的key的值 | |
getset key value | 把指定的key的值设置为value并返回原来的值 | |
strlen key | 返回指定key对应的值的长度 | |
mget k1 k2 k3 | 获取多个key对应的值 | |
del k1 | 删除key对应的值 | |
mset k1 v1 k1 v1 | 一次性设置多个key的值 | |
flushall | 清空当前连接的redis数据库中的所有k-v | |
incr key | 让指定的key对应的值自增一 | |
incrby key 20 | 指定的key的value值加上指定的增量值 | |
decr key | 自减1 | |
decrby key 20 | 将指定的key对应的value减去指定的值 | |
append key value1 | 将指定的value1值追加到指定的key的原来的value后面 | |
setex key min value | 设定一个key并指定过期时间,单位为秒 例:setex key 100 'xi\'an' | |
TTL key | 返回-2当前的key是不存在的,-1表示key是永久的 |
getrange key start end | 返回从start到end的子串,从0开始 | |
getbit key offset | 获取指定偏移量上的位(bit)。 | |
setbit key offset value(0/1) | 设置或者清空key的value(字符串)在offset处的bit值。这个由value(只能是0或者1)来决定。当key不存在的时候,就创建一个新的字符串value。要确保这个字符串大到在offset处有bit值。参数offset需要大于等于0,并且小于232(限制bitmap大小为512)。当key对应的字符串增大的时候,新增的部分bit值都是设置为0。 举例:将a变为b 我们知道 'a' 的ASCII码是 97。 我们通过SETBIT 命令'a' 变成 'b' 应该怎么变呢?其实也就是将 01100001 变成 01100010 (b的ASCII码是98),也就是将'a'中的offset 6从0变成1,将offset 7 从1变成0 。 | |
setrange key offset value | 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。 | |
psetex key mmilliseconds value | 给key设置一个以毫秒为单位的过期时间 |
注意:
1、incr 命令 必须是数值数值类型的数据,如果是一个字符串的值不能使用incr命令。
2、redis字符串中的值,特殊字符是需要处理的,支持转义的字符 \' 表示一个单引号