1.Redis的引言
a)Redis的概念
redis基于内存的Key Value类型的NoSQL数据库.
b)NoSQL(Not Only SQL)
一种特定的数据库分类
1.关系型[结构]数据库(RDB) Oracle MySQL DB2 Postgre SQLServer.
2.NoSQL类型的数据库, 非关系型的数据库产品.
c)NOSQL类型的数据库特点
1.Schemaless 弱结构化 (忽略表格 行 列)
2.In-Memory 内存型产品
3.弱化事务 (没有事务 事务很简单) RDB+NOSQL
4.适用于Cluster环境
5.没有复杂的连接查询操作
6.脚本语言支持(javascript lua)
d)NOSQL常见产品
1.Redis (key value) kv
2.MongoDB (文档) JSON
3.HBASE (column 类型的NOSQL)
4.Cassandra (永远没有单节点故障)
e)Redis的特点
-
Redis是一个高性能的Key/Value数据库
-
基于内存
-
数据类型丰富
-
持久化
-
订阅/发布模型
f) Redis与Memcache区别
Redis是一个内存型数据库产品,而Memcache是一个内存型缓存产品,Redis可
以对内存中的数据进行持久化,而Memcache不行 -
Redis的安装
2.基本命令
flushall 清空redis中所有的key
keys * 显示redis中所有的key值
set key value 存储一个数据
get key 根据key获取对应的值
3.Redis的数据类型
注意:Redis的数据类型 指的是value类型 key的类型都是字符串.
a)字符串类型 [重点]
注意: 不做字符串 与 数字区分
set
get
mset
mget
strlen
getrange
setex key 10 value
setnx 如果key不存在 创建新的值
如果key存在 不覆盖
b)List类型 (有序 可重复)
lpush | lpushx
rpush | rpushx
lpop|rpop
lrange
llen
linsert names before suns3 suns0 [了解]
c)Set类型(无序 不可重复)
sadd
smemebers
sismember
scard
d)Zset[重要 排行榜]
zadd key score value
zrange
zrangebyscore
zrank 下标
zscore 获取某一个元素的分值
zincrby key score 元素
e)Hash[了解]
hset
hget
hkeys
Hvals
4.基础命令的补充
a)keys *
b)select
选择数据库
redis的内部默认设计了16数据库 redis.conf配置文件指定的
c)flushall
清空所有数据库中的key
d)flushdb
清空当前数据库中的key
e)expire
设置 某一个key的有效期
expire key 时间
账号冻结
account_no 1
expire account_no 时间
秒杀
排行榜
f)ttl
查询一个key的剩余有效期
g)del
5.Redis的JavaClient
a)Jedis工具类中 方法 与 redis的shell命令 同名 作用相同
b)JedisUtils
6.Redis的持久化
a)为什么需要持久化
因为Redis是一个内存性的数据库,为了保证数据在内存掉电时的安全,所以需要进行持久化操作
b)Redis的持久化(2种方案)
1.Snapshotting(RDB) 全本式复制 快照赋值
a)RDB机制的完成流程
1 redis的主进程 fork子进程 完成RDB写操作
2 redis的主进程对提供服务,子进程会把当前数据库中的数据,写入临时文件
3 当临时文件写好之后,覆盖原有的RDB快照文件
b)RDB机制的运行时机
1.自动RDB操作
修改redis.conf文件
默认的配置
2.手工RDB操作
save:
Redis会用主进程 进行RDB文件的处理
bgsave 主进程 fork 子进程完成RDB处理
c)RDB机制的问题
1.在2个保存点之间,有可能存在数据的丢失
2.AOF机制 (增量式复制 日志式复制)
注意:默认redis会使用RDB的方式进行持久化.
redis中即使用RDB 又使用AOF ,redis会应用AOF
a)AOF运行机制
AOF比RDB更加安全,记录每一次的写操作.但是如果在写的过程中掉电,也会丢失少量数据
b)AOF的使用
1.自动AOF
redis.conf配置文件
2.AOF中的注意细节
a)文件同步机制
b)日志文件的重做
把日志文件中的命令,进行合理的合并.
根据当前Redis数据的状态,从新写一个aop文件
i.bgrewriteaof
ii.自动 redis.conf
3.Redis持久化的坑
假定初始Redis使用RDB进行持久化 , 切换AOF进行持久化.问题?
RDB — bgsave ---- dump.rdb
AOP — appendonly.aof 获取数据
热切换:
改变redis.conf文件 appendonly yes
1.Redis的内存管理[调优]
a)内存碎片
问题:影响内存的利用率
b)内存管理目的
减少内存碎片.
借用的第三方的工具(库)完成
c)推荐使用google提供的jemalloc
1.yum jemalloc
2.
2.Redis的实战开发场景(一)
a)Redis用于管理集群环境下的Session
b)应用Redis进行集群环境下的Session管理 ,那么Redis如何设计?
key(sessionid) value(session的数据 二进制)
c)开发步骤
3.Redis的实战开发场景(二)
a)Redis充当Tomcat 与 DB之间缓存
b)Redis充当缓存的实现思路
c)Mybatis与Redis集成 应用全局缓存
定制MyBatis中的Redis缓存 Cache接口(Jedis)
d)如何把java中对象 ---- byte[] 序列化
1.Java IO java_serliazble
2.Fastjson
e)Jedis实现Cache接口
f)应用RedisCache
1.Mybatis-config.xml 开启全局缓存
2.Mapper 设置<cache标签
3.注意:
1 session关闭时 mybatis才会把数据 存储在缓存中
2 事务提交时 mybatis清空缓存 解决脏数据的问题
4.Redis集群操作
a)Replication(Replica 复制 副本集 主从复制 主备复制)
1.Redis副本集的开发
redis.conf 文件中 配置 slaveof masterip masterport
2.Redis副本集的运行过程
b)Sharding [Shard](分库 分表) 分片
1.分库分表的基本概念(RDB)
a)分表
b)分库
c)Redis中的Sharing
1.程序员通过jedis客户端 手工编码完成client分片
2.Jedis Client Sharding标准代码
5.Redis拾遗
a)构建Redis的自启动系统
b)Redis3.x的集群 特点 服务器端自动Sharding
注意: ruby