String操作
我们知道redis是一个键值对类型的基于内存的数据库,这里我们知道键一般是String类型的,现在我们谈谈value为String类型有哪些操作吧
注:value为String类型最大的大小能存512M的数据
首先我们从set来谈谈这些数据都是什么意思吧
注:redis中命令不区分大小写,但是key和value区分大小写
这里的nx指的是 not exist 不存在的时候设置键值对
xx 指的是键存在的时候设置键值对
ex指的是设置秒级别的过期时间 这里就是将expire复合到这一条命令中,效率更高
px则是毫秒级别的
exat和pxat则是设置unix的过期时间
如果此时我将一个键值对设置过期时间为40秒
而我在10秒的时候就将这个键值对的值修改
这里的过期时间就会变成-1 永不过期
我们想让修改完的键继承上一个值的过期时间,那么我们就可以在设置的时候加上一个keepttl即可
我们想让修改完的键继承上一个值的过期时间,那么我们就可以在设置的时候加上一个keepttl即可
get:设置的时候先查看一下原有值再设置.,此时会先返回原有值才设置这个键的值
-------------------------------------------------------------------------------------------------------------------------
下面介绍另一堆String有关的操作
1.mset k1 v1 k2 v2
可以批量设置键值对,减少交互IO
2.msetnx 就是加上了 not exist
如果不存在就设置
3.mget 批量获取值
4.getrange k1 0 3
获取k1的值并截取,类似于字符串截取
5.setrange 设置从某个值开始
eg setrange k1 2 xxxx
修改k1的值从下标2开始设置为xxxx
6.incr 自增1 但是只能是数值才行
7. incr k1 5 k1自增5
8.decr 同样的还有自减操作
9.strlen 获取字符串长度
10.append 字符串追加
11.getset 先获取再设置
分布式锁
分布式锁和sync/lock等锁有什么区别吗???
分布式锁和sync/lock等锁有什么区别吗???
sync/lock锁只能管自个虚拟机上的线程,而分布式锁可以管多个虚拟机的线程获取资源
大概的思路是这样的
在JVM和资源之间设置一个节点,谁先获取到节点建立KV键值对,就可以获取到数据(这个键值对是会被删除的)
List操作
首先我们知道redis底层的list实现是双端队列结构,所以两头的操作效率就很高,中间的操作效率就很低,下面我们介绍一下关于list的一些操作
1.lpush/rpush
l就是left r就是right 就是从左边加入list和从右边加入list
注:从右边加入的最后的select是与插入相同顺序,从左边就是逆序
2.lrange 查看range之内的数据
常用的lrange 0 -1 就是查看所有数据
3.lpop 从左边弹出
4.lindex list1 2 访问list1的下标为2的数据
5.llen 查看长度
6.lrem list1 n v1 从左边开始删除n个v1 返回值是删除的个数
7.ltrim list1 3 5 将list1赋值为从下标3到下标5的片段
8.rpoplpush 源列表 目的列表 从源列表的右边拿放到目的列表的左边
9.lset list1 index value 按照下标设置值
10.linsert list1 before /after 在已有值的前面和后面插入值
场景:微信订阅号文章的排版