特征及优点
- 高可用
- 访问量大
- 海量数据
要想使用需在Github.com/MSOpenTech/redis/releases中下载Redis
inux中基本命令
常用命令
- Ping:确定Redis是否正常工作(pong为正常)
- Dbsize:查看当前端口的库有多少条数据
- Databases xx:设置数据库库数,找到Redis安装目录中Redis.conf,修改该属性值
- Flusedb:删除当前库
- Exit,quit,退出当前库
进入数据库后操作key的命令
- Keys pattern:查找所有符合模式pattern的key
- Exists key[key...]:判断key是否存在
- Expire key seconds:设置key的存活时间,超过时间自动删除key,单位秒
- Ttl key:返回key的剩余生存时间
- Type key:查看key所存储的数据类型
- Del key[key...]:删除指定key
进入数据库后操作字符串类型的基本命令(String)
- Set key value:将字符串value设置到key中
- Get key:获取key的字符串value
- Incr key:将key中存储的value数字值加1,如果key不存在,则key的值先被初始化为0在执行 incr加1操作(只能对数字类型的数据操作)并返回结果value 其是原子性,执行不会被影响
- Decr key:与incr相反
- Append key value:如果key存在。则将value追加到key原来旧值的末尾 如果key不存在,则将新建key并设置value 返回值是value长度
- Strlen:返回key中value的 长度,没有就为0
- Getrange key start end:获取key中指定区间的value值
- Setrange key offset value:修改offset之后的值为value
- Mset key value[key...]:一次创建多个key
- Mget key value[key...]::一次性获取多个key
进入数据库后操作哈希类型(hash)命令
Hash是一个string类型的field和value的映射表,hash特别适合存储对象
- Hset key field value:设置hash的值
- Hmset key field value[field value..]:设置多个值
- Hmget key field value[field value..]:获取多个值
- Hgetall key:获取所有值
- Hdel:删除
- Hkeys key:获取field
- Hexists key field:查看哈希表key中,给定field是否存在
进入数据库后操作列表list命令
顺序插入,在头部操作就为left,在尾部操作就为rigth
- Lpush key value[value...],返回列表长度,注意是依次在最左端插入元素value
- Rpush:和上面相反
- Lrange key start stop:获取key中指定区间的元素
- Lindex key index:取出指定下标的元素
- Llem key:获取列表元素个数
- Lrem key count value:根据参数count的值,移除列表中与value相等的元素。Count》0,从左向右删除,<0从右往左删除,=0移除表中所有与value相等的值 Count值表示删几个
- Lset key index value:将列表key下标为index的元素的值设置为value
- Linsert key before/alfter pivot value:在piviot值之前或之后插入value
进入数据库后操作无序set集合命令
- Sadd key member [member]:添加一个或多个元素
- Smembers key:获取集合key中的所有成员元素,不存在key视为空集合
- Sismember key member:判断member元素是否是集合key的成员
- Srem key member[member...]:删除元素
- Srandmember key[count]:随机取出count个元素,默认为1。正负的正表示不取重复的数据,负则相反
- Spop key[count]:随机删除元素
进入数据库后操作有序集合类型zset命令
有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。不同的是zset的每个元素都会关联一个分数(可重复),Redis通过分数来为集合中的成员进行从小到大的排序。
- Zadd key score member[score member]:添加成员,按score大小排序,score相同,按成员首字母顺序排
- Zrange key start stop[withscore]:取出指定下标区间的元素,withscore写上说明把score也取出来
- Zrevrange:和zrange相反,取出来的成员从大到小排
- zrem key member[member...]:删除元素
- zcard key:获取集合的元素个数
- Zrangebyscore key min max[withscore][limit offset count]:获取>=min,<=max的元素。加上(min,表示不包含,+inf最大的值,-INF最小 Limit为分页功能,offset表示第几个开始,count表示取出的个数
- Zrevrangebyscore:从大到小排序
- Zcount key min max:在区间范围内的元素个数
Redis事务
指一系列操作步骤要么完全地执行,要么完全不执行 事务是一组命令集合,至少是两个或两个以上的命令。Redis事务保证这些命令执行不被其他操作打断
- Muit:开启事务
- 事务内的一系列操作命令
- Exec:执行事务操作
- Disco...:放弃事务
- Watch key[key...]在开启监控key期间观察key的值是否被改变,提交事务后如改了,则不继续改值。达到一次watch时只能修改一次key。(相当于mysql乐观锁的机制)
Redis持久化方法
Redis持久化: Redis会单独开个线程把数据存储在磁盘中
配置格式:
- save< seconds>< changes>:例如Save 900 1 :900秒时间内有1个key改动则保存数据(可有多条策略)
- Dbfilename:设置rdb文件名,默认名为dump.rdb
- Dir:rdb文件存储目录,默认./当前路径
AOF方式
Redis每次接受一条改变数据的命令时,它将把该命令写到AOF中(只记录写不记读)。当Redis重启时通过AOF保存的所有命令进行恢复数据
需在Redis.Conf中配置
- Appendonly:默认是no,改成yes开启aof持久化
- Appendfilename:指定aof文件名,默认是appendonly.aof
- Appendfsync:配置向aof文件写命令数据的策略
No:不主动进行同步操作,而是完全交由操作系统来做(即每30秒一次写入磁盘一次)。比较快但不安全。万一还没到30秒就崩了,就写不进去了就丢失了。
Always:每次执行写入都会进行同步(一边存内存,一边存磁盘)。慢但安全
Everysec:每秒执行一次同步操作。比较平衡。介于速度和安全之间。为默认值
- Auto-anf-rewrite-min-size:允许重写的最小aof文件大小,默认是64m。当aof文件大于64m时,开始整理aop文件,去掉无用的操作命令。缩小aof文件。
主从复制-读写分离(集群)
主进行修改操作 从进行读操作,读主服务器
举例实现步骤
- Master的Redis端口为xxx
Slaver的Redis端口分别为xxx,xxx
把原来的Redis.conf配置文件分成三份 - Master配置文件清空并加入以下内容
Include /usr/local/redis-3.2.9/redis.conf(复制之前的配置)
Daemonize yes
Port 6380
Pidfile /var/run/redis_6380.pid
Logfile 6380.log
Dbfilename dump6380.rdb - Slaver配置文件清空并加入以下内容
Include /usr/local/redis-3.2.9/redis.conf(复制之前的配置)
Daemonize yes(让Redis后台启动)
Port 6382(当前Redis运行的端口号)
Pidfile /var/run/redis_6382.pid(运行时会标识这个程序一个ID)
Logfile 6382.log(日志文件)
Dbfilename dump6380.rdb(rdb存储文件名)
**Slaveof 127.0.0.1 6380(6380的slaveof)**
(其余的slave都这样写)*
这样master能读能写,slaveof只能读不能写容灾处理
假如master挂了,就需要手动提升其中一个slaveof为master
实现一(手动,但延迟高):在其中一台slave中写入 Slaveof no one:将一台slaveof提升为master 在其他slave中写入 Slaveof 127.0.0.1.6381:将slaveof挂至新的master上
实现二(sentinel哨兵)
为另一个应用程序,只负责监控Redis服务器
三个任务:
监控
提醒
自动故障转移:即上面的手动处理变自动自动
(具体实现方法自行查找)
安全设置
可设置密码
绑定IP
修改默认端口号
最后
Jedis操作Redis
导入jedis的jar包,使用时创建jedis类
传入string host=服务器端口号
Int port=端口号。。。(这些自行百度,主要功能是 提供Java操作Redis)