博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis介绍、 redis安装 、redis持久化、 redis数据类型
阅读量:6554 次
发布时间:2019-06-24

本文共 6609 字,大约阅读时间需要 22 分钟。

  hot3.png

redis介绍

  • Redis和Memcached很像,但Redis的功能要比Memcached更多一些,Redis也支持在磁盘中去存储,这样可以保证数据有一定的安全性. 
  • 数据类型除了简单的K-V形式之外还包括其他的value类型,比如hash、lists(链表)、sets(集合)和sorted sets(有序集合)
  • redis使用了两种文件格式:全量数据(RDB)和增量请求(aof). 
    全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载.
    增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,这种类似于mysql binlog.
  • redis的存储分为内存存储、磁盘存储(RDB)和log文件(aof)三部分

redis安装

下载和解压redis

说明: 下载地址在redis官网:http://redis.io

[root@root-01 ~]# cd /usr/local/src[root@root-01 src]# wget http://download.redis.io/releases/redis-4.0.1.tar.gz[root@root-01 src]# tar -zxvf redis-4.0.1.tar.gz

进入redis目录安装

说明:redis比较特殊,不需要./configure这步,直接make && make install即可

[root@root-01 src]# cd redis-4.0.1[root@root-01 redis-4.0.1]# make && make install

make完之后,使用redis- 敲两下Tab键会出来这几个命令,说明就安装成功了. 

[root@root-01 redis-4.0.1]# redis-redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli        redis-sentinel   redis-server

redis的安装路径

[root@root-01 redis-4.0.1]# which redis-cli/usr/local/bin/redis-cli

拷贝redis的配置文件到/etc/下

[root@root-01 redis-4.0.1]# cp redis.conf /etc/

 
编辑redis配置文件

[root@root-01 redis-4.0.1]# vim /etc/redis.conf daemonize no  --更改为daemonize yes说明:如果是no的话,启动redis是在前台启动,更改为yes的话,启动redis就在后台启动    启动完了之后可以继续做其他的事情,这个终端它不会占用.logfile ""    --定义log文件的路径  logfile "/var/log/redis.log"dir ./        --定义RDB文件路径dir /data/redisappendonly no --关于是否开启aof日志的 (no是关闭,yes是开启),设为开启,开启之后会在/data/redis/目录生appendonly.aof一个这样的文件.appendonly yes#保存退出配置文件后,创建dir定义路径[root@root-01 ~ ]# mkdir /data/redis

启动redis

[root@root-01 ~]# redis-server /etc/redis.conf

查看redis进程及监听端口

说明:redis监听的端口是6379

[root@root-01 ~]# ps aux |grep redisroot       5626  0.3  0.7 145244  7524 ?        Ssl  10:50   0:00 redis-server 127.0.0.1:6379root       5631  0.0  0.0 112664   972 pts/0    S+   10:51   0:00 grep --color=auto redis[root@root-01 ~]# netstat -nltActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State      tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN     tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN     tcp6       0      0 :::22                   :::*                    LISTEN

编辑 /etc/rc.local,增加两条内核参数

[root@root-01 ~]# vim /etc/rc.local.............................sysctl vm.overcommit_memory=1echo never > /sys/kernel/mm/transparent_hugepage/enabled#保存退出后重新启动redis[root@root-01 ~]# redis-server /etc/redis.conf

 

redis持久化

  • Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File).
  • RDB,简而言之,就是在不同的时间点,将Redis存储的数据生成快照并存储在磁盘等介质上.
    这和Mysql不太一样,mysql的数据可以存到内存里,但内存并不是mysql最终存储的地方,它必须要存储在磁盘上,但Redis可以不存在磁盘上,就存在内存里,内存可以存所有Redis数据,RDB实际上就是把内存的数据镜像一份到磁盘上,至于RDB什么时候把内存的数据存储一份到磁盘上是有/etc/redis.conf/的三个参数决定的
    #   save ""    -->把#去掉就关闭RDB和AOF方式(关闭持久化),把以下三行注释掉.

    save 900 1    --> 900秒发生了1次更改

    save 300 10   -->300秒发生了10次更改
    save 60 10000 -->60秒发生了10000次更改

  • AOF,则是换了一个角度来实现持久化忙那就是将redis执行过的所有写指令记录下来,在下次Redis重新启动时, 只要把这些指令从前到后再重复执行一遍,就可以实现数据恢复了.
    但随着时间越来越长,那么AOF文件就会越来大,每次更改都会记录一条日志,所以AOF也是有一个优化的过程,什么是优化呢?就过了一段时间之后,发现AOF日志文件里面很多日志已经过期了,例如key1已经过期了,那么就可以把key1相关的信息全部删除,只留下那些有用的.
     
  • 其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果Redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高.
    AOF有三个选项分别是:
    # appendfsync always        //一直写,每次有变更都会写进去
    appendfsync everysec       //每一秒写进去
    # appendfsync no             //每隔一段时间写进去,这项是最不安全的
    使用默认的选项appendfsync everysec,选项所在路径/etc/redis.conf
     
  • 如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,Redis将变成一个纯内存数据库,就像Memcached一样.

Redis数据类型 

Redis数据类型 --string

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

演示:

说明:连接redis的命令是redis-cli

          mykey就一个k的名称,2233也就是value值

[root@root-01 ~ ]# redis-cli 127.0.0.1:6379> #创建127.0.0.1:6379> set mykey "2233"OK#查看k的值127.0.0.1:6379> get mykey"2233"#创建多对键值127.0.0.1:6379> MSET k1 a k2 b k3 cOK

Redis数据类型--list

  • list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等.
    操作中key理解为链表的名字.
  • 使用list结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的TimeLine).
    list的另一个应用就是消息队列,可以利用list的push操作将任务存在list中,然后工作线程再用pop
    操作将任务取出进行执行.

 演示:

[root@root-01 ~ ]# redis-cli 127.0.0.1:6379> #创建127.0.0.1:6379> LPUSH list1 "Ann"(integer) 1127.0.0.1:6379> LPUSH list1 "Wu"(integer) 2127.0.0.1:6379> LPUSH list1 "123"(integer) 3#查看链表值127.0.0.1:6379> LRANGE list1 0 -11) "123"2) "Wu"3) "Ann"#取值127.0.0.1:6379> LPOP list1 "123"#可以看到取走一个值之后就剩下两个值了127.0.0.1:6379> LRANGE list1 0 -11) "Wu"2) "Ann"

Redis数据类型--set

  • set是集合,和我们数学中的集合概念相似,对于集合的操作有添加删除元素,有对多个集合求交并差等操作. 操作中key理解为集合的名字,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合. 因为Redis非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,还可以使用不同命令选择将结果返回给客户端还是存集到一个新的集合中.

演示: 

[root@root-01 ~ ]# redis-cli 127.0.0.1:6379> 创建第一个集合:127.0.0.1:6379> SADD set1 a(integer) 1127.0.0.1:6379> SADD set1 b(integer) 1127.0.0.1:6379> SADD set1 c(integer) 1查看集合里面的元素:127.0.0.1:6379> SMEMBERS set11) "c"2) "b"3) "a"创建第二个集合:127.0.0.1:6379> SADD set2 b(integer) 1127.0.0.1:6379> SADD set2 2(integer) 1127.0.0.1:6379> SADD set2 3(integer) 1127.0.0.1:6379> SADD set2 c(integer) 1查看集合里面的元素:127.0.0.1:6379> SMEMBERS set21) "c"2) "3"3) "2"4) "b"求set1和set2两个集合的并集:127.0.0.1:6379> SUNION set1 set21) "a"2) "b"3) "c"4) "3"5) "2"说明:求并集是把两个集合的元素拿出来,有重复的去重复,最重得到的结果.求set1和set2两个集合的交集:127.0.0.1:6379> SINTER set1 set21) "c"2) "b"说明:交集也就是相同的元素求set1和set2两个集合的差集:127.0.0.1:6379> SDIFF set1 set21) "a"说明:差集也就是不同的元素删除一个元素:127.0.0.1:6379> SREM set1 b(integer) 1127.0.0.1:6379> SMEMBERS set11) "c"2) "a"说明:删除set1集合里面的b元素,再查看时就没有b元素存在

 

Redis数据类型--sort set

  • sorted set是有序集合,它比set多了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如一个存储全班同学成绩的sorted sets, 其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序.

演示: 

说明: set3是集合名称,12是分数,abc是元素

[root@root-01 ~ ]# redis-cli 127.0.0.1:6379> 创建有序集合:127.0.0.1:6379> ZADD set3 12 abc(integer) 1127.0.0.1:6379> ZADD set3 2 "cde 123"(integer) 1127.0.0.1:6379> ZADD set3 24 "wei"(integer) 1127.0.0.1:6379> ZADD set3 4 "ann"(integer) 1查看有序集合:127.0.0.1:6379> ZRANGE set3 0 -11) "cde 123"2) "ann"3) "abc"4) "wei"说明: 可以看到这是一个从小到大的有序集合查看倒序集合:127.0.0.1:6379> ZREVRANGE set3 0 -11) "wei"2) "abc"3) "ann"4) "cde 123"说明:可以看到这和上面正好是相反,分数越大的排在最前面

 

Redis数据类型--hash

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

演示:

[root@root-01 ~ ]# redis-cli 127.0.0.1:6379> 创建hash:127.0.0.1:6379> HSET hash1 name anna(integer) 1127.0.0.1:6379> HSET hash1 age 24(integer) 1127.0.0.1:6379> HSET hash1 job it(integer) 1查看hash的值:127.0.0.1:6379> HGET hash1 name"anna"127.0.0.1:6379> HGET hash1 job"it"127.0.0.1:6379> HGET hash1 age"24"查看hash所有的值:127.0.0.1:6379> HGETALL hash11) "name"2) "anna"3) "age"4) "24"5) "job"6) "it"说明:奇数行是key, 偶数行是value

 

转载于:https://my.oschina.net/AnnaWu/blog/1549674

你可能感兴趣的文章
JavaScript 正则表达式
查看>>
Win8.1曝严重内核漏洞
查看>>
activity 与 Fragment生命周期的理解
查看>>
magento后台无法通过IE登陆,但可以通过chrome和firefox登陆
查看>>
Hello Kraken.js!
查看>>
11.分页技术
查看>>
万年历学习笔记
查看>>
同一局域网内,多台电脑共享一台打印机
查看>>
Centos6.4下利用rsyslog+loganalyzer+mysql部署日志服务器
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
登陆木星,踏出你的一小步,成就未来一大步
查看>>
工作总结
查看>>
码云平台IDEA系列的插件使用
查看>>
我的友情链接
查看>>
标准日本语 07_003
查看>>
我的友情链接
查看>>
C# process 使用方法
查看>>
Linux操作系统常用命令
查看>>
统计mysql慢查询记录前10条语句
查看>>