Redis

1.Redis简介

是一种可用来更合适地处理高并发、高可用、高扩展的问题的Nosql非关系型数据库。Redis可用作内存数据库(保存登录用户数据)和缓存服务器(保存缓存常用数据:功能分类等)使用。

2.Redis数据类型(value的类型)

2.1String类型
基本操作

127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123“

数值增减
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
2.2Hash类型
在这里插入图片描述

127.0.0.1:6379> hset user username zhangsan 
(integer) 1
127.0.0.1:6379> hget user username
"zhangsan“

2.3List类型

127.0.0.1:6379> lpush list:1 1 2 3
(integer) 3
127.0.0.1:6379> rpush list:1 4 5 6
(integer) 3

2.4Set类型
数据是不重复且没有顺序

127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd set a
(integer) 0
127.0.0.1:6379> srem set c d
(integer) 1

2.5Zset类型

127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu 
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi 
(integer) 0

3.Redis事务

3.1概念
Redis的事务是通过MULTI,EXEC,DISCARD和WATCH这四个命令来完成的。
Redis的单个命令都是原子性的,所以这里确保事务性的对象是命令集合。
Redis将命令集合序列化并确保处于同一事务的命令集合连续且不被打断的执行。
Redis不支持回滚操作。
3.2事务命令
MULTI
用于标记事务块的开始。
Redis会将后续的命令逐个放入队列中,然后使用EXEC命令原子化地执行这个命令序列。
语法:multi
EXEC
在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态
语法:exec
DISCARD
清除所有先前在一个事务中放入队列的命令,然后恢复正常的连接状态。
语法:discard
WATCH
当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的状态。
语法:watch key [key…]
注意事项:使用该命令可以实现redis的乐观锁。
UNWATCH
清除所有先前为一个事务监控的键。
语法:unwatch

4.Redis实现分布式锁

方式1(使用set命令实现):

/**
	 * 使用redis的set命令实现获取分布式锁
	 * @param lockKey   	可以就是锁
	 * @param requestId		请求ID,保证同一性
	 * @param expireTime	过期时间,避免死锁
	 * @return
	 */
	public static boolean getLock(String lockKey,String requestId,int expireTime) {
		//NX:保证互斥性
		String result = jedis.set(lockKey, requestId, "NX", "EX", expireTime);
		if("OK".equals(result)) {
			return true;
		}
		
		return false;
	}

方式2(使用setnx命令实现):

public static boolean getLock(String lockKey,String requestId,int expireTime) {
		Long result = jedis.setnx(lockKey, requestId);
		if(result == 1) {
			jedis.expire(lockKey, expireTime);
			return true;
		}
		
		return false;
	}

5.Redis持久化方案

RDB方式(默认)
通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。
AOF方式
每次更改数据的时候, aof机制都会将命令记录到aof文件,但是实际上由于操作系统的缓存机制,数据并没有实时写入到硬盘,而是进入硬盘缓存。再通过硬盘缓存机制去刷新到保存到文件

6.Redis的主从复制

实现备份功能:

  • Redis的主从同步,分为全量同步和增量同步。
  • 只有从机第一次连接上主机是全量同步
  • 断线重连有可能触发全量同步也有可能是增量同步(master判断runid是否一致)
  • 除此之外的情况都是增量同步

7.Redis哨兵机制

Redis主从复制的缺点:没有办法对master进行动态选举,需要使用Sentinel机制完成动态选举(当主master挂掉之后,从机动态顶替挂掉的主机,成为新的主master)

8.Redis Cluster集群

redis cluster集群保证了高可用、高性能、高可扩展性。

9.13缓存穿透、缓存雪崩、热点缓存

缓存穿透:
redis不存在key对应的value,并且对该key并发请求量很大,就会对后端系统造成很大的压力
如何解决?
对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。
缓存雪崩:
大量缓存集中在某一个时间段失效,高并发时,也会给后端系统(比如DB)带来很大压力
如何解决?
不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀
热点缓存:
key可能会在某些时间点被超高并发地访问
如何解决?
使用redis的setnx互斥锁先进行判断,这样其他线程就处于等待状态,保证不会有大并发操作去操作数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值