1. Redis概述
1.1. 什么是NoSql
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,它泛指非关系型的数据库。随着互联 2003年之后web2.0 站的兴起,传统的关系数据库在应付web2.0 站,特别是超大规模和高并发的交友类型的web2.0纯动态 站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
关系型数据库:就是以关系模型来建模的数据库管理系统。关系模型就是以行和列组成二维表。
Web1.0:只提供数据的读的能力
Web2.0:更强调写的能力。论坛,购物,贴吧…
Web3.0: 移动化,物联化供数据的读能力,虚拟化,智能化、云计算。
Web4.0 直播(并发技术)、AI(学习能力)、大数据(IT-DT)
1.1.2. 分类
http://www.nosql-database.org/
Memcached和Redis都是key-value类型的Nosql,主要区别在于redis支持的Value类型更多,redis不仅支持内存存储,还支持持久化到磁盘。
1.5. 使用场景
1.5.1. 缓存
经常查询数据,放到读速度很快的空间(内存),以便下次访问减少时间。减轻数据库压力,减少访问时间.而redis就是存放在内存中的。
Hibernte二级缓存(ehcache)
1.5.2. 计数器应用
站通常需要统计注册用户数, 站总浏览次数等等
新浪微博转发数、点赞数
1.5.4. 排行榜
总积分榜,今日积分榜,周积分,月积分,季度积分
方案:从数据库中查出来计算.
3.启动redis服务(带配置文件启动,和不带配置文件启动)
2.2. Linux下的安装和使用(了解)
1下载redis源码
wget http://download.redis.io/releases/redis-3.0.6.tar.gz
或者使用sftp上传redis-3.0.6.tar.gz
2安装redis
tar xf redis-3.0.6.tar.gz //解压
cd redis-3.0.6
//不需要配置参数 不需要执行./configure
make && make install//编译&&安装
3将redis设置为系统服务
cp (redis源码目录)utils/redis_init_script /etc/init.d/redis
vim /etc/init.d/redis //修改红框处的代码
4修改redis.conf配置文件
mkdir /etc/redis //创建/etc/redis目录
cp redis.conf /etc/redis/redis.conf
vim /etc/redis.conf
//将redis配置文件复制到redis
//设置为守护进程,以后台方式运行
使用service redis start命令启动redis服务.
5 将redis服务设置为开机启动
chkconfig –-add redis
chkconfig –level 35 redis on
3. Redis操作
3.1. 使用redis-cli 客户端操作redis
redis是key-value类型的Nosql,命令能操作key和Value,而对于key就是String,而Value就有很多类型(String,list,set,hash…).
3.1.2. 对key的常用操作
keys * //获取所有key列表
del key //删除key
expire key xx //设置key的过期时间(xx秒后过期)
ttl key //查看key的过期时间
flushall //清空整个redis服务器数据,所有的数据库全部清空
flushdb //清除当前库,redis中默认有16个数据库,名称分别为0,1,2.。。15(可以用select index 命令来切换数据库)
3.1.5. 对SortedSet(有序集合)的操作
3.1.7. 事务(重要)弱事务) (TCC、消息一致性)
multi //标记一个事务块的开始。
exec //执行所有事务块内的命令。
3.1.9. 设置密码(了解)
4.2. Jedis数据结构操作
使用jedis来操作redis的key和value,而value有很多种类型,和命令操作一样。
4.2.1. Key操作
4.2.3. List操作
4.2.5. Hash操作
Redis 提供了两种不同级别的持久化方式:RDB和AOF,可以通过修改redis.conf来进行配置.
6.2. Redis Spring集成
一般项目总都是有Spring,我们使用jedis访问reids时,所有要jedis被Spring管理。集群原理就是把核心对象交给Spring管理。
Jedis核心对象:配置文件,连接池配置对象,连接池。
集成方式有两种:
Spring data-redis
自己封装(自己封装)
导入jar包
准备配置文件,配置核心对象
加载配置文件
连接池配置对象
连接池对象
管理连接对象
操作crud模板
把配置文件集成Spring–以外部文件的方式进行导入
测试
通过crud模板操作redis
6.3. Redis经典实用场景-缓存
6.3.1. 为什么要使用缓存
把经常查询的数据,很少修改的数据存放到缓存中,减少访问数据库,降低数据库压力并且缓存一般都是内存,访问速度比较快。
6.3.2. 哪些数据适合放到缓存中
经常查询:缓存就是提供数据查询高效访问。
很少修改:修改时要同步修改缓存和数据库
例如:地区数据、商品分类、数据字典 菜单(不考虑权限)
6.3.3. 选择合适的缓存
Hibernate二级缓存,mybatis二级缓存,redis中央缓存
Hibernate二级缓存,mybatis二级缓存默认不支持集群缓存,要使用redis
6.3.4. 怎么存储数据
1) json:把要存放的数据转换为json类型的字符串
保存缓存时:
Java Object———–>json字符串
获取缓存:
json字符串——–>Java Object-
Json框架:jdk-json-lib jackson gson fastjson
6.4. 淘汰策略
6.4.1. 为什么要淘汰数据
淘汰一些数据,达到redis数据量都是有效的。选择合适的淘汰策略进行淘汰.怎么淘汰
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意(随机)选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据(不删除任意数据.默认策略,但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误)
redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!