Redis
Redis的简介及安装
Redis是用C语言写的,是nosql,不仅仅是一个数据库! 泛指非关系型数据库,与此相同的还有Hbase,mongodb.相对应的,RDBS就是关系型数据库,主要代表有SQL Server,Oracle,MySQL(开源),PostgreSQL(开源).
SQL通常以数据库表形式存储数据,存在特定的数据表中,而NoSQL则更加灵活和可扩展,存储方式以KV形式存储,value中可以是任何东西,即使是图片,视频,都能存储,前提是一个value不能超过规定大小. 再者,Mysql大概能够存储千万级别数据,而Redis存储的数据量则要大得多,且灵活足够灵活
官网下载安装包,解压放到linux里
下载安装包1. 切换root权限 在redis下gcc -v 2. make 3. make install
4. 编辑redis安装包下得 redis.conf, 找到属性daemonize no,将no改成yes
启动: 先redis-server redis.conf 再redis-cli -p 6379 OK ! 启动完成
注:如果gcc -v找不到命令,就要安装gcc,安装的命令为yum install gcc! 要root权限
Redis的五大数据类型
Redis有五大数据类型: String(字符串) / List(底层链表实现,有序可重复) / Set(集合,无序不可重复) / Zset(集合,有序不可重复) / Hash(KV模式不变,但是V是一个键值Map<String,Map<String,Object>>) 注: redis中的list不是ArrayList,是linkedList,是链表实现,有序有重复
redis一共默认有16个数据库,默认端口是6379,在配置文件里都可以改.一个value最多512M
Redis的常用方法
每一个数据类型都有对应的一套增删改查的方法,redis本身也有方法
Redis本身的常用方法:
keys *:查看所有的key; Dbsize:显示当前数据库的key的数量;
Flushdb:清空当前库的key; Flushall:清空全部库的key;
type key:查看key的类型; select 库:切换库;
exists key:判断某个key是否存在,返回为0 1; move key db:剪贴到哪个库;
expire key:给key设置过期的时间,单位为秒; ttl key:看还有多久国企,-1永不过期,-2表示已过期
set key:设置 get key:获取 del key:删除 append key:追加内容
mset k v k1 v1 k2 v2:同时设置k,k1,k2的值,一起成功一起失败
mget k k1 k2:同时获取三个key的value,同时成功,同时失败
String(字符串)的常用方法:
append key:追加内容 Incrby key 3:加上数学3,对此key的value也要求是数字
decrby key 3:减去3,也仅用于数字 getrange key 0 3:截取123位字符,0 -1表示截取全部
setrange key 0 abc:表示第0位后的3个替换成abc
List(有序,可重复,底层链表,单值多Value)的常用方法:
lpush list 1 2 3 4 5:创建一个List,遍历的时候为顺序;
rpush list 1 2 3 4 5:创建一个List,遍历的时候为倒叙;
lrange list 0 -1:遍历List注:设置相同存在的key为追加,而不是覆盖
lindex key 0:按照索引获得第一个元素 llen key:查看list的length(长度)
lrange key 2 5:删除集合中2个5,按照顺序删,如果是rpush创建的list就按照倒序删
ltrin list 1 3:获取list中的第2位到第4位数字,组成的list覆盖当前list
rpoplpush list1 list2:尾首相接,将list1中的最后一位,加到list2的第一位
lset list 0 abc:按照下标设置值
set(无序,不可重复,底层集合,单值多value)的常用方法
sadd set: 创建set的 smembers set:遍历set的
sismember set 4:判断集合中有没4元素,返回0 1 scard set:返回集合的长度
srem set 5:删除集合中的5元素 srandmember set 5:返回集合中5个随机元素
spop set:随机移除(出栈)元素(不知有什么用)
sdiff(集合的差集) sinter(集合的交集) sunion(集合的并集)
Hash(KV模式不变,但是V是一个键值对Map>)的常用方法
hmset map id 11 name li4 age 25:K为map的一个建值对,创建hash的方法
hmget map id:查看map里面的id属性 hgetall map:查看map键的所有属性
hdel map id:删除map中的id hlen map:查看map的长度(字段 )
hexists map id:判断map里面有没id这个字段 hkeys map:查看map里面所有的key
hvals map:查看map里面所有的value
hincrby map id 2:向map里面的id字段增加2,前提id必须位数字
hincrbyfloat map id 2.5:这个和上面的一样,增加浮点型的2.5
hsettnx map weixin 12:向map里面增加新字段,可以同时增加多个,同成功,同失败
Zset(有序不可重复):的常用方法
zadd zset 60 v1 70 v2 80 v3:创建Zset,表示60分的叫v1,70分的叫v2,也就是value中的每一个属性都有一个备注,或者标识id,如果标识id相同,则为修改
然而并不常用
使用javaAPI操作Redis
java操作key
keyjava操作String
Stringjava操作List
Listjava操作Set
setjava操作Hash
Hashjava操作zset
zsetRedis的配置文件参数解读
vi redis.conf
redis的单位: 定义了基本的度量单位.只支持bytes,对大小写不敏感,配置文件中也可修改设置
port 6379: 默认端口位6379
timeout : 在多少时间内redis没有操作,redis就会超时,默认是0,不会超时
bind: 绑定的ip不能访问这个redis
loglevel : 指定日志的级别,默认是notice,共有debug verbose notice warning4种使用级别
databases: 指定数据库数量,默认是16
Redis的安全机制
设置密码:
Redis可以给它自己设定密码, config set requirepass 123456 ,这个123456对redis中的所有数据库都起作用, 输入密码: auth 123456
redis最大连接数,默认为10000,也就是说最多连接10000个客户端
Redis虽然是nosql,但是也有内存处理机制,比如key键太多了,导致内存太大,影响性能,甚至不能工作,于是就有了一下算法来针对此问题:
redis处理key过多的算法Redis的数据备份与恢复
Redis有以下三种数据恢复机制
RDB模式本质: 在指定的时间将内将内存中的数据集快照写入磁盘,恢复时就是将快照文件直接读到内存里,用快照的方式,保存为dump.rdb文件,rdb文件存储的位置配置文件里也可以修改,默认在启动redis的路径下面
查看dump.rdb文件的存放路径: config get dir
优点:适合大规模数据的恢复 缺点:RDB方式有可能会丢失最后一次数据
RDB的触发条件: 15分钟内加过一条 || 在5分钟以内,至少修改了10次以上 || 在一分钟以内有10000次的频率, RDB的触发条件的参数都可以在配置文件中修改,设置;这属于自动备份
恢复文件: 将备份文件dump.rdb移动到redis安装目录并启动服务(就相当于重启),再重新打开,就OK了
立即备份数据: save
AOF模式本质: 你写一次,AOF文件里就写一次,恢复就是把你的写操作全部执行一遍..
优点:同步持久化,数据完整性比较好 缺点:性能差,一秒内宕机会有数据丢失,恢复速度慢
AOF模式默认是关闭的,他默认是关闭的,在配置文件里appendonly yes,就会生成appendonly.aof文件,文件的路径和dump.rdb再一个地方,也可以用config get dir来获取,假设dump.rdb和appendonly.aof同时存在的话,那恢复时候优先使用appendonly.aof.
Redis的事物
事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消,同理,Redis中也有事务!
事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。
1 、原子性
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
2 、一致性
事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
3 、隔离性
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
4 、持续性
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
redis中开启事物: multi 结束事物: exec
哨兵模式,sentinel
哨兵模式: 反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库(自动化的反客为主).
作用: 监控redis进行状态,包括master和slave; 当master宕机时,slave会自动投票成为master
怎么配置: 修改sentinel.conf文件,(每一个节点上的这个文件都要修改);
sentinel monitor 被监控数据库名字,可以自己起(如host6379) 192.168.1.101 6379 3(3为哨兵的点头判断数)
然后启动各个redis,注: 启动的时候进程id要写成自己配置的,如6379,6380..
启动之后: info replication,查看role,查看是master(主节点),还是slave(从节点)