在公司这么久,Redis使用的比较多,正好总结一下。redis的主要好处是:使用方便,简单,redis的实现源码好像也只有很少的代码,是一个很轻便的nosql。
用途:公司主要是用在一些实时数据的缓存,一些大量数据的入库(通过list类型),还有redis简单实现的订阅发布的功能。
最近nosql的红火,出现了好多这样的数据库,不过我也只用了redis这个,感觉挺好用的,就是简单,方便足够了。
1.redis的数据结构以及主要方法
redis
包括的属性:keys主要 方法: exists(key):判断key是否存在 del key:删除key rename key:修改key名字 dbsize():数据库key的数量 flushdb():删除当前数据库的所有key flushall():删除所有数据库的keystring类型主要方法: set(key,value):设置key对应的value setnx(key,value):设置要key不存在 mset():一次设置多个key的值 get key:获取key的值 append key value:给指定key追加value substr key start end:截取valuelist类型主要方法: lpush:在list头部添加值 rpush:在list尾部添加值 llen:返回list的长度 lrange:返回指定区间内的元素 lset:设置list指定下标的元素值。 lpop:从头部删除元素 rpop:从尾部删除元素set类型(无序集合通过hashtable实现)主要方法: sadd:添加一个元素到key对应的set集合中。 srem:删除指定元素 spop:删除key对应的set中随机的一个元素 scard:返回set的元素个数sorted set类型(和set类似,多了关联一个double类型的score 是skip list和hashtable的混合体)主要方法: zadd:添加元素到集合,元素在集合中存在则更新对应的score zrem:删除指定元素 zrank:返回指定元素的下标,集合中元素是按score从小到大排序的 zcount:放回集合中给定区间的数量 zscore:返回指定元素对应的scorehash类型主要方法: hset: 设置hashfield hget:获取指定的hashfield hexists:判断field是否存在 hdel:删除指定的hash field
2.订阅和发布
redis简单的实现了这个功能,在需求不复杂的情况下,感觉也挺方便的,不需要去引入其他的mq等服务器
Jedis有两种订阅模式: subsribe(一般模式设置频道)和psubsribe(使用模式匹配来设置频道)
订阅方jedis.psubscribe(listener, new String[]{"hello_*"})listener 这个要自己继承JedisPubSub这个抽象类,去实现订阅信息,取消订阅等方法。发布方 jedis.publish("hello_foo", "bar123");
3.事务和管道(简单的叙述)
事务:是指把指令发送过去之后,redis先放到队列中,并没有立即执行
管道:是把指令全部一起发送过去,然后一次性接收全部的结果
4.持久化(通过别人的文章)
1.持久化支持:快照(默认),aof方式
2.快照方式:是将数据先存储在内存,然后当数据累计达到某些设定的伐值的时候,就会触发一次DUMP操作,将变化的数据一次性写入数据文件(RDB文件)。
3.AOF 工作原理: 是将数据也是先存在内存,但是在存储的时候会使用调用fsync来完成对本次写操作的日志记录,这个日志揭露文件其实是一个基于Redis网络交互协议的 文本文件。AOF调用fsync也不是说全部都是无阻塞的,在某些系统上可能出现fsync阻塞进程的情况,对于这种情况可以通过配置修改,但默认情况不 要修改。AOF最关键的配置就是关于调用fsync追加日志文件的平率,有两种预设频率,always每次记录进来都添加,everysecond 每秒添加一次。两个配置各有所长后面分析。由于是采用日志追加的方式来持久话数据,所以引出了第二个日志的概念:rewrite
4.Rewrite
将日志文件中的所有数据都重新写到另外一个新的日志文 件中,但是不同的是,对于老日志文件中对于Key的多次操作,只保留最终的值的那次操作记录到日志文件中,从而缩小日志文件的大小。这里有两个配置需要注 意:
auto-aof-rewrite-percentage 100 (当前写入日志文件的大小占到初始日志文件大小的某个百分比时触发Rewrite)auto-aof-rewrite-min-size 64mb (本次Rewrite最小的写入数据良)
5.主从复制
1.master可以有多个slave
2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构
3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。
4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余
5.可以在master禁用数据持久化,只需要注释掉master配置文件中的所有save配置,然后只在slave上配置数据持久化。