五大数据类型
String
方法 | 用法 |
---|---|
set a b | 插入一条键为a,值为b的数据(如果有空格,字符串需加引号) |
get a | 查询键为a的值 |
mset a x b y c z | 添加多条数据a:x, b:y, c:z |
mget a b c | 查询多条数据a, b, c |
append a xyz | 在a的值后面加一段xyz(字符串拼接) |
strlen a | 查看a的字符串长度 |
incr n | n的值自增(n++,值为数字类型) |
decr n | n的值自减(n- -) |
incrby n 10 | n的值加10 |
decrby n 3 | n的值减3 |
List
方法 | 用法 |
---|---|
lpush list a | 左插入list值a |
rpush list b | 右插入list值b |
lpop list | 移除list最左边的一个值 |
rpop list | 移除list最右边的一个值 |
lrabge list 0 -1 | 查询list第0到倒数第1个元素,即全部元素 |
lrabge list 0 2 | 查询list第0到第2个元素,共3个 |
lindex list 1 | 查询list的第1个值(0开始) |
llen list | 获取list的长度 |
lrem list 2 a | 移除list中至多2个a(个数为0时表示1个) |
ltrim list 1 2 | 截取list的第1到2个元素,其他的删除 |
rpoplpush list list1 | 将list的最后一个元素移到list1里去 |
lset list 0 a | 把list的第0个元素改为a |
linsert list after a b | 在list的a后加一个b |
linsert list before a b | 在list的a前加一个b |
Set
去重集合
方法 | 用法 |
---|---|
sadd set a b c | 向set里插入a, b, c |
smembers set | 查看set的所有数据 |
sismember set a | 判断a在不在set里(在1,不在0) |
scard set | 查看set的长度 |
srem set a | 移除set里的a |
srandmember set 2 | set里随机取2个元素 |
spop set 3 | set里随机删除3个元素 |
smove set set1 a | 把set的a移到set1里 |
sdiff set1 set2 | set1和set2的差集 |
sinter set1 set2 | set1和set2的交集 |
sunion set1 set2 | set1和set2的并集 |
Hash
方法 | 用法 |
---|---|
hset hash a b | 在hash里插入a:b |
hget hash a | 获取hash里a的值 |
hgetall hash | 查询hash里所有的元素(键值都有) |
hdel hash a c | 删除hash里的a, c所对应的键值对 |
hlen hash | 获取hash的长度 |
hexists hash a | 判断hash存不存在a(1存在,0不存在) |
hkeys hash | 获取所有的key |
hvals hash | 获取所有的value |
hincrby hash a 2 | 给hash里a的值+2 |
hincrby hash a -3 | 给hash里a的值-3 |
hsetnx hash a b | 在hash里加a:b,成功1,已有0 |
zSet
有序集合
-inf 负无穷 +inf正无穷
方法 | 用法 |
---|---|
zadd zset a x b y c z | 向zset添加a:x, b:y, c:z |
zrange zset 0 -1 | 查询zset中第0到第-1个元素(全部) |
zrangebyscore zset -inf +inf | 正序排列zset |
zrangebyscore zset 0 3 | 正序排列zset,取值在0-3之间的 |
zrevrange zset 1 -1 | 倒序排列zset取第1到-1个的值 |
zrem zset x y | 移除值为x, y的元素 |
zcard zset | 查看zset的元素个数 |
zcount zset 0 2 | 取键在0-2之间的元素个数 |
事务和乐观锁
multi #开启事务
discard #放弃事务
exec #执行事务
watch money #监视money的值,即加上乐观锁(在事务中使用)
乐观锁:默认不会有其他程序使用这个变量,只有在这个变量将要发生变化是,比较一下数据有没有被变动,再决定事务是否能成功执行。
悲观锁:默认会有其他程序使用这个变量,所以会阻止任何程序访问,缺点是浪费资源
主从复制
- 主节点复制到从节点(单向)
- 一般主节点用于写操作,从节点用于读操作
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
slaveof x.x.x.x port #将某台主机的某个端口作为自己的主节点
如果机器宕机、断电等,主从关系就会消失,所以可以通过修改配置文件确定主从关系。
slaveof no one #从机可以用这个命令让自己变为主机
哨兵模式
配置
- 修改哨兵配置文件 sentinel.conf
# sentinel monitor 被监控的名称 主节点主机号 主节点端口号 监控数
sentinel monitor myredis 127.0.0.1 6379 1
票数的意思是,在多哨兵模式下,某个从节点只有获得了指定票数的哨兵的投票,才能成为主节点,一般来说票数默认填 1 。
- 开启哨兵模式
redis-sentinel sentinel.conf
原理
哨兵会以一定的频率向所有节点发送ping命令,距离最近一次收到有效回复一定时间后,会被标记为主观下线状态,然后其他的哨兵会以更快的频率确定主节点的状态,超过一定数量的哨兵确定了主节点的下线状态后,主节点会被标记为客观下线状态,这时候就会投票挑选从节点替换为主节点。
选出来之后,通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
缓存穿透、击穿、雪崩
穿透:大量的恶意请求,请求了一个redis中没有的值,导致直接请求到了持久层数据库(mysql),这样会给持久层数据库带来巨大压力
击穿:有一个redis的key承受着大量的访问,突然key到期了,访问直接请求到持久层数据库
雪崩:多个redis的key承受着大量访问,突然很多的key几乎同时到期了,访问直接请求到了持久层数据库