21.9 redis介绍
21.10 redis安装
21.11 redis持久化
21.12 redis数据类型
21.9 redis介绍
Redis和Memcached类似,也属于k-v数据存储
Redis官网 https://redis.io
支持更多value类型,除了和string
外,还支持hash
、lists(链表)
、sets(集合)
和sorted sets(有序集合)
Redis是可以把数据存储在磁盘上的并且使用了两种文件格式:全量数据(RDB)
和增量请求(aof)
。一般叫做redis持久化全量数据
格式是把内存中的数据写入磁盘,便于下次读取文件进行加载。增量请求文件
则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,这种类似于mysql binlog。随时间而越来越大,其中有些内容是没有用的。
Redis的存储分为内存存储、磁盘存储和log文件三部分。内存存储和memcached一样,磁盘存储指RDB,log文件指aof。
21.10 redis安装
步骤
1.去官网下载最新版redis包并解压
1 | [root@kun02 ~]# cd /usr/local/src/ |
2.由于redis不需要初始化 直接编译安装
1 | [root@kun02 src]# cd redis-4.0.11 |
3.拷贝把解压包下的配置文件到etc下
1 | [root@kun02 redis-4.0.11]# cp redis.conf /etc/redis.conf |
4.编辑redis配置文件
1 | [root@kun02 redis-4.0.11]# vim /etc/redis.conf |
修改下面参数1
2
3
4
5
6
7daemonize yes
logfile "/var/log/redis.log"
dir /data/redis
appendonly yes
daemonize yes
表示redis为后台启动,终端继续做其他事情logfile "/var/log/redis.log"
定义redis的日志路径dir /data/redis
定义redis的RDB,aof文件的存放路径appendonly yes
开启aof日志 在dir定义的目录下存aof文件
5.创建RDB的目录
1 | [root@kun02 redis-4.0.11]# mkdir -p /data/redis |
6.修改内核参数
1 | [root@kun02 redis-4.0.11]# sysctl vm.overcommit_memory=1 |
上面两条命令是为了不让系统告警(可在redis日志中提示),不输入也没关系。想让机器启动就加载两条命令可以放到/etc/rc.local
中1
2
3
4[root@kun02 redis-4.0.11]# vim /etc/rc.local
redis-server /etc/redis.conf
echo never > /sys/kernel/mm/transparent_hugepage/enabled
7.启动redis服务
1 | [root@kun02 redis-4.0.11]# redis-server /etc/redis.conf |
21.11 Redis持久化
Redis持久化表示数据存入磁盘中
。Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)
和AOF(Append Only File)
RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。
redis.conf上有定义RDB的触发时间来持久化
1
2
3
4save 900 1 #表示每15分钟且至少有1个key改变,就触发一次持久化
save 300 10 #表示每5分钟且至少有10个key改变,就触发一次持久化
save 60 10000 #表示每60秒至少有10000个key改变,就触发一次持久AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
redis.conf定义的关于aof的参数
1
2
3
4
5appendonly yes #如果是yes,则开启aof持久化
appendfilename “appendonly.aof” # 指定aof文件名字
appendfsync everysec #指定fsync()调用模式,有三种no 隔一段时间来记录磁盘中,最不安全,always 每写入指令就记录,耗费资源大,everysec 每秒记录,默认这种方式。
其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。
如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。1
save “” #这样可以禁用rdb持久化,并把其他save注释掉
21.12 redis数据类型
String
string
为最简单的类型,与Memcached一样的类型,一个key对应一个value
,其支持的操作与Memcached的操作类似,它的功能更丰富。设置可以存二进制的对象。
进入redis
1 | [root@kun02 redis-4.0.11]# redis-cli |
添加,获得string类型数据
1 | 127.0.0.1:6379> set key1 111 |
添加,获得多个string类型数据
1 | 127.0.0.1:6379> mset k1 a k2 b k3 c |
List
list 链表结构
,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
使用 list 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine )。list 的另一个应用就是消息队列,可以利用 list 的 push操作,将任务存在 list 中,然后工作线程再用pop操作将任务取出进行执行。
在链表中推进新数据
1 | 127.0.0.1:6379> LPUSH list1 "kun1" |
查看键的值
1 | 127.0.0.1:6379> LRANGE list1 0 -1 ##-1表示末尾 |
在链表中拉出数据
1 | 127.0.0.1:6379> LPOP list1 |
Set
set 集合
,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
添加元素给集合
1 | 127.0.0.1:6379> SADD set1 a |
查看集合中的元素
1 | 127.0.0.1:6379> SMEMBERS set1 |
求并集
1 | 127.0.0.1:6379> SUNION set1 set2 |
求交集
1 | 127.0.0.1:6379> SINTER set1 set2 |
求差集
1 | 127.0.0.1:6379> SDIFF set1 set2 |
删除元素
1 | 127.0.0.1:6379> SREM set2 1 |
Sorted Set
sorted set 有序集合
,它比set多了一个权重参数score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的集合,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。
添加带权重的元素进集合
1 | 127.0.0.1:6379> ZADD sset1 1 kun1 |
查看有序集合
1 | 127.0.0.1:6379> ZRANGE sset1 0 -1 ##从小到大 |
倒序
1 | 127.0.0.1:6379> ZREVRANGE sset1 0 -1 |
Hash
hash 哈希表
,类似于多个k-v组成的表。在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。
添加哈希数据
1 | 127.0.0.1:6379> HSET hash1 name kun1 |
查看哈希表中的某个数据
1 | 127.0.0.1:6379> HGET hash1 name |
查看整个哈希表
1 | 127.0.0.1:6379> HGETALL hash1 |