1.Redis介绍
Redis是一个基于内存的高性能的可持久化的NoSQL数据库。
Redis本质上是一个key-value类型的内存数据库,整个数据库全部加载在内存当中进行操作,定期通异步操作把数据库数据刷新到硬盘上进行保存。由于操作是全部在内存中,Redis的性能很优越,每秒大概可以处理超过10万次读写操作,是目前已知的性能最快的key-value数据库。而Redis最大的魅力是支持存储多种数据结构
Redis以key-value形式存储数据,key为字符串,value有五种数据类型:
名称 | 命令 | 备注 |
---|---|---|
字符串 | String | value 不仅可以是 String,也可以是数字 |
列表 | List | 链表(redis 使用双端链表实现的 List),支持重复元素 |
集合 | Set | Set 集合的概念就是一堆不重复值的组合,不允许重复元素 |
字典 | Hash | 数据值打包成 hashmap,在客户端序列化后存储为 JSON 格式 |
有序集合 | Sorted Set | Set 中的元素增加了一个权重参数 score, 有序不重复 |
2.下载&安装
下载地址:
官网:https://redis.io
中文网: http://www.redis.net.cn
GitHub地址: https://github.com/microsoftarchive/redis/releases
Redis安装:
直接解压即可
3.Redis特点
Redis的好处:
运行速度快,数据存储在内存中,类似于HashMap
支持丰富数据类型,支持string,list,set,sorted set,hash;
支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么是全部执行,要么就全部不执行;
丰富的特性:可用于缓存,消息,按key设置的过期时间 ,过期后将自动删除
缓存思想:
浏览器第一次访问服务器的时候,第一次查询数据库得到数据返回给前端展示,并将查到的数据存储到Redis中,第二次访问或者之后所有具有相同的操作的时候,直接从Redis中获取数据.
频繁的对数据库进行操作,会影响程序的性能,可以将一些不常发生变化或者根本就没发生变化的数据存储在缓存中,做到减少数据库的操作,提高程序的执行能力.
4.命令操作
类型 | 存储 | 获取 | 删除 |
---|---|---|---|
字符串类型 string | set key value | get key | del key |
哈希类型 hash | hset key field value | hget key field(hgetall key) | hdel key field |
列表类型 list | lpush(rpush) key value | lrange key start end | lpop(rpop) key |
集合类型 set | sadd key value | smembers key | srem key value |
有序集合类型 sortedset | zadd key score value | zrange key start end [withscores] | zrem key value |
5.持久化
Redis 是将数据存储在内存中的,如果Redis重启那么数据就会丢失,最好的解决方案就是持久化
RDB持久化:在指定的时间间隔内将内存中的数据集快照写入磁盘。
修改redis.windows.conf 配置文件添加快照策略,达到策略的某些条件时来自动持久化数据:(每隔900秒,在这期间变化了至少一个键值,做快照。或者每三百秒,变化了十个键值做快照。或者每六十秒,变化了至少一万个键值,做快照。)
save 900 1
save 300 10
save 60 10000
AOF持久化:以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
6.Jedis
Jedis是Java连接Redis的客户端工具,提供相关数据的操作方法,每个操作数据的命令都会对应一个方法
导入依赖:
Maven引入Jedis的依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.7.0</version>
</dependency>
配置属性文件:
#最大活动对象数
redis.pool.maxTotal=50
#最大能够保持idel状态的对象数
redis.pool.maxIdle=10
#最小能够保持idel状态的对象数
redis.pool.minIdle=50
#当池内没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
redis.pool.timeBetweenEvictionRunsMillis=30000
#向调用者输出“链接”对象时,是否检测它的空闲超时;
redis.pool.testWhileIdle=true
# 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
redis.pool.numTestsPerEvictionRun=50
#redis服务器的IP
redis.ip=127.0.0.1
#redis服务器的Port
redis1.port=6379
Spring Data Redis:
Jedis是Redis面向Java的客户端,Spring-data-redis是对redies的高度封装,RediesTemplate提供了redis的各种操作,异常处理及序列化,支持发布订阅
spring-data-redis针对jedis提供了如下功能:
1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类
2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
ValueOperations:简单K-V操作-----redisTemplate.boundValueOperations
SetOperations:set类型数据操作-----redisTemplate.boundSetOperations
ZSetOperations:zset类型数据操作-----redisTemplate.boundZSetOperations
HashOperations:针对map类型的数据操作-----redisTemplate.boundHashOperations
ListOperations:针对list类型的数据操作-----redisTemplate.boundListOperations