NoSQL特点:
解耦!

1.方便扩展(数据之间没有关系,很好扩展!)
2.大数据高性能(Redis一秒写8万次,读取11万次,NoSQL的缓存记录数,是一种细粒度的缓存,性能会比较高!)
3.数据类型是多样型的(不需要事先设计数据库,随取随用,如果是数据量特别大的表,很多人就无法设计了)

3V+3高:

大数据时代的3V,主要描述的是:
	1.海量volume
	2.多样variety
	3.实时velocity
大数据时代的3高:主要是对程序的要求
	1.高并发
	2.高性能
	3.高可扩

redis事务:
执行过程:

开启事务(multi)
命令入队
执行事务(exec)

本质:一组命令的集合!
Redis单条命令式保持原子性的,但是事务不保证原子性

DISCARD 	#取消事务
编译型异常(代码有问题!命令有错!),事务中的所有命令都不会被执行!
运行时异常(1/0),如果事务队列存在语法性,那么执行命令的时候,其他命令是可以正常执行的,错误命令抛出异常!

悲观锁:
很悲观,认为什么时候都会出问题,无论做什么都会加锁!

乐观锁 :
很乐观,认为什么时候都不会出问题,所以不会上锁,更新数据的时候去判断一下,在此期间是否有人修改过这个数据。
获取version
更新时比对这个version

测试多线程修改值,使用watch可以当做redis的乐观锁的操作!

可能是方法最全Redis静态工具类 redis精讲_java


可能是方法最全Redis静态工具类 redis精讲_redis_02

springboot整合:
使用spring-boot-starter-data-redis操作redis
说明:在springboot2.x之后,原来使用的jedis被替换成了lettuce
jedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,采用jedis pool连接池,BIO
lettuce:采用netty,实例可以在多个线程中进行共享,不存在线程不安全的情况,可以减少线程的数据,更像NIO模式

RedisTemplate模板操作类介绍:

默认的RedisTemplate没有过多的设置	,redis对象都是需要序列化
两个泛型都是Object,Object的类型,我们使用需要强制转换
由于string是常用的类型,所以单独提出来一个bean stringRedisTemplate

RedisTemplate对象的序列化配置:
@Configurable
public class RedisConfig {

@Bean
@SuppressWarnings("all")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(factory);
    //json序列化配置
    Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper om = new ObjectMapper();
    // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    serializer.setObjectMapper(om);

    //string的序列化
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    //hash的key采用string的序列化方式
    template.setHashKeySerializer(stringRedisSerializer);
    //value序列化方式采用jackson
    template.setValueSerializer(serializer);
    //hash的value序列化方式采用jackson
    template.setHashValueSerializer(serializer);
    template.afterPropertiesSet();
    return template;
 }
}

Redis.conf详解

启动的时候,就是通过配置文件来启动

可能是方法最全Redis静态工具类 redis精讲_可能是方法最全Redis静态工具类_03


1.配置文件unit单位对大小写不敏感

2.可以通过include包含其他配置文件,例如:include /path/to/local.conf

3.网络:

bind 127.0.0.1 	#绑定的IP
protected-mode yes	#保护模式
port 6379		#端口设置

4.通用GENERAL:

daemonize yes	#以守护进程的方式运行,默认是no,我们需要自己开启为yes
pidfile	/var/run/redis_6379.pid	#如果以后台的方式运行,我们就需要指定一个pid 文件

5.其他
loglevel notice #日志
logfile “” #日志的文件位置名
database 16 #数据库的数量,默认是16个数据库
always-show-logo yes #是否总是显示log

快照(rdb):
持久化,在规定的时间内,执行了多少次操作,则会持久化到文件.rdb .aof
redis是内存数据库,如果没有持久化,那么数据断电就会丢失!

save 900 1	#如果900s内,如果至少有一个key进行了修改,我们即进行持久化操作
save 300 10	#如果300s内,如果至少有10个key进行了修改,我们即进行持久化操作
save 60 10000	#如果60s内,如果至少有10000个key进行了修改,我们即进行持久化操作

stop-writes-on-bgsave-error yes #持久化如果出错,是否还需要工作
rdbcompression yes #是否压缩rdb文件,需要消耗一些cpu资源
rdbchecksum yes #保存rdb文件的时候,进行错误检查的校验
dir ./ #rdb保存的目录

SECURITY安全
可以在这里设置redis的密码*(默认无密码)
使用命令:
config set requirepass ‘123456’ #设置密码(也可以在配置文件写requirepass ‘123456’)
config get requirepass #获取密码,没有验证密码则报错
auth 123456 #验证密码

限制CLIENTS
maxclients 10000 #设置能连接上Redis的最大客户端数量
maxmemory #redis配置最大的内存容量
maxmemory-policy noeviction #内存达到上限之后的处理策略

noeviction: 不删除策略, 达到最大内存限制时, 如果需要更多内存, 直接返回错误信息。(默认值)
allkeys-lru: 所有key通用; 优先删除最近最少使用(less recently used ,LRU) 的 key。
volatile-lru: 只限于设置了 expire 的部分; 优先删除最近最少使用(less recently used ,LRU) 的 key。
allkeys-random: 所有key通用; 随机删除一部分 key。
volatile-random: 只限于设置了 expire 的部分; 随机删除一部分 key。
volatile-ttl: 只限于设置了 expire 的部分; 优先删除剩余时间(time to live,TTL) 短的key。

APPEND ONLY模式 aof配置
appendonly no #默认不开启,默认是使用rdb方式持久化的,在大部分的情况下,rdb完全够用
appendfilename “appendonly.aof” #持久化的文件名称
appendfsync everysec #aof保存机制

everysec	 #每秒执行一次,可能丢失这一秒的数据
always		#每次修改都会执行,消耗性能
no	#不执行sync,这个时候操作系统自己同步数据,速度最快