Redis 是一个key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
编译安装Redis 1.编译安装依赖.
[root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~]
2.编译安装Redis.
[root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~]
3.修改主配置文件.
[root@localhost ~] 定位特征: daemonize yes
4.启动数据库.
[root@localhost ~] [root@localhost ~]
数据库操作的基本语句 字符串类型的操作:String <一个字符串,对应一个数据> keys * get 名称 set 名称 键值 sexnx 名称 键值 setex 名称 消失时间 键值 ttl 名称 mset 名称1 键值1 名称2 键值2 mget 名称1 键值1 名称2 键值2 msetnx 名称1 键值1 名称2 键值2 setrange 名称 修改位置 欲修改值 getset 名称 欲修改值 getrange 名称 起始位置 终止位置 incr 名称 incrby 名称 增长值 decr 名称 decrby 名称 减少值 strlen 名称 append 名称 增长的字符 del 名称
哈希类型:Hash <一个字符有多个字段,每个字段拥有独立的键值> hset 名称 字段名 键值 hget 名称 字段名 hsetnx 名称 字段名 键值 hmget 名称 字段1 字段2 字段3 hmset 名称 字段名1 值1 字段名2 值2 hlen 名称 hvals 名称 hgetall 名称 hdel 名称 字段 键值 hkey 名称 hincrby 名称 字段 键值 linsert 名称 before/after 数值 新值
集合:Set <交集,并集,补集> sadd 名称 值 smembers名称 srandmember 名称 spop 名称 srem 名称 值 scard 名称 sismember 名称 数值 sdiff 集合1 集合2 sdiffstore 集合3 集合1 集合2 sinter 集合1 集合2 sinterstore 集合3 集合1 集合2 sunion 集合1 集合2 sunionstore 集合3 集合1 集合2 smove 集合1 集合2 值 1
双向队列:List <将多个字符排列起来> 注意:右序号顺序以数字1、2、3、4..... 从右到左序号顺序以数字-1、-2、-3...... lpush 名称1 数值1 rpush 名称2 数值1 数值2 数值3 lrange 名称 数值的下标1 数值的下标2 linsert 名称 before/after 数值的下标 新值 lset 名称 数值的下标 新值 lrem 名称 -+/123[删除的个数] 已有数值 ltrim 名称 0 1 lpop 名称 rpop 名称 rpoplpush 名称1 名称2 llen 名称 lindex 名称 队列序号 lpush 名称1 数值1 rpush 名称2 数值1 数值2 数值3 lrange 名称 数值的下标1 数值的下标2 linsert 名称 before/after 数值的下标 新值 lset 名称 数值的下标 新值 lrem 名称 -+/123[删除的个数] 已有数值 ltrim 名称 0 1 lpop 名称 rpop 名称 rpoplpush 名称1 名称2 llen 名称 lindex 名称 队列序号
有序集合:Zset <相当于集合每个元素之后增加一个数字(必须为数字)相当于分数> zadd 名称 数值 (必须是数字) 元素1 ........ zrange 名称 下标1 下标2 zrange 名称 下标1 下标2 zrevrange 名称 下标1 下标2 zrangebyscore 名称 数字1 数字2 zrem 名称 元素 zincrby 名称 数字 元素 zrank 名称 元素 zrevrank 名称 元素 zcard 名称 zcount 名称 数字1 数字2 zremrangebyrank 名称 下标1 下标2 zremrangbyscore 名称 数字1 数字2 zinterstore 名称3 集合数 名称1 名称2 zunionstore 名称3 集合数 名称1 名称2
全局命令 <常用参数> dbsize exists 键名称 expire 键名称 时效时间 rename 键名称 键新名称 type 键名称 info select 数字 move 键名称1 数据库号 flushdb flushall
给Redis设置初始密码 1.首先打开redis主配置文件,修改requirepass添加密码.
[root@localhost ~] 定位特征: requirepass 123
2.重启redis,并登陆测试密码可用性.
[root@localhost ~] [root@localhost ~] [root@localhost ~]
数据库的备份 首先默认情况下,Redis会将备份文件存储在默认登陆目录下,文件名为dump.rdb,如果要将文件转移到其他位置应该修改其配置文件
1.修改备份文件保存位置,写入以下内容.
[root@localhost ~] 定位特征: dir /usr/local/redis
2.登陆数据库保存重启数据库即可.
[root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~]
Redis实现主从同步 首先需要两台Redis服务器,分别配置主从同步即可
1.配置主Redis数据库,设置相应密码并启动.
[root@localhost ~] daemonize yes requirepass 123456 [root@localhost ~] [root@localhost ~]
2.配置从Redis数据库,只需要制定主Redis数据库的地址端口和密码即可.
[root@localhost ~] slaveof 127.0.0.1 6379 masterauth 123456
Redis +MySQL 1.配置好LNMP环境
配置过程请参考,Linux快速安装LNMP环境,此处不再重复.
2.编译安装Redis,并启动服务,无需设置密码.
[root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~]
3.安装PHP扩展模块,并配置php.ini文件.
[root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] extension=redis.so [root@localhost ~]
4.配置MySQL测试字段.
MariaDB [(none)]> create database mytest; Query OK, 1 row affected (0.01 sec) MariaDB [(none)]> use mytest; Database changed MariaDB [mytest]> create table test (id int,name char(8),primary key(id )); Query OK, 0 rows affected (0.01 sec) MariaDB [mytest]> insert into test values(1,'a1' ),(2,'a2' ),(3,'a3' ),(4,'a4' ),(5,'a5' ); Query OK, 5 rows affected (0.00 sec) Records: 5 Duplicates: 0 Warnings: 0 MariaDB [mytest]> select * from mytest.test;
5.创建PHP测试文件.
[root@localhost ~] <?php $redis = new Redis ();$redis ->connect ('127.0.0.1' ,6379 ) or die ("could net connect redis server" );$query = "select * from test limit 4" ;for ($key = 1 ; $key < 4 ; $key ++){ if (!$redis ->get ($key )) { $connect = mysql_connect ('127.0.0.1' ,'root' ,'123' ); mysql_select_db (mytest); $result = mysql_query ($query ); while ($row = mysql_fetch_assoc ($result )) { $redis ->set ($row ['id' ],$row ['name' ]); } $myserver = 'mysql' ; break ; } else { $myserver = "redis" ; $data [$key ] = $redis ->get ($key ); } } echo $myserver ; echo "<br>" ; for ($key = 1 ; $key < 4 ; $key ++) { echo "number is <b><font color=#FF0000>$key </font></b>" ; echo "<br>" ; echo "name is <b><font color=#FF0000>$data [$key ]</font></b>" ; echo "<br>" ; } ?>
Redis 基本使用 安装redis 编译文件会复制到/usr/local/bin目录下,直接执行以下代码,立即编译安装.
yum - y install centos- release - scl yum - y install gcc devtoolset-9 - gcc devtoolset-9 - gcc- c+ + devtoolset-9 - binutils scl enable devtoolset-9 bash wget http:/ / download.redis.io/ releases/ redis-6.0 .5 .tar.gz tar xzvf redis-6.0 .5 .tar.gz cd redis-6.0 .5 make && make install cp - a redis.conf / etc/ sed - i 's/daemonize no/daemonize yes/g' / etc/ redis.conf redis- server / etc/ redis.conf redis- cli - p 6379
字符串操作: String 一个字符串,对应一个数据
keys * # 查看所有键值 get 名称 # 查看键值set 名称 键值 # 创建键值sexnx 名称 键值 # 创建键值(有则不创建,无则创建) setex 名称 消失时间 键值 # 创建键值(给键值赋予有效期,到期消失) ttl 名称 # 查看键的生命周期( -1 永久/ -2 不存在) mset 名称1 键值1 名称2 键值2 # 创建多个键值 mget 名称1 键值1 名称2 键值2 # 查看多个键值 msetnx 名称1 键值1 名称2 键值2 # 创建多个键值(无责创建,有责停止) setrange 名称 修改位置 欲修改值 # 修改替换键值 getset 名称 欲修改值 # 先查看键值,在修改成新值 getrange 名称 起始位置 终止位置 # 查看一个键值的部分,从起始到结束 incr 名称 # 给键值每次+ 1 incrby 名称 增长值 # 给键值指定增长值,进行增长 decr 名称 # 给键值每次-1 decrby 名称 减少值 # 给键值指定减少值,进行减少 strlen 名称 # 统计键值长度 append 名称 增长的字符 # 在指定键值后面追加字符 del 名称 # 删除一个键
哈希操作: Hash 一个字符有多个字段,每个字段拥有独立的键值
hset 名称 字段名 键值 # 创建指定字段的值 hget 名称 字段名 # 查看指定字段 hsetnx 名称 字段名 键值 # 创建指定字段(无责创建,有责停止) hmget 名称 字段1 字段2 字段3 # 一次性查看键中多个字段的值 hmset 名称 字段名1 值1 字段名2 值2 # 一次性创建多个字段与值 hlen 名称 # 查一个键中有几个字段 hvals 名称 # 查一个键中所有字段的值 hgetall 名称 # 查指定键中的所有字段和值 hdel 名称 字段 键值 # 删除指定键中的指定字段 hkey 名称 # 查看键中所有字段 hincrby 名称 字段 键值 # 增加自定字段的值 linsert 名称 before/ after 数值 新值 # 在数值下标的之前/ 之后 插入新值
集合操作: Set 常用的集合有交集,并集,补集
sadd 名称 值 # 添加集合 smembers 名称 # 查看集合中所有元素 srandmember 名称 # 随机调取一个数据 spop 名称 # 随机删除一个数据 srem 名称 值 # 删除指定集合中指定序号的值 scard 名称 # 查看集合中有几个元素 sismember 名称 数值 # 查看数值是否在这个集合之中 sdiff 集合1 集合2 # 查两个集合的差集只看集合1 的差集 sdiffstore 集合3 集合1 集合2 # 将两个集合的差集保存到集合3 之中 sinter 集合1 集合2 # 查看两个集合的交集 sinterstore 集合3 集合1 集合2 # 将两个集合的交集并保存到集合3 sunion 集合1 集合2 # 查看两个集合的并集 sunionstore 集合3 集合1 集合2 # 将两个集合的并集保存到集合3 smove 集合1 集合2 值 1 # 将集合1 中的值移动到集合2
双向队列: List 队列将多个字符排列起来 注意:右序号顺序以数字1、2、3、4….. 从右到左序号顺序以数字-1、-2、-3……
lpush 名称1 数值1 # 创建队列并写入数值1 ,默认从左往右插入 rpush 名称2 数值1 数值2 数值3 # 创建队列并写入多个数值,默认从左往右插入 lpush 名称1 数值1 # 创建队列并写入数值1 ,默认从左往右插入 rpush 名称2 数值1 数值2 数值3 # 创建队列并写入多个数值,默认从左往右插入 lpop 名称 # 删除左边第一个值 rpop 名称 # 删除右边第一个值 lrange 名称 数值的下标1 数值的下标2 # 查看键,下标1 到下标2 的值 linsert 名称 before/ after 数值的下标 新值 # 在数值下标的 之前/ 之后 插入新值 lset 名称 数值的下标 新值 # 将键的固定数值下标之后的原有值改为新值 lrem 名称 - + / 123 [删除的个数] 已有数值 # 删除键中多个重复的元素 ltrim 名称 0 1 # 删除表中除了第一个和第二个所有的元素(保留) rpoplpush 名称1 名称2 # 将指定队列1 中的最后一个元素,移动到新队列2 中 llen 名称 # 查看队列长度 lindex 名称 队列序号 # 查看指定序号的内容
有序集合: Zset 相当于集合每个元素之后增加一个数字(必须为数字)相当于分数
zadd 名称 数值 (必须是数字) 元素1 ........ # 创建有序集合 zrange 名称 下标1 下标2 # 查看集合下标1 到下标2 的元素 zrange 名称 0 -1 相当于查看所有 zrange 名称 下标1 下标2 # withscores 查看集合下标1 到下标2 的元素。以及分值,从小到大排列 zrevrange 名称 下标1 下标2 # withscores 查看集合下标1 到下标2 的元素。以及分值,从大到小排列 zrangebyscore 名称 数字1 数字2 # withscores 查看从数字1 到数字2 范围的值 zrem 名称 元素 # 删除有序集合指定的值 zincrby 名称 数字 元素 # 每次以数字增加大小,如果没有这个集合,则创建 zrank 名称 元素 # 按照元素的数值从小到大的顺序排列取值的下标 zrevrank 名称 元素 # 按照元素的数值从大到小的顺序排列取值得下标 zcard 名称 # 统计集合的元素个数 zcount 名称 数字1 数字2 # 统计数字1 到数字2 之间的元素个数,两数之间的个数 zremrangebyrank 名称 下标1 下标2 # 删除从下标1 到下标2 的元素 zremrangbyscore 名称 数字1 数字2 # 删除从数字1 到数字2 之间的元素 zinterstore 名称3 集合数 名称1 名称2 # 取名称1 和名称2 的交集保存在名称3 之中,取出集合之后分数叠加 zunionstore 名称3 集合数 名称1 名称2 # 取名称1 和名称2 的并集保存在名称3 之中,取出集合之后分数叠
主从同步:
[root@localhost ~ ]# vim / etc/ redis.conf requirepass 1233 bind 0.0 .0 .0 [root@localhost ~ ]# pkill redis- server [root@localhost ~ ]# pkill redis [root@localhost ~ ]# redis- server / etc/ redis.conf [root@localhost ~ ]# redis- cli - p 6379 - a 1233 vim / etc/ redis.conf slaveof 192.168 .1 .20 6379 # 指定主服务器IP+ 端口 masterauth 1233 # 指定主数据库密码 slave- read- only yes # 从库只能读 127.0 .0 .1 :6379 > info replication # 查看主库服务器信息127.0 .0 .1 :6379 > slaveof no one # 断开与主节点的主从复制[root@localhost ~ ]# redis- server / etc/ redis.conf
故障自动切换,可以使用Sentinel哨兵模式,该模式是一个分布式系统,可为企业提供高可用性