Redis是一个开源的,先进的key-value存储。它通常被称为数据结构服务器,因为键值可以包含字符串,哈希,链表,集合和有序集合。
安装
安装完成后,进入到安装目录
解决让redis在后台运行,不占据当前终端
使用vi 编辑器打开 redis的配置文件,
修改完成后,要关闭redis服务,重启。
关闭redis的服务:
语法:pkill redis-server
重启启动redis服务
./bin/redis-server ./redis.conf
redis的服务默认端口是6379,
可以通过netstat –tunpl | grep 6379查看redis的服务是否启动成功。
客户端连接 redis的服务redis-cli
redis数据类型
string类型
String是最简单的类型,一个 key对应一个Value,String类型是二进制安全的。Redis的 string可以包含任何数据,比如jpg图片或者序列化的对象。
增
set 设置键值
语法:set 键名 值
注意:如果键名已经存在,则会覆盖原来的值
127.0.0.1:6379>set name1 jdxia
ok
setnx 设置键值
语法:setnx 键名 值
注意:在设置键值时,如果键名已经存在,则设置不成功。
127.0.0.1:6379> setnx name1 xiaoxia
(integer) 0
127.0.0.1:6379> setnx name2 xiaoyu
(integer) 1
setex 设置键值
语法:setex 键名 有效期 值
在设置键值时,设置一个有效期
127.0.0.1:6379> setex color 10 red
OK
mset 一次性可以设置多个键值
语法:mset 键名1 值1 键名2 值2……………
127.0.0.1:6379> mset age 12 height 170
OK
msetnx 一次性设置多个键值,要判断如果键名已经存在,则设置失败
msetnx 键名1 值1 键名2 值2……………
127.0.0.1:6379> msetnx name xiaolong email 1@gmail.com
(integer) 1
127.0.0.1:6379> msetnx name xiaolong email 1@gmail.com
(integer) 0
查
get 获取键值
语法:get 键名
127.0.0.1:6379>get name1
jdxia
strlen 返回值的长度
语法: strlen 键名
127.0.0.1:6379> get name
"jdxia"
127.0.0.1:6379> strlen name
(integer) 5
getrange 获取键值的子内容
语法:getrange 键名 开始位置 结束位置
注意:位置是从开始计算的。
案例:获取name键值的前4个字符
getrange name 0 3
127.0.0.1:6379> get name
"jdxia"
127.0.0.1:6379> getrange name 0 3
"jdxi"
mget 一次获取多个键值
语法:mget 键名1 键名2
127.0.0.1:6379> mget age name
1) "17"
2) "jdxia"
改
getset 返回旧值,设置新值
语法:getset 键名 新值
追加字符串
append 追加字符串
语法: append 键名 追加的内容
127.0.0.1:6379> get name
"jdxia"
127.0.0.1:6379> append name -1024
(integer) 10
127.0.0.1:6379> get name
"jdxia-1024"
数值操作
incr 自增操作,每执行一次自动加1
语法:incr 键名
127.0.0.1:6379> get age
"17"
127.0.0.1:6379> incr age
(integer) 18
127.0.0.1:6379> incr age
(integer) 19
incrby 可以加指定值,返回计算后的值
语法:incrby 键名 加的值
127.0.0.1:6379> get age
"19"
127.0.0.1:6379> incrby age 10
(integer) 29
127.0.0.1:6379> incrby age -10
(integer) 19
decr 同incr一样, 自减操作
decrby 指定减去的值
哈希类型
hashes类型及操作
Redis hash是一个string类型的field和value的映射表。它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象
增
hset 设置哈希键值
语法:hset key(哈希的名称) field value
注意:如果哈希的field已经存在,则会覆盖。
127.0.0.1:6379> hset ha1 name xiaoxia
(integer) 1
127.0.0.1:6379> hset ha1 age 17
(integer) 1
hsetnx 在设置哈希的 field 时,要检测field是否存在,如果存在则设置不成功
127.0.0.1:6379> hget ha1 name
"xiaolong"
127.0.0.1:6379> hsetnx ha1 name xiaoxia
(integer) 0
127.0.0.1:6379> hget ha1 name
"xiaolong"
127.0.0.1:6379> hsetnx ha1 stu study
(integer) 1
127.0.0.1:6379> hget ha1 stu
"study"
hmset 一次性可以设置多个哈希的field,value
语法:hmset key(哈希的名称) field1 value1 field1 value2
127.0.0.1:6379> hmset ha2 name xiaobai age 2
OK
127.0.0.1:6379> hget ha2 name
"xiaobai"
查
hget 获取哈希的内容
语法:hget key(哈希的名称) field
127.0.0.1:6379> hget ha1 name
"xiaoxia"
hmget 一次性可以获取哈希的多个 field 的值
语法: hmget key(哈希的名称) field1 field2
127.0.0.1:6379> hmget ha2 name age
1) "xiaobai"
2) "2"
hkeys 返回哈希里面所有的field
语法:hkeys key
127.0.0.1:6379> hkeys ha1
1) "name"
2) "age"
3) "stu"
hvals 返回哈希里面所有的field的值
语法: hvals key
127.0.0.1:6379> hvals ha1
1) "xiaolong"
2) "17"
3) "study"
hgetall 返回哈希里面所有的 field和value
127.0.0.1:6379> hgetall ha1
1) "name"
2) "xiaolong"
3) "age"
4) "17"
5) "stu"
6) "study"
删除
hdel 删除哈希里面的field的内容
语法: hdel key field
127.0.0.1:6379> hget ha2 name
"xiaobai"
127.0.0.1:6379> hdel ha2 name
(integer) 1
127.0.0.1:6379> hdel ha2 name
(integer) 0
127.0.0.1:6379> hget ha2 name
(nil)
其他
hincrby 设置哈希里面 field的值加指定的数值
语法:hincrby key field number(加的数值)
127.0.0.1:6379> hget ha2 age
"2"
127.0.0.1:6379> hincrby ha2 age 10
(integer) 12
127.0.0.1:6379> hincrby ha2 age -1
(integer) 11
hexists 测试哈希里面field是否存在
语法: hexists key field
127.0.0.1:6379> hexists ha2 age
(integer) 1
127.0.0.1:6379> hexists ha2 email
(integer) 0
list类型
list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key 理解为链表的名字。redis的list类型其实就是一个每个子元素都是string 类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list即可以作为栈,又可以作为队列。
增
lpush 从头部向链表里面添加数据(字符串类型)
语法:lpush key
127.0.0.1:6379> lpush list1 one
(integer) 1
127.0.0.1:6379> lpush list1 two
(integer) 2
127.0.0.1:6379> lpush list1 three
(integer) 3
rpush 从尾部向链表里面添加数据(字符串类型)
语法:rpush key
linsert 在链表里指定的位置添加元素
比如:在two元素的前面添加一个元素(xiaogang)
语法:linsert key before tow xiaogang
127.0.0.1:6379> linsert list1 before two xiaogang
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "three"
2) "xiaogang"
3) "two"
4) "one"
查
lindex 返回指定位置的元素
语法:lindex key 位置
127.0.0.1:6379> lrange list1 0 -1
1) "xiaoyu"
2) "dalong"
3) "two"
127.0.0.1:6379> lindex list1 1
"dalong"
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
llen 返回链表中元素的个数
127.0.0.1:6379> lrange list1 0 -1
1) "xiaoyu"
2) "dalong"
3) "two"
127.0.0.1:6379> llen list1
(integer) 3
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
lrange 取出链表里面的元素
语法:lrange key 开始位置 结束位置,
取出链表里面的全部内容: lrange key 0 -1
127.0.0.1:6379> lrange list1 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list1 0 1
1) "three"
2) "two"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
改
lset 修改链表里面的元素内容
语法:lset key 元素的位置(从0开始) 新的值
比如:把list1里面的xiaogang改成dagang.
127.0.0.1:6379> lrange list1 0 -1
1) "three"
2) "xiaogang"
3) "two"
4) "one"
127.0.0.1:6379> lset list1 1 dagang
OK
127.0.0.1:6379> lrange list1 0 -1
1) "three"
2) "dagang"
3) "two"
4) "one"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
ltrim 保留链表中指定范围的元素
语法:ltrim key 开始位置 结束位置
比如:只保留dagang和two两个元素。
127.0.0.1:6379> lrange list1 0 -1
1) "three"
2) "dagang"
3) "two"
4) "one"
127.0.0.1:6379> ltrim list1 1 2
OK
127.0.0.1:6379> lrange list1 0 -1
1) "dagang"
2) "two"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
删
lpop 从头部删除链表中的元素,返回删除的元素
语法:lpop key
127.0.0.1:6379> lpop list1
"dagang"
- 1
- 2
- 1
- 2
rpop 从尾部删除链表中的元素,返回删除的元素
set(集合)类型
set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字
增
sadd 向集合里面添加元素
语法: sadd key(集合的名称) 元素1 元素2
127.0.0.1:6379> sadd set1 one two three
(integer) 3
127.0.0.1:6379> sadd set1 four
(integer) 1
127.0.0.1:6379> sadd set1 one
(integer) 0
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
查
scard 返回集合中元素的个数
语法:scard key
127.0.0.1:6379> smembers set1
1) "three"
127.0.0.1:6379> scard set1
(integer) 1
127.0.0.1:6379> scard set2
(integer) 4
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
sismember 检测某个元素是否在集合中
语法:sismember key 元素
127.0.0.1:6379> sismember set1 three
(integer) 1
127.0.0.1:6379> sismember set1 two
(integer) 0
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
smembers 获取集合里面的元素
语法:smembers key
127.0.0.1:6379> smembers set1
1) "one"
2) "four"
3) "three"
4) "two"
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
srandmember 随机返回集合里面的某个元素,但是并不是删除
127.0.0.1:6379> srandmember set2
"nihao"
127.0.0.1:6379> srandmember set2
"two"
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
删
srem 删除集合里面指定元素
语法:srem key 指定的元素
127.0.0.1:6379> smembers set1
1) "one"
2) "four"
3) "three"
4) "two"
127.0.0.1:6379> srem set1 one
(integer) 1
127.0.0.1:6379> smembers set1
1) "four"
2) "three"
3) "two"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
spop 随机删除集合里面某个元素,返回该元素
语法:spop key
127.0.0.1:6379> spop set1
"four"
- 1
- 2
- 1
- 2
改
smove 把元素从第一个集合里面移动到另外的集合里面
语法:smove key1 key2 移动的元素
127.0.0.1:6379> smove set1 set2 two
(integer) 1
127.0.0.1:6379> smembers set1
1) "three"
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
交差集
sdiff 求集合里面的差集,第一个集合里面不存在于另外集合里面的元素
语法:sdiff 集合1 集合2
127.0.0.1:6379> sdiff set1 set2
1) "two"
- 1
- 2
- 1
- 2
sdiffstore 求集合里面的差集即(第一个集合里面不存在于另外集合里面的元素)并保存到新的集合里面
语法:sdiffstore 新的集合 集合1 集合2
127.0.0.1:6379> sdiffstore set4 set1 set2
(integer) 1
127.0.0.1:6379> smembers set4
1) "two"
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
sinter 返回集合交集,即在集合1和集合2都存在的元素
127.0.0.1:6379> smembers set1
1) "three"
2) "two"
127.0.0.1:6379> smembers set2
1) "nihao"
2) "three"
3) "xiaolong"
127.0.0.1:6379> sinter set1 set2
1) "three"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
sinterstore 返回集合交集,即在集合1和集合2都存在的元素。取出交集并存储到新的集合
sunion 返回集合的并集,即多个集合里面的全部元素
语法:sunion key1 key2
127.0.0.1:6379> smembers set1
1) "three"
2) "two"
127.0.0.1:6379> smembers set2
1) "nihao"
2) "three"
3) "xiaolong"
127.0.0.1:6379> sunion set1 set2
1) "nihao"
2) "xiaolong"
3) "two"
4) "three"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
sunionstore 求得并集并存储到新的集合
sorted sets类型
sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的MySQL表,一列存value,一列存顺序。操作中的key理解为zset的名字
增
zadd 向有序集合里面添加元素
语法:zadd key(有序集合名称) score1 元素1 score2 元素2……
127.0.0.1:6379> zadd myzset1 12 xiaobai 5 xiaoliu 1 xiaohei
(integer) 3
127.0.0.1:6379> zadd myzset1 12 xiaolong
(integer) 1
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
上面的xiaolong也会添加进去是排在xiaobai后面
查
zrange 查看集合里面的内容,按照元素的序号,升序来显示的
语法:zrange key 开始下标 结束下标 [withscores]
127.0.0.1:6379> zrange myzset1 0 -1
1) "xiaohei"
2) "xiaoliu"
3) "xiaobai"
4) "xiaolong"
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "xiaohei"
2) "1"
3) "xiaoliu"
4) "5"
5) "xiaobai"
6) "12"
7) "xiaolong"
8) "12"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
zrevrange 查看集合里面的内容,按照元素的序号,降来显示的
127.0.0.1:6379> zrevrange myzset1 0 -1 withscores
1) "xiaolong"
2) "12"
3) "xiaobai"
4) "12"
5) "xiaohei"
6) "1"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
zrangebyscore 返回集合中,根据序号的范围返回元素
语法:zrangebyscore key 开始序号 结束序号
比如:返回序号在6到12的范围内的元素
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "xiaohei"
2) "1"
3) "xiaobai"
4) "12"
5) "xiaolong"
6) "12"
127.0.0.1:6379> zrangebyscore myzset1 6 12
1) "xiaobai"
2) "xiaolong"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
zcount 返回集合中,指定序号范围 内的元素的个数
比如返回序号6到12的元素的个数。
语法:zcount key 开始序号 结束序号
127.0.0.1:6379> zcount myzset1 6 12
(integer) 2
- 1
- 2
- 1
- 2
zcard 返回集合中元素的个数
语法:zcard key
127.0.0.1:6379> zcard myzset1
(integer) 3
- 1
- 2
- 1
- 2
zrank 在集合中,返回指定元素的下标。(按元素的序号升序)
127.0.0.1:6379> zrange myzset1 0 -1
1) "xiaohei"
2) "xiaobai"
3) "xiaolong"
127.0.0.1:6379> zrank myzset1 xiaohei
(integer) 0
127.0.0.1:6379> zrank myzset1 xiaolong
(integer) 2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
zrevrank 在集合中,返回指定元素的下标。(按照元素的序号降序)
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "xiaohei"
2) "1"
3) "xiaobai"
4) "12"
5) "xiaolong"
6) "12"
127.0.0.1:6379> zrevrank myzset1 xiaohei
(integer) 2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
删
zrem 删除集合中指定的元素
语法:zrem key 指定的元素
127.0.0.1:6379> zrem myzset1 xiaoliu
(integer) 1
- 1
- 2
- 1
- 2
zremrangebyrank 删除集合中,指定下标范围内容的元素
语法:zremrangebyrank key 开始下标 结束下标
比如删除下标范围0 到1的元素。
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "xiaohei"
2) "1"
3) "xiaobai"
4) "12"
5) "xiaolong"
6) "12"
127.0.0.1:6379> zremrangebyrank myzset1 0 1
(integer) 2
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "xiaolong"
2) "12"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
zremrangebyscore 删除集合中,指定序号范围内的元素
语法:zremrangebyscore key 开始序号 结束序号
比如删除序号4到10的元素
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "xiaoyu"
2) "1"
3) "xiaoxia"
4) "2"
5) "xiaolong"
6) "12"
127.0.0.1:6379> zremrangebyscore myzset1 4 12
(integer) 1
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "xiaoyu"
2) "1"
3) "xiaoxia"
4) "2"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
其他命令
查
keys 查看当前数据库下面的键,一般要结合通配符使用
比如查看当前数据下面的所有键使用keys *
127.0.0.1:6379> keys *
1) "set2"
2) "myzset1"
3) "set4"
4) "set1"
127.0.0.1:6379> keys s*
1) "set2"
2) "set4"
3) "set1"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
exists 查看某个键是否在当前数据里面
127.0.0.1:6379> exists set2
(integer) 1
127.0.0.1:6379> exists email
(integer) 0
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
type 返回键的数据类型
127.0.0.1:6379> type name
string
127.0.0.1:6379> type myzset1
zset
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
dbsize 返回当前数据库键的个数
127.0.0.1:6379> dbsize
(integer) 3
- 1
- 2
- 1
- 2
info 查看redis服务器的一些信息
删
flushdb删除当前选择数据库中的所有key
127.0.0.1:6379> flushdb
OK
- 1
- 2
- 1
- 2
flushall删除所有数据库中的所有key
del 删除当前数据库下面的指定键
语法:del key1 key2 key3
127.0.0.1:6379> del set2
(integer) 1
- 1
- 2
- 1
- 2
设置有效期
expire 给一个键设置有效期,单位是秒
语法:expire key 秒数
127.0.0.1:6379> expire set4 10
(integer) 1
- 1
- 2
- 1
- 2
persist key 把key的有效期设置为永久有效
其他
select 选择数据库
在redis里面默认有16个数据库,编号是从0到15,默认是在0号数据库里面。
语法:select 数据库编号
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> select 0
OK
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
move 将当前数据库中的key转移到其他数据库中
语法move key 数据库编号
127.0.0.1:6379> move set1 1
(integer) 1
- 1
- 2
- 1
- 2
randomkey 随机返回一个键
127.0.0.1:6379> randomkey
"myzset1"
- 1
- 2
- 1
- 2
事务模式: multi, exec, discard 分别是开启事务,执行事务,取消事务
清除数据库
a. 清除当前数据库 flushDB
b. 清除所有数据库 flushAll
随机返回key randomKey
选择一个数据库 select
转移一个 key 到另一个数据库 move
查看数据库有多少key dbSize
使用 AOF 进行数据持久化 bgrewriteaof
选择从服务器 saveof
数据保存到磁盘
a. 同步保存到磁盘 save
b. 异步保存到磁盘 bgsave
返回 Redis 的版本信息 info
安全性(客户端连接验证)
(1)通过修改配置文件进行设置密码
vi redis.conf
设置完成后,要重启启动 redis服务。
(2)客户端连接redis时需要验证
验证方式有两种:
第一种:在连接客户端时,使用-a 选项来完成连接
语法:/usr/local/redis/bin/redis-cli -a 密码
第二种:通过客户端登录后,使用auth 密码进行验证。
登录后,如果没有经过验证,则会出现如下的提示;
语法:在客户端登陆后:输入 auth 密码
redis持久化机制
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化,这样服务器断电、或重启系统服务器,数据还会从硬盘里边恢复到内存里。
redis支持两种持久化方式:
(1)snapshotting(快照)默认方式
(2)append-only file( 缩写aof)的方式
snapshotting(快照)
快照是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.
快照是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key修改就自动做快照
save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。
save 300 10 #必须是300秒之后至少10个关键字发生变化。
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。(以上3个选项都屏蔽,则rdb禁用)
stop-writes-on-bgsave-error yes #后台存储错误停止写。
rdbcompression yes #使用LZF压缩rdb文件。
rdbchecksum yes #存储和加载rdb文件时校验。
dbfilename dump.rdb #设置rdb文件名。
dir ./ #设置工作目录,rdb文件会写入该目录。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
持久化机制之aof方式
aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
(1)如何开启:
打开配置文件:
appendonly yes //启用 aof 持久化方式
appendfilename appendonly.aof //保存命令的文件
# appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用。
appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
# appendfsync no //完全依赖 os,性能最好,持久化没保证
- 1
- 2
- 3
- 1
- 2
- 3
(2)aof文件的重写
ao f文件的重新,就是把文件中内容,逆化成命令存储。
比如:10次 incr age 转成 set age 14 一条命令
可以执行手动重写:bgrewriteaof
重写前:
执行重写后:
查看aof 文件内容: