NoSQL简介:(易扩展,灵活的数据库模型,大数据量,高性能,高可用)
Redis:(高性能键值对数据库,读11w次/s ,写8.1w次/s)
支持类型:字符串类型(String) ,列表类型(list),散列类型(set),集合类型(hash),有序集合类型(sorted set)
Redis应用场景:缓存,聊天室好友列表,任务队列,网站访问统计,数据过期处理,应用排行榜,
分布式集群架构中的session分离
Linux安装(CentOs6.5):
1.安装gcc环境:yum install gcc-c++
2.下载redis 安装压缩包(wget http://download.redis.io/redis-stable.tar.gz)
3.解压redis 安装包:tar -zxvf redis-stable.tar.gz
4.进入 redis-3.0.7# make
5.安装redis: make PREFIX=/user/local/redis install (PREFIX:安装到指定目录下)
6.将redis-3.0.7 下的redis.conf 拷贝到 安装目录下
(redis-3.0.7# cp redis.conf /user/local/redis )
7.(前端启动)启动redis : redis/redis-server
8.(后端启动)
①修改配置文件 vim redis.conf
将 daemonize no 改为 daemonize yes
②./bin/redis-server ./redis.conf
(默认端口为6379)
9.停止服务: ./bin/redis-cli shutdown
10.进入客户端:./bin/redis-cli
11.设置防火墙:vim /etc/sysconfig/iptables
新添一条: -A INPUT state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
重启防火墙:service iptables restart
set /get 存储/获得 数据:
存储: set name imooc
获取: get name
删除: del name
获取所有keys: keys *
获取my开头的keys: keys my?
重命名key :rename name newname
设置keys过期时间: expire newname 1000(秒为单位)
查看keys过期时间:ttl newname
查看keys类型:type newname
清空数据库:flushall
Jedis (redis 连接的基本操作):
开发包下载: http://github.com/xetorthio/jedis
连接池方式连接Jedis
//1.获得连接池的配置对象:
JedisPoolConfig config = new JedisPoolConfig();
//设置最大连接数
//设置最大的空闲连接数
//获得连接池
JedisPool jedisPool =new JedisPool(config,"IP地址",6379); //需开启服务器6379的端口
//获得核心对象:
Jedis jedis = jedisPool.getResource();
//操作完之后要释放资源
jedis.close();
---------------Redis常用key----------------------
List类型:
1、ArrayList 使用数组方式
2、LinkeList 使用双向链接方式
常用函数:
lpush list :从左依次添加
rpush list:从右依次添加
lrange list 0 -1 :查询从第一个到倒数第一个
lpop list:删除左边第一个元素
rpop list:删除右边第一个元素
llen :查看list长度
lpushx list : 当数组存在时才往左边插入一个
lrem list 2 3: 删除list 从头到尾2个“3”
lrem list -2 3: 删除list 从尾到头2个“3”
lrem list 0 3: 删除list 中所有的“3”
lset list 3 mmm :在list索引为3处替换为“mmm”
linsert list befor b 11 :在list 第一个“b”之前插入“11”
linsert list after b 22 :在list 第一个“b”之后插入“22”
rpoplpush list1 list2 :将list1最右边的元素删除 并 插入到 list2 的最左边
Set类型:
(无序,不允许出现重复的元素) 场景:跟踪唯一的数据,用于维护数据对象之间的关系(比如两个客户都买了什么东西 )
常用函数:
sadd myset 。。:添加元素
srem myset 。。:删除元素
smembers myset:查询元素
sismember myset a :若元素存在set中则返回1,否则0
例:set1中有 a b c set2中有 a c 1
sdiff set1 set2:差集,返回 存在set1中 却不存在于set2中的元素
返回“b”
sinter set1 set2 :交集,返回两个set都有的元素
返回“a”,"c"
sunion set1 set2:并集,
返回 "a","b","c","1"
scard set1:得到数量:
返回3
srandmember set1:随机获取
返回set1中的元素
sdiffstore my1 set1 set2:将set1,set2差集存入my1
my1中存入 “b”
sinterstore my2 set1 set2 :将交集存入my2
sunionstore my3 set2 set2:将并集存入my3
Sorted-Set:
(每个元素都需要有一个分数)
和set的区别是:sorted-set 中的成员在集合中是有序的
访问sorted-set中部成员也是高效的
应用场景:游戏排名,微博热点话题,构建索引数据
常用函数:
zadd mysort 60 zs 70 wz 80 ls:添加成员
zscore mysort zs:获取成员分数 (返回“60”)
zadd mysort 100 zs:若元素存在sorted-set 中 则替换之前成员的分数
zscore mysort zs:获取成员分数(返回“100”)
zcard mysort :获取sorted长度(返回3)
zrem mysort zs wz:移除sorted-set 中的 zs 和 wz
zrange mysort 0 -1 :查出成员,按照分数大小排序
zrange mysort 0 -1 withscores: 查出成员和分数
zrevrange mysort 0 -1 :从大到小查出成员
zremrangebyrank mysort 0 4:按分数从小到大删除 4个
zremrangebyscore mysort 80 100 :删除分数在80到100之间的成员(包含80,100)
zrangebyscore mysort 0 100:将分数在0~100之间的成员查出来
zrangebyscore mysort 0 100 limit 0 2:将分数在0~100之间的成员查出来显示前两个
zincrby mysort 3 ls :将成员“ls”的分数加3
zcount mysort 80 90 :返回80~90分数的成员个数
Redis的特性:
多数据库:
一个Redis实例可包含多个(16个:0~15号数据库)数据库,客户端默认连接 0号数据库
move:(将key移到其他数据库)
0数据库下:move myset 1(将0号数据库的myset移到1号数据库)
Redis事务:
multi:开启事务
exec:提交事务
discard:回滚事务
Redis持久化:(缓存机制)
RDB方式(默认支持):在指定的时间间隔内,将内存中的数据及快照写入到磁盘
优势:一旦采用这种方式,redis数据库将只包含一个文件,便于数据库的备份(比如每每天备份归档一次数据库,可以使用这种方式非常方便);性能最大化,开始持久化时,只是分化出一些进程,然后由子进程完成持久化工作,极大的避免服务器进程执行IO的操作,对比AOF,如果数据量很大,数据库的启动要比AOF的要快
劣势:因为有指定的时间间隔,所以不能很好的
保证数据的 高可用性(即最大限度的避免数据的丢失);因为是由分化的子进程完成工作,所以当数据集很大时,可能导致服务器停止几毫秒甚至1秒钟
配置:进到redis路径下的 redis.conf(145行左右)
save 900 1 :每900秒,至少有1个key发生变化 那么持久化一次(往硬盘写一次)
save 300 10 :每300秒,至少有10个key发生变化 那么持久化一次
save 60 10000 :每60秒,至少有10000个key发生变化 那么持久化一次
dbfilename dump.rdb :持久化保存的文件名 (195行左右) 下面的 dir为配置的文件路径
AOF方式:以日志的方式记录服务器处理的每一个操作,数据库启动之初将读取该文件,然后重新构建数据库,来保证启动后数据库中的数据是完整的
优势:更高的数据安全性,三种同步策略:每秒同步(异步同步),每修改同步(同步持久化),不同步 ;日志是append形式写入的(若出现down机可用:redis -check -AOF 可解决数据一致性的问题); 格式清晰,易于理解(易于数据重建);
劣势:文件大于RDB文件,效率低于RDB
配置:进到redis路径下的 redis.conf(509行)
appendonly no 改为 appendonly yes
数据库文件为: appendfilename “appendonly.aof”
538行左右是 同步策略的设置:(选择一种)
appendsync always :每修改同步
# appendsync everysec:每秒同步
# appendsync no :不同步
配置完之后要重启一下redis
无持久化:通过配置来禁用持久化功能
同时使用RDB和AOF方式: