redis缓存数据库
1.了解nosql起源
nosql:非关系型数据库,解决关系型数据库的数据存取瓶颈,大数据量的存储,频繁的查询行为。
没有统一的标准,做不到学了一个nosql,其他的都可以会。
nosql数据大多数基于内存,但是因为内存不可靠,一般都会提供持久化机制,在启动服务端的时候,把持久化数据再次加载到内存。
2.nosql的几种常用的数据库.
KV数据库:key-value键值对数据库,ehcache与项目耦合,memcache独立部署服务器,redis
文档数据库:存的是bson对象数据,mongodb,能够取代mysql,基于内存,数据字段可扩展。尤其适合于数据分析行业。
列式数据库:HBase,大数据平台。尤其适合于超大数据量的存储。
图形数据库:数据关系拓扑图,适合于社交平台,论文系统。
3.redis的使用场景以及带来的相关问题:
使用场景:解决分布式场景下数据共享问题(HttpSession共享);存储临时数据(验证码,文件下载数,用户积分,购物车);存储系统中常用数据缓存(系统用户信息,用户权限列表信息,字典项数据);消息队列(发短信,发邮件等耗时间的操作统统都可以放消息队列进行异步操作)
常用数据的缓存带来的问题:多数据源数据同步问题
方案1:(增删改操作mysql数据库,清理缓存对应的数据;查询操作先查缓存,缓存没有,则查询数据库,把查询结果放缓存)
方案2:(增删改操作mysql数据;查询操作先查缓存,缓存没有,则查询数据库,把查询结果放缓存,放缓存的时候给缓存数据设置有效期)
4.redis的环境搭建
-
服务端:
redis-server.exe:加载redis-windows.conf启动redis服务端
redis-server.exe redis.windows.conf
redis-cli.exe:命令行客户端程序,用来连接服务端,执行指令
redis-cli.exe -h ip -p port -a password
redis-check-aof.exe:检测aof持久化文件,修复该文件
check-check-aof.exe --fix aop文件名
redis-check-dump.exe:检测dump持久化文件,修改该文件
redis-check-dump.exe --fix dump文件名
redis-windows.conf:核心配置文件,配置端口,密码等信息。
端口号: port 6379 默认数据库个数: databases 16 RDB持久化策略: save 900 1 save 300 10 save 60 10000 RDB持久化文件的名称和目录: dbfilename dump.rdb dir ./ 启动连接密码: requirepass foobared 开启aof持久化: appendonly yes aof持久化文件的名称: appendfilename "appendonly.aof" aof文件的重写策略: auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
-
桌面可视化客户端程序:
redis-desktop-manager
5.redis的持久化策略
RDB持久化:存的是kv数据,按照策略保存,风险更大。
AOF持久化:存的是指令,每秒保存一次
6.redis的常用操作指令
redis的针对value的5种数据类型,
key:String
value:string,list,hash,set,zset,使用频率最多的就是String,Hash
相关指令:
string:set/get/incr/decr/incrby/decrby/setex/setnx(分布式锁)/getset(复合指令)
set/get
list:适合存储列表性数据,消息队列,红包列表(特征:数据不改变只获取)
lpush/lpop/lrange/llen/lindex
hash:适合于存储集合,系统用户集合(手机号做key,用户详情作为value)
hset/hget/hdel/hexists/hgetall/hkeys/hvals/hlen/hsetnx
set:无序集合,相对于list来说,数据无序,适合于做集合的交并差
sadd/spop/sdiff(差集)/sunion(并集)/sinter(交集)/smembers
zset(sortedSet):适合于数据需要按照指定的字段进行排序的场景。(排名榜单)
zadd
zscore:取得成绩
zrank:升序排序后的排名
zrevrank:降序排序后的排名
zcount:获取成绩区间的成员个数
zrange:获取升序排名区间的成员
zrevrange:获取降序排名区间的成员
zrangebyscore:获取成绩区间的成员
key相关指令:对key的操作,
del/type/keys/ttl/expire/exists
7.redis的javaApi:
jedis:客户端组件
new Jedis("",int).auth().api方法调用
8.redis的集群搭建:
-
客户端的分片集群方案
服务端启动的多个redis服务之间没有任何关系,是独立的reids服务。
代码调用者,通过维护多台redis服务的连接。
缺点:服务器无法横向扩展(代码中维护服务器连接信息;当扩展了新服务器后,原服务器中的数据迁移难)
-
服务端哨兵集群方案,第四阶段,可以横线扩展
哨兵服务器(管理其他服务器)
服务端启动的多个redis服务,服务器之间有数据交互通道。
-
服务端cluster集群方案。
总结:
5个类型,
String:set/get/setex
hash:hset/hget/hdel
list:lpush/lrange
set:无序集合,交并差,s*
zset:数据排序,z*
ShardedJedisPool