redis操作

本文详细介绍了Redis中五种核心数据结构的使用方法,包括String、Hash、List、Set和Sorted Set。针对每种数据类型,文章列举了常用命令及其应用场景,帮助读者快速掌握Redis的高效使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 文件内容:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值