Redis 之 (1) 介绍、安装、持久型、数据类型

9. redis介绍

  • Redis和Memcached类似,也属于k-v数据存储 ,但是功能和操作性要比Memcached好很多。
  • Redis官网 redis.io,当前最新稳定版4.0.9,支持更多value类型,除了和string外,还支持hash、lists(链表)、sets(集合)和sorted sets(有序集合)
  • redis使用了两种文件格式:全量数据(RDB)和增量请求(aof)。
  • 全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载。
  • 增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,这种类似于mysql binlog。
  • 为了节省资源,当我们手动保存一次全量数据,就可以删除当前的所有增量数据了,有些增量数据其实早就过期了,也可定期利用脚本做一些优化 。
  • redis的存储分为内存存储、磁盘存储和log文件三部分

10. redis安装

1 下载

官网地址 redis.io
[root@yt-01 ~]# cd /usr/local/src
[root@yt-01 src]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz

2 安装

[root@yt-01 src]# tar zxvf redis-4.0.9.tar.gz   //解压
[root@yt-01 src]# cd redis-4.0.9                    //进入redis目录
[root@yt-01 redis-4.0.9]# make && make install    //和其他软件不同,redis安装直接就可以编译
[root@yt-01 redis-4.0.9]# echo $?      //确认编译是否成功
0
[root@yt-01 redis-4.0.9]# redis-      //用tab查看redis的命令,确认是否安装成功
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
[root@yt-01 redis-4.0.9]# which redis-cli    //查看redis的启动文件地址
/usr/local/bin/redis-cli
[root@yt-01 redis-4.0.9]# ls    //查看redis安装后的文件
00-RELEASENOTES BUGS CONTRIBUTING COPYING deps INSTALL Makefile MANIFESTO README.md redis.conf runtest runtest-cluster runtest-sentinel sentinel.conf src tests utils

3 配置文件

[root@yt-01 redis-4.0.9]# cp redis.conf /etc/redis.conf
[root@yt-01 redis-4.0.9]# vim /etc/redis.conf    //修改配置文件
……
daemonize yes     #yes表示后台启动;no表示前台启动
pidfile /var/run/redis_6379.pid      #pid存放位置
loglevel notice
#指定日志级别:debug(调试,排错)、verbose(冗长的)、notice、warning
#debug适合排查错误时使用,错误排查完毕后要换到notice,避免产生大量日志浪费系统空间
logfile "/var/log/redis.log" #定义日志存放路径
databases 16
#Redis有库的概念,默认在0库
dir /data/redis #定义rdb、aof文件的存放位置
appendonly yes #开启aof日志,开启后会在dir定义的目录生成appendonly.aof文件
appendfsync everysec #指定记录日志的规则:always(只要有变动就记录)、everysec(每秒记录一次)、no(不记录)

创建rdb、aof文件的存放文件夹
[root@yt-01 redis-4.0.9]# mkdir /data/redis

启动redis
[root@yt-01 redis-4.0.9]# redis-server /etc/redis.conf

查看redis进程(因为虚拟机还运行着gitlab网站服务,所以进程会多几个)
[root@yt-01 redis-4.0.9]# ps aux |grep redis
root 5526 0.0 0.0 4184 16 ? Ss 10:10 0:00 runsv redis
root 5527 0.0 0.0 4328 56 ? S 10:10 0:00 svlogd -tt /var/log/gitlab/redis
gitlab-+ 5528 0.2 0.1 41484 3740 ? Ssl 10:10 0:36 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
root 6041 0.0 0.0 4184 0 ? Ss 10:11 0:00 runsv redis-exporter
root 6042 0.0 0.0 4328 36 ? S 10:11 0:00 svlogd -tt /var/log/gitlab/redis-exporter
gitlab-+ 6043 0.0 0.4 53424 7976 ? Ssl 10:11 0:04 /opt/gitlab/embedded/bin/redis_exporter -web.listen-address=localhost:9121 -redis.addr=unix:///var/opt/gitlab/redis/redis.socket
root 36317 0.0 0.1 145260 2184 ? Ssl 13:33 0:00 redis-server 127.0.0.1:6379               //默认监听端口是6379

查看redis日志
[root@yt-01 redis-4.0.9]# less /var/log/redis.log
# 2条warning,提醒我们有2个内核参数需要调整
……
36317:M 06 Apr 13:33:51.922 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
36317:M 06 Apr 13:33:51.922 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
36317:M 06 Apr 13:33:51.922 * Ready to accept connections
/var/log/redis.log (END)

配置内核参数
[root@yt-01 redis-4.0.9]# sysctl vm.overcommit_memory=1
[root@yt-01 redis-4.0.9]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

加入开机启动
[root@yt-01 redis-4.0.9]# vim /etc/rc.local
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled

启动
[root@yt-01 redis-4.0.9]# redis-server /etc/redis.conf

4 关闭redis服务的方法

  • 方法1: 查询到PID,kill -9 pid。 该方式相当于断电,非正常关闭,一般不用,会造成数据丢失

  • 方法2

[root@yt-01 redis-4.0.9]# redis-cli shutdown

11. redis持久化

和Memcached服务一样,如果关闭RDB和aof数据就会存储在内存中,当重启服务或者重启机器 存储的数据就会丢失。如果数据很重要,我们就需要做持久化。

  • Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)
  • RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。
  • AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
  • 其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。
  • 如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。

1 redis持久化相关的参数

save 900 1          //表示每15分钟且至少有1个key改变,就触发一次持久化
save 300 10        //表示每5分钟且至少有10个key改变,就触发一次持久化
save 60 10000    //表示每60秒至少有10000个key改变,就触发一次持久
save " "                //这样可以禁用rdb持久化
appendonly yes   //如果是yes,则开启aof持久化
appendfilename “appendonly.aof”   //指定aof文件名字
appendfsync everysec  //每一秒写入aof文件,并完成磁盘同步。
# 指定fsync()调用模式,有三种
# no(不调用fsync),always(每次写都会调用fsync),everysec(每秒钟调用一次fsync)。
# 第一种最快,第二种数据最安全,但会占用磁盘I/O会差一些,第三种为这种方案最恰当,默认选第三种。

2 开启和关闭持久化

开启
[root@yt-01 ~]# vim /etc/redis.conf
……
# save " "
save 900 1
save 300 10
save 60 10000

关闭
[root@yt-01 ~]# vim /etc/redis.conf
……
save " "
# save 900 1
# save 300 10
# save 60 10000

设置完后,重启服务
# redis-cli -p 127.0.0.1 shutdown 
# redis-server  /etc/redis.conf

12. redis数据类型

string
list
set
sort set
hash

1 Redis数据类型-string

string为最简单的类型,与Memcached一样的类型,一个key对应一个value,其支持的操作与Memcached的操作类似,它的功能更丰富。设置可以存二进制的对象。

[root@yt-01 ~]# redis-cli
127.0.0.1:6379> set mykey 123
OK
127.0.0.1:6379> get mykey
"123"
127.0.0.1:6379> mset k1 a k2 b k3 c
OK
127.0.0.1:6379> mget k1 k2 k3
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> quit

2 Redis数据类型-list

  • list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。

  • 使用 list 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine )。list 的另一个应用就是消息队列,可以利用 list 的 push操作,将任务存在 list 中,然后工作线程再用pop操作将任务取出进行执行。

[root@yt-01 redis-4.0.9]# redis-cli
# 添加一条list数据
127.0.0.1:6379> lpush list1 "yuntai"
(integer) 1
127.0.0.1:6379> lpush list1 "yuntai1"
(integer) 2
127.0.0.1:6379> lpush list1 "yuntai2"
(integer) 3

# 查看指定list的数据
127.0.0.1:6379> lrange list1 0 -1
1) "yuntai2"
2) "yuntai1"
3) "yuntai"

# 取出(pop挤出)一条数据,挤出就没有了
127.0.0.1:6379> lpop list1
"yuntai2"
# 取出数据list 从0到1
127.0.0.1:6379> lrange list1 0 -1
1) "yuntai1"
2) "yuntai"
127.0.0.1:6379> quit

3 Redis数据类型-set

  • set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
[root@yt-01 redis-4.0.9]# redis-cli
# 添加一条set数据
127.0.0.1:6379> SADD set1 a
(integer) 1
127.0.0.1:6379> SADD set1 b
(integer) 1
127.0.0.1:6379> SADD set1 c
(integer) 1
127.0.0.1:6379> SADD set1 d
(integer) 1

# 查看set数据
127.0.0.1:6379> SMEMBERS set1
1) "d"
2) "c"
3) "a"
4) "b"
127.0.0.1:6379> SREM set1 c
(integer) 1
127.0.0.1:6379> SADD set2 a 2 b
(integer) 3
127.0.0.1:6379> SINTER set1 set2
1) "a"
2) "b"
127.0.0.1:6379> SUNION set1 set2
1) "d"
2) "a"
3) "2"
4) "b"
127.0.0.1:6379> SDIFF set1 set2
1) "d"
127.0.0.1:6379> quit

4 Redis数据类型-sort set

  • sorted set是有序集合,它比set多了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如一个存储全班同学成绩的Sorted Sets,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。
[root@yt-01 redis-4.0.9]# redis-cli
# 添加sort set数据
127.0.0.1:6379> ZADD set3 12 abc
(integer) 1
127.0.0.1:6379> ZADD set3 2 "cde 123"
(integer) 1
127.0.0.1:6379> ZADD set3 24 "123-aaa"
(integer) 1
127.0.0.1:6379> ZADD set3 4 "a123a"
(integer) 1

# 查看数据set3
127.0.0.1:6379> ZRANGE set3 0 -1
1) "cde 123"
2) "a123a"
3) "abc"
4) "123-aaa"
#数据的value根据score大小排序

# 倒序查看数据set3
127.0.0.1:6379> ZREVRANGE set3 0 -1
1) "123-aaa"
2) "abc"
3) "a123a"
4) "cde 123"
127.0.0.1:6379> quit

5 Redis数据类型- hash

在 Memcached 中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值(一般是JSON格式),比如用户的昵称、年龄、性别、积分等。

[root@yt-01 redis-4.0.9]# redis-cli
# 添加一条hash数据hash1 k值为name,v值为yuntai
127.0.0.1:6379> hset hash1 name yuntai
(integer) 1

# 查询数据hash1 k值为name的v值
127.0.0.1:6379> hget hash1 name
"yuntai"

127.0.0.1:6379> hset hash1 age 27
(integer) 1
127.0.0.1:6379> hget hash1 age
"27"

# 查询hash1的所有值
127.0.0.1:6379> hgetall hash1
1) "name"
2) "yuntai"
3) "age"
4) "27"
127.0.0.1:6379> quit

猜你喜欢

转载自my.oschina.net/zhouyuntai/blog/1791159
今日推荐