目录
3. springboot 连接 Linux 远程 redis
1. Linux 下安装 Redis
-
本人使用虚拟机 CenOS 7 64位,搭配 MobaXterm 操作
安装步骤:
在 Redis 官网下载 Linux 版本的解压包
在Linux 中 home 目录下建一个新的文件夹,把下载好的解压包放进去
把解压包移动到 /opt目录下 :
mv xxx(解压包名) /opt
解压 压缩包 :
tar -zxvf xxx
在第6步前需要安装 yum,否则不能使用yum命令 ,安装好后 gcc -v 查看版本
进入 解压出来的文件目录 cd redis-5.0.8 ,运行安装编译程序 :
yum install gcc-c++
编译: make , 再进行安装:
make install
,redis默认安装路径 usr/local/bin在 usr/local/bin 目录下新建文件夹:
mkdir kconfig(随意起文件名)
将 redis 配置文件 redis.conf 复制一份到 usr/local/bin/kconfig 目录下,
cp /opt/xxx(目录名)/redis.conf usr/local/bin/kconfig
,因为我们要用自己改的配置文件来启动 redisredis默认不是后台启动。需修改配置文件redis.conf。vim redis.conf 把
daemonize no 改为 yes。:wq退出
2. Redis 启动
-
redis 默认安装路径 usr/local/bin
cd /usr/local/bin # 进入 /usr/local/bin 目录 redis-server kconfig/redis.conf # 启动服务,用我们自己改的配置文件 redis.conf 启动 redis-cli -p 6379 # 连接客户端 ps -ef|grep redis # 查看 redis 的进程是否开启 shutdown # 关闭 redis 服务,exit 退出 redis-cli shutdown # 关闭 redis 客户端
3. springboot 连接 Linux 远程 redis
-
3.1 需要修改 redis.conf 配置
requirepass 123456 # 设置 redis 密码 123456(随意设置),第786行 daemonize yes # 把 daemonize 属性改为 yes,第222行 bind 127.0.0.1 # 注销掉这行代码,第69行 protected-mode no # 把 protected-mode 属性改为 no,第88行 (跳到786行 跳行快捷键 :786) # 还需要关闭 Linux 系统中的防火墙 systemctl stop firewalld.service # 关闭防火墙 systemctl disable firewalld.service # 禁止防火墙启动
- 3.2 配置 application.properties
spring.redis.host=192.168.111.129 # 这个 ip 为我的虚拟机中 Linux 系统的 ip
spring.redis.port=6379
spring.redis.password=123456
4. 五大数据类型
4.1 Stirng类型
exists k1 # 判断某个key是否存在 append k1 hello # 追加字符串,如果当前的key不存在,就相当于set strlen k1 # 获取字符串的长度 incr views # 自增1,浏览量增加1 decr views # 自减1, 浏览量减1 incrby views 10 # 可以设置步长,指定增量 i+=5 decrby views 5 # i-=5 getrange k1 0 3 # 获取字符串[0,3] getrange k1 0 -1 # 获取全部的字符串 setrange k1 1 a # 替换指定位置开始的字符串 下标为 1 的 替换为 a setex k3 30 hello # 设置k3的值为 hello ,30 秒后过期时间 setnx k1 redis # 如果 k1 不存在,创建 k1 ,如果 k1 存在,则失败 mset k1 v1 k2 v2 k3 v3 # 同时设置多个值 mget k1 k2 k3 # 同时获取多个值 msetnx k1 v1 k4 v4 # msetnx 是一个原子操作,要么一起成功,要么一起失败 mset user:1:name zhangsan user:1:age 2 # user:{id}:{filed} getset k1 hello # 如果存在值,则返回原来的值,并设置新的值。如果不存在值,则返回 nil,并且设置新的值
4.2 List类型
lpush list one # 将一个值或者多个值,插入到列表头部(左) 读都是从左往右 lrange list 0 -1 # 获取 list 中的值 lrange list 0 1 # 通过区间获取具体的值 rpush list one # 将一个值或者多个值,插入到列表尾部(右) lpop list # 移出 list 的第一个元素(左) rpop list # 移出 list 的最后一个元素(右) lindex list 0 # 获取下标为 0 的元素 llen list # 获取长度 lrem list 1 one # 移出指定的值,移除 1 个,为 one 的值 ltrim list 1 2 # 通过下标截取指定的长度,截取留下下标为 1-2 的元素 rpoplpush list1 list2 # 移除 list1 列表的最后一个元素,将他移到 lsit2 列表中 lset list 1 value # 将 下标为 1 的值更新为 value,如果不存在当前下标值,则报错 linsert list before 2 3 # 在值为2 的前面,插入3。 before 改为 after 就是在2后面插入
4.3 set集合
sadd myset 1 2 3 # 集合中添加元素 smembers myset # 查看集合中的元素 sismember myset xiaofan # 判断某个值是不是在集合中,判断 xiaofan 是否存在 myset 中 scard myset # 获取 set 集合中元素的个数 srem myset hello # 删除 set 中的指定的元素,移除 hello srandmember myset 2 # 随机抽取 2 个元素 spop myset 1 # 随机删除一些 set 集合中的值,1个 smove set1 set2 a # 把 a 元素 从set1 移动到 set2 sdiff set1 set2 # 查看 set1 和 set2 的差集 sinter set1 set2 # 查看 set1 和set2 的交集 sunion set1 set2 # 查看 set1 和 set2 的并集
4.4 hash集合
hset myhash f1 hello # set一个具体的值 key-value,myhash -- <f1,hello> hget myhash f1 # 获取一个字段值 hmset myhash f1 hello1 f2 world # 设置多个 key-value,myhash -- <f1,hello> <f2,world> hmget myhash f1 f2 # 获取多个字段值 hgetall myhash # 获取全部数据 hdel myhash f1 # 删除某个指定的 key 字段,对应的,删除 myhash 中 f1 hlen myhash # 获取 hash 表键值对的数量, hexists myhash f1 # 判断 myhash 中 f1 字段 是否存在 hkeys myhash # 获取 myhash 中所有的 key hvals myhash # 获取 myhash 中所有的 value hincrby myhash field3 2 # 增量运算 hsetnx myhash field4 value4 # 如果不存在设置成功,如果存在则设置失败
4.5 Zset集合(有序set 集合)
zadd myset 1 one 2 two # 添加值,第 1 个位置 加入one。第 2 个位置加入 two zrange myset 0 -1 # 获取所有元素 zadd salary 250 a 500 b 200 c # 添加用户其数值元素, 薪水 salary ,250 是 a的薪水,500是 b的,200是 c 的 zrangebyscore salary -inf +inf # 显示全部用户,从小到大排序出用户 zrevrangebyscore salary +inf -inf # zrevrangebyscore 从大到小 zrevrangebyscore salary +inf -inf withscores # 显示全部用户并且附带值 zrem salary a # 移出某个元素,移除集合 salary 中的元素 a zcard salary # 获取有序集合中的个数 zcount myset 1 3 # 获取指定区间之间的成员数量,获取第 1 个 到第 3 个位置区间的成员个数
5. 三种特殊数据类型.
5.1 geospatial (地理位置)
geoadd china:city 116.40 39.90 beijing # 添加城市经纬度 geopos china:city beijing # 获取城市经纬度 geodist china:city beijing shanghai km # 获取北京和上海的距离。mi 为英里,ft 为英尺。 georadius china:city 110 30 1000 km # 获取经纬度为110 30 ,半径 1000km 以内的城市位置 georadiusbymember china:city shanghai 500 km # 获取上海,半径 500km 内的城市位置 georadius china:city 110 30 1000 km withcoord # 带着经纬度展示 georadius china:city 110 30 1000 km withdist count 1 # 带着距离展示展示1个 geohash china:city beijing chongqing #该命令将返回11个字符的Geohash字符串,如果两个字符串越接近,表示距离越近 # GEO 底层的实现原理其实就是 Zset,我们可以使用 Zset 命令来操作 geo zrange china:city 0 -1 # 获取所有元素 zrem china:city xian # 删除西安元素
5.2 Hyperloglog (基数统计)
pfadd key1 a b c d e f i j # 创建第一组元素 key1 pfadd key2 f i j k l m n # 创建第一组元素 key2 pfmerge key3 key1 key2 # 合并第一组元素和第二组元素 -> key3 pfcount key3 # 统计元素个数
5.3 Bitmaps (位存储)
setbit sign 0 0 # 设置数据,1 代表打卡,0 代表不打卡 setbit sign 1 1 setbit sign 2 0 getbit sing 0 # 获取,第一天 是否打卡 bitcount sing # 统计 打开天数,统计 为 1 的天数
6. Redis 事务
-
redis 事务具有:一次性、顺序性、排他性
-
开启事务:
multi # 开启事务 set k1 v1 # 命令程序放入队列 set k2 v2 set k3 v3 get k3 set k4 v4 exec # 执行事务 discard # 取消事务
-
编译型异常,代码命令写错,所有的命令都不会执行。
-
运行时异常,如 1/0,代码没问题,但是运行时命令会报错,其他命令正常执行。
-
这时候 我们可以加乐观锁。
7. Redis 乐观锁
-
开启乐观锁
set money 100 # 正常执行 set out 0 watch money # 监视 money 对象 multi # 开启事务 decrby money 20 # money 减 20 incrby out 20 # out 加 20 exec # 执行事务,在此之前,如果 money 有了变化,就执行失败 # 数据期间没有发生变化,这个时候就正常执行成功!如果事务未结束期间有数据变化,则执行失败
8. Redis发布订阅
-
订阅端
127.0.0.1:6379>subscribe lan # 订阅一个频道 lan Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "lan" 3) (integer) 1 # 等待消息 1) "message" # 消息 2) "lan" # 消息频道 3) "hello lan" # 消息内容
-
发送端
127.0.0.1:6379>publish lan "hello lan" # 发布者来 发送 hello 到 lan 频道
9. Redis主从复制
-
默认下所有服务都是主库,只配置从库,不用配置主库!
-
info replication # 查看当前库的信息
-
-
复制两份 redis.conf 配置文件,修改两份从库配置文件
92行 # 修改端口号。 244行 # 修改 pidfile /var/run/redis_端口号.pid。 257行 # 修改日志文件名 logfile “xxx.log”。把每个服务的日志文件名都改成不一样 339行 # 修改 dbfilename “xxx.rdb”。持久化文件也要改 slaveof 127.0.0.1 6379 # 找老大,slaveof 老大ip地址 老大端口号 # 或者直接在配置文件里改 replicaof 主机ip 主机端口号 masterauth 主机密码 如果主机设了密码 小弟需要设置:masterauth 主机密码
10. 哨兵模式
sentinel.conf # vim 配置哨兵配文件,名字一定要是这个 sentinel montitor 被监听的名称 host port 1 # 在配置文件里写 后面的数字 1 ,代表主机挂了,从机投票看让谁接替为主机 sentinel montitor myredis 127.0.0.1 6379 1 # 文件里写 监听 ip地址 端口号 起名为myredis sentinel auth-pass <主机名字> <password> # 监听的从机有密码的 需要配置 redis-sentinel kconfig/sentinel.conf # 启动