超全的!Redis的安装和基础操作
Redis基于内存运行,并支持持久化,会将数据存入硬盘存储,Redis采用key-value(键值对)的存储形式。
Redis的优点
<ul><li>具有极高的数据读写速度</li><li>支持丰富的数据类型</li><li>支持数据的持久化</li><li>原子性</li><li>支持数据备份</li></ul><h1>二、关系型和非关系型数据库对比</h1> <table><thead><tr><th>关系型数据库</th><th>非关系型数据库</th></tr></thead><tbody><tr><td>包括Oracle 、MySQL、SQL Server、Microsoft Access、DB2 等</td><td>包括Redis、MongDB、Hbase、CouhDB等</td></tr><tr><td>存储标准数据结构(int,float,double,char)</td><td>存储类型一般为string</td></tr><tr><td>数据库名称可以自定义</td><td>数据库名不能自定义,Redis默认(0-15)16个子数据库</td></tr><tr><td>存在表结构、主键、外键</td><td>只有键值对</td></tr><tr><td>面向记录</td><td>满足数据库高并发、海量数据吞吐、高可扩展性与高可用性要求</td></tr></tbody></table><h1>三、Redis的安装</h1>解压安装包,并编译
<pre><code class="language-cpp">[root@redis1 ~]# tar xzf redis-5.0.7.tar.gz [root@redis1 ~]# cd redis-5.0.7/ [root@redis1 redis-5.0.7]# make -j2 </code></pre>安装并设置安装路径,优化命令执行路径
<pre><code class="language-cpp">[root@redis1 redis-5.0.7]# make PREFIX=/usr/local/redis install [root@redis1 redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin/ </code></pre>运行软件自带的配置脚本,一路回车
<pre><code class="language-cpp">[root@redis1 redis-5.0.7]# cd utils/ [root@redis1 utils]# ./install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] #Redis实例端口号 Selecting default: 6379 Please select the redis config file name [/etc/redis/6379.conf] #配置文件路径 Selected default - /etc/redis/6379.conf Please select the redis log file name [/var/log/redis_6379.log] #日志文件路径 Selected default - /var/log/redis_6379.log Please select the data directory for this instance [/var/lib/redis/6379] #数据文件存储路径 Selected default - /var/lib/redis/6379 Please select the redis executable path [/usr/local/bin/redis-server] #执行路径 Selected config: Port : 6379 Config file : /etc/redis/6379.conf Log file : /var/log/redis_6379.log Data dir : /var/lib/redis/6379 Executable : /usr/local/bin/redis-server Cli Executable : /usr/local/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service... Successfully added to chkconfig! Successfully added to runlevels 345! Starting Redis server... Installation successful! #启动成功 </code></pre>修改配置文件
<pre><code class="language-cpp">[root@redis1 utils]# vi /etc/redis/6379.conf :set nu 查看行号,在下面对应行去掉注释,或者进行修改 70 bind 127.0.0.1 192.168.247.130 ##加上本机Ip,监听192.168.237.130和环回口 93 port 6379 ##端口 137 daemonize yes ##启用守护进程 159 pidfile /var/run/redis_6379.pid ##指定PID文件 167 loglevel notice ###日志级别为notice 172 logfile /var/log/redis_6379.log ###指定日志文件</code></pre>开启服务并查看运行状态
<pre><code class="language-cpp">[root@redis1 utils]# /etc/init.d/redis_6379 start #执行路径,stop、restart也必须加上此路径 Starting Redis server... [root@redis1 utils]# netstat -anpt | grep redis tcp 0 0 192.168.247.130:6379 0.0.0.0:* LISTEN 21083/redis-server tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 21083/redis-server </code></pre>登录Redis
<pre><code class="language-cpp">[root@redis1 utils]# redis-cli -h 192.168.247.130 -p 6379 #-h Redis主机地址和-p 端口号 192.168.247.130:6379></code></pre> <h1>四、redis数据类型与实例操作</h1>Redis支持五种数据类型:
<ul><li>string (字符串)</li><li>hash(哈希)</li><li>list(列表)</li><li>set(集合)</li><li>zset(sorted set:有序集合)</li></ul>set 和 zset 可以看做是属于string的无序和有序集合类型
<h2>4.1 string(字符串)</h2> <ul><li>string是redis最基本的类型,与Memcached一模一样的类型,一个key对应一个value。</li><li>string类型是二进制安全的。redis的string 可以包含任何数据。比如jpg图片或者序列化的对象。</li><li>string 类型是Redis最基本的数据类型,string 类型的值最大能存储512MB。</li></ul><pre><code class="language-cs">192.168.247.160:6379> set name lili #给键设置值 OK 192.168.247.160:6379> get name #获取键值 "lili" 192.168.247.160:6379> type name #查看键的数据类型 string 192.168.247.160:6379> keys * #查看数据库中所有键 1) "name" </code></pre> <h2>4.2 Hash(哈希字典)</h2> <ul><li>Redis hash是一个键值(key=>value)对集合。
</li><li>Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
</li><li>每个hash可以存储2的32次方-1键值对。
</li><li>作用场景:
健值对集合,即编程语言中的Map类型
适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值
Redis列表是简单的字符串列表,按照插入顺序排序,可以重复。可以添加一个元素到 表的头部(左边)或者尾部(右边)
</li><li>列表最多可存储2^32 -1 个元素。
</li><li>作用场景:
1、增删快,提供了操作某一段元素的API
2、最新消息排行等功能(比如朋友圈的时间线)
3、消息队列
一个key写入多个value时,遵循着先入后出,后入先出的堆栈规则
</li><li>存入的value可以重复
</li></ul><pre><code class="language-cs">192.168.247.160:6379> lpush color white blue yellow pink #一个键存储多个值 4 192.168.247.160:6379> lrange color 0 3 #查看0-3的四个键值,最后存储的变成了第一个 pink yellow blue whi 192.168.247.160:6379> lrange color 0 0 #查看0、1、2的键值 pink 192.168.247.160:6379> lrange color 1 1 yellow 192.168.247.160:6379> lrange color 2 2 blue 192.168.247.160:6379> lpush color yellow #新增一个重复的键值,可以存储 5 192.168.247.160:6379> lrange color 0 4 yellow pink yellow blue white 192.168.247.160:6379> type color #键值类型为list list </code></pre> <h2>4.4 Set(无序集合)</h2> <ul><li>Redis的 Set 是 string 类型的无序集合。
</li><li>集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是0(1)
</li><li>作用场景:
1、比如QQ的共同好友
2、利用唯一性,统计访问网站的所有独立ip
3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐
集合存储,不论有序还是无序都不能存储重复的值
</li></ul><pre><code class="language-cs">192.168.247.160:6379> sadd room 101 102 103 104 4 192.168.247.160:6379> smembers room #查看键值,只能整体查看 101 102 103 104 192.168.247.160:6379> sadd room 101 #无法设置重复的键值 0 192.168.247.160:6379> smembers room 101 102 103 104 192.168.247.160:6379> type room set </code></pre> <h2>4.5 Zset(sorted set:有序集合)</h2> <ul><li>Redis zset和set一样也是string类型元素的集合,且不允许重复的成员。
</li><li>不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
</li><li>zset的成员是唯一的,但分数(score)却可以重复。
</li><li>作用场景:
将Set中的元素增加一个权重参数score,元素按score有序排列
数据插入集合时,已经进行天然排序 1、排行榜 2、带权重的消息队列
Redis共有0-15,16个数据库,默认进去为数据库0
<pre><code class="language-cs">192.168.247.160:6379> select 2 #select 接数据库序号切换 OK 192.168.247.160:6379[2]> </code></pre> <h2>5.2 数据迁移至其他数据库</h2> <pre><code class="language-cs">192.168.247.160:6379[2]> select 0 OK 192.168.247.160:6379> keys * room stu name hobby color 192.168.247.160:6379> move hobby 2 #move 加键名 加数据库序号 1 192.168.247.160:6379> select 2 OK 192.168.247.160:6379[2]> keys * #可以看到迁移过来了 hobby</code></pre> <h2>5.3 高危flushall</h2>会删除所有库的数据,不建议使用
删除单个库的数据
<pre><code class="language-cs">192.168.247.160:6379[2]> select 2 #删除2库的数据 OK 192.168.247.160:6379[2]> flushdb OK 192.168.247.160:6379[2]> keys * </code></pre> <h2>5.4 检测key是否存在exist</h2> <pre><code class="language-cs">192.168.247.160:6379> exists color #存在返回1 1 192.168.247.160:6379> exists co #不存在返回0 0 </code></pre> <h2>5.5 key重命名rename</h2> <pre><code class="language-cs">192.168.247.160:6379> rename color co #方法一 rename将color命名为co OK 192.168.247.160:6379> keys * room stu co name 192.168.247.160:6379> renamenx co color #方法二 renamenx 1 192.168.247.160:6379> keys * room stu name color </code></pre> <h2>5.6 对Redis服务器进行性能检测redis-benchmark</h2> <pre><code class="language-cs">#向Redis发送100个并发连接,共100000个请求的性能测试 [root@redis1 ~]# redis-benchmark -h 192.168.247.160 -p 6379 -c 100 -n 100000 #测试存取大小为100字节的数据包的性能 [root@redis1 ~]# redis-benchmark -h 192.168.247.160 -p 6379 -q -d 100 #测试在本机上进行set与lpush操作时的性能 [root@redis1 ~]# redis-benchmark -t set,lpush -n 100000 -q</code></pre> <h1>六、Redis持久化</h1>■持久化概述
●Redis是运行在内存中,内存中的数据断电丢失
●为了能够重用Redis数据,或者防止系统故障,需要将Redis中的数据写入到磁盘空间中,即持久化
■持久化分类
●RDB方式:创建快照的方式获取某- -时刻Redis中所有数
据的副本
●AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
■它是Redis的默认持久化方式
■默认文件名dump.rdb
■触发条件
●在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
●执行save或者是bgsave (异步) 命令
●执行flushall命令,清空数据库所有数据
●执行shutdown命令,保证服务器正常关闭且不丢失任何数据
■优缺点
●适合大规模的数据恢复
●如果业务对数据完整性和一致性要求不高,RDB是很好的选择
●数据的完整性和一致性不高
●备份时占用内存
■通过RDB文件恢复数据
●将dump.rdb文件拷贝到redis的安装目录的bin目录下,重启redis服务即可
■Redis默认不开启
■弥补RDB的不足(数据的不一致性)
■采用日志的形式来记录每个写操作,并追加到文件中
■Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
■根据AOF文件恢复数据
●将appendonly.aof文件拷贝到Redis的安装目录的bin目录下,重启Redis服务即可
到此这篇关于“超全的!Redis的安装和基础操作”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
超全的!Redis的安装和基础操作
Laravel 5.1框架Redis 的安装配置及基本使用教程
PHP Redis相关操作大全
REDIS基础, GO语言
PHP操作Redis数据库常用方法(总结)
PHP操作Redis数据库常用方法
redis基础问答
redis安装实例
三分钟读懂redis数据库
Redis安装配置教程