Redis的安装和启动
这部分在之前的博客已经写过,这里不再赘述,提供两个以前的博客传送门。
Redis的安装
Redis之启动后其他知识
Redis数据类型
- 字符串String类型
常用命令:
append key 值 :在key对应的值后面添加值。
STRLEN k2 :查看k2键对应的值的长度。
INCR key :key对应的数字值加1。
DECR key :key对应的数字值减一。
INCRBY key 数字 : key对应的数字加上指定的数字。
DECRBY key 数字 :key对应的数字减去指定的数字。
GETRANGE key 开始脚标 结束脚标 :获取key对应的值,取出从开始脚标到结束脚标的值 (类似于subString函数)。
SETRANGE key 开始脚标 替换的字符串 :替换key对应的值,从开始脚标开始,替换字符串。
SETEX key 时间 替换字符串 :在指定时间内key对应的值替换为指定字符串,过期销毁。
SETNX key 替换字符串 :如果指定key存在,那么此命令不做任何操作。如果指定key不存在,那么创建key,指定对应的值。成功返回1,错误返回0。
MSET key1 value1 key2 value2 .....keyn valuen :设置多个键值。
MGET key1 key2 .....keyn :通过指定的多个键获取多个值。
GETSET key 值 :先获取key的值,再设置指定值作为key对应的值。
- 列表List类型
常用命令:
LRANGE list start end :列表list,从start索引处开始取元素,end=1代表下一个元素,end=-1代表到最后一个元素,end=-2代表到倒数第二个元素。
LPUSH list 元素1 元素2...元素n :列表list从队列顶进队列。
RPUSH list 元素1 元素2...元素n :列表list从队列尾部进队列。
LPOP list01 :从队列头部出元素。
RPOP list01 :从队列尾部出元素。
LINDEX list01 脚标:列表list01 ,取出脚标对应的元素,从0开始。
LLEN list01 :列表list01 ,求其长度。
LREM list01 个数 元素值 :删除list01列表中指定个数的元素值。
LINSERT list01 before 5 helloworld :在列表list01中元素5的前面,添加元素helloworld。
LINSERT list01 after 5 myworld :在列表list01中元素6后面,添加元素myworld。
- 集合Set类型
常用命令:
SADD set01 0 0 1 1 2 2 3 3 :向set01中添加元素0 0 1 1 2 2 3 3.
SMEMBERS set01 :查看set01中所有元素。
SISMEMBER set01 元素:判断元素是否在set01中。
SCARD set01 :查看set01中元素的个数。
SREM set01 0 :删除set01中的元素0。
SRANDMEMBER set01 3 :从set01中随机选出3个数。
SPOP set01 :从set01中随机选出一个元素。
SMOVE set02 set01 x :从set02中取出元素先,放入set01。
SDIFF set01 set02 :set01和set02取差值。
SINTER set01 set02 :set01和set02 取交集。
SUNION set01 set02 :set01和set02取并集。
- 字典Hash类型
常用命令:
hset user id 1 :设置值,key为user,value为id 1。
hget user id :取值。
HMSET shop id 1 name bld size 100 :设置一组值,shop为设置的对象,id属性为1,name属性值为bld,size属性值为100。
HMGET shop id name size :获取shop对象的id、name、size属性值。
HGETALL shop :获取对象shop的所有值。
HDEL shop name :将对象shop中的name属性删掉。
HKEYS shop :查看所有的key。
HVALS shop :查看所有的值。
HINCRBY shop id 2 :为shop对象中id字段增加2。
HINCRBYFLOAT shop id 0.4 :为shop对象中的id字段增加小数0.4。
- 有序集合Sorted Set类型
常用命令:
ZADD zset01 60 v1 70 v2 80 v3 90 v4 :添加元素。
ZRANGE zset01 0 -1 :查询所有的值。
ZRANGE zset01 0 -1 withscores :查询所有的键和值。
ZRANGEBYSCORE zset01 60 80 :查询一个区间的值。
ZRANGEBYSCORE zset01 60 (80 :查询一个区间的值,不包括结尾值。
ZREM zset01 v3 :删除zset01中的值v3。
ZCARD zset01 :统计zset01中的键值对个数。
ZCOUNT zset01 60 80 :统计zset01中两个键之间有多少键。
ZSCORE zset01 v4 :查看zset01中键v4对应的值。
如果需要查看其他的命令,可以官网查看:
Redis命令
Redis持久化
什么是Redis持久化?
所谓的持久化就是让数据一直有所保留,而不是因为外部的计算机断电等行为,造成数据的丢失。而计算机中的内存条是RAM随机存储器,内存这种东西可以随意存取,与存取的速度和地方都无关,但是一旦断电关机就会丢失数据。而磁盘是固定的,不会因为断电等行为使数据丢失。redis是内存数据库为了保持数据的持久化,肯定是要将数据从内存中读取再保存到磁盘上的,而这个过程就是redis的持久化。
快照方式持久化
快照方式又可以叫做Redis的RDB方式持久化。Redis默认就是开启这种快照方式持久化。
1. redis.conf配置快照持久化
![](https://img.haomeiwen.com/i5460809/2c0fbe7d77ccd4a1.jpg)
说明:
① 如果1个键key改变,那么隔900秒(15分钟)的时间就会将改变的值存储到硬盘。
② 如果10个键key改变,那么隔300秒(5分钟)的时间就会将改变的值存储到硬盘。
③ 如果10000个键key改变,那么隔10000秒的时间就会将改变的值存储到硬盘。
2. 快照持久化文件的路径
默认的RDB的文件路径是在当前目录,文件名是dump.rdb。
可以在redis.conf文件中配置:
![](https://img.haomeiwen.com/i5460809/c703886f395b2047.jpg)
说明:
dbfilename 文件名
dir 文件路径
3. RDB文件的压缩
RDB文件可以通过 rdbcompression参数来禁用压缩的。
4. 快照的过程
① Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)。
② 父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入到磁盘中的临时文件。
③ 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件。
5. 手动发起快照持久化
在redis中,我们也可以手动的发起快照保存,来保存我们的数据,常用的命令如下:
save : 手动进行快照操作。
bgsave:手动的采用异步方式进行快照操作。
lastsave : 获取最后一次成功执行快照的时间。
shutdown : 同步保存到服务器并关闭redis服务器。
bgrewriteaof : 当日志文件过长时优化AOF日志文件存储。
注意:save命令和bgsave命令的区别:
save命令是由主进程进行快照,会阻塞其他的请求。bgsave命令是由fork函数复制一份的子进程进行快照的。
6. 快照的数据恢复
Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存,一般情况下1GB的快照文件载入到内存的时间约为20~30秒钟。
7. 快照注意的问题
由于redis使用fork复制一份当前进程,那么子进程就会占有和主进程一样的内存资源,譬如主进程8G的内存,那么在备份的时候,必须保证有16G的内存,要不然就会启用虚拟内存,性能变差。
8. 快照持久化有哪些优缺点
① 优点:适合大规模的数据恢复。对数据的完整性和一致性要求不高。
② 缺点:由于rdb的方式是每隔一段时间进行一次数据备份的,如果redis突然down掉,那么丢失的最后一次快照后的修改就业丢失了。
AOF方式持久化
AOF方式是以日志的形式来记录每个写操作。将redis执行过的所有写指令都记录下来,读操作不记录。文件可以追加但是不可以修改文件。redis启动之时会读取文件重新构建数据。如果redis重启的话,将之前的写指令的操作,从头到尾恢复一遍完成备份。默认是关闭的。
1. 配置
![](https://img.haomeiwen.com/i5460809/e59252fcb0e9deb4.jpg)
注意:
当aof方式和rdb方式共存的时候,先加载aof方式。
2. 重写AOF文件的方式
auto-aof-rewrite-percentage 100:当前AOF的文件大小超过了上一次重写时的AOF文件大小的百分之多少时会再次进行重写。如果之前没有重写过,那么则以启动时的AOF文件大小为依据。
auto-aof-rewrite-min-size 64MB:限制了允许重写的最小AOF文件大小,通常在AOF文件很小的时候即使其中有些冗余的命令也是可以忽略的。
3. 优化AOF文件
BGREWRITEAOF命令:重写aof文件,就是去除了数据的中间执行过程,保留最终数据命令即可。
4. AOF文件同步的配置
appendfsync always : 同步持久化,每次发生数据变更就被立即记录到磁盘。性能比较差,但是数据完整性比较好。
appendfsync everysec : 出厂默认推荐,异步操作,每秒往磁盘写入一次,如果一秒内出现宕机,数据就会丢失。在性能和持久化方面最了很好的折中
appendfsync no : 完全依赖操作系统,性能好的时候就持久,不好的时候就不持久化。
5. AOF同步的缺点
文件写入默认情况下会先写入系统缓存中,系统每30秒同步一次,才是真正的写入到了磁盘。即使每秒做文件同步也可能导致数据的丢失。
6. AOF文件修复
命令:redis-check-aof-fix 文件.aof
Redis事务管理
在单个操作中可以执行一个或者一组命令。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞。
① 事务中的所有命令作为单个隔离操作并按顺序执行。不可以在执行redis的事务中间向其他客户端发起请求。
② 不完全保证原子性,支持部分原子性,redis在同一个事务中,如果一条命令执行失败,那么其后的命令仍然会执行,却不会回滚。
监控命令:
WATCH XXX:监控XXX(watch可以监控一个及多个键)。给XXX上锁。watch这个命令类似于乐观锁,如果监控的key已经被修改了,那么整个监控的事务队列就不会继续执行下去了。也就是watch监控的键,只要有一个发生了改变,那么使用EXEC执行命令就会报出异常,让你基于当前更新后最新的值去操作。
UNWATCH XXX:取消监控。
注意:在执行了exec和unwatch之后,之前加的watch监控锁就会被消除了。
网友评论