引用本地文章(redis安装文档)
redis安装文档
redis官网
https://redis.io/
参考文件
https://www.cnblogs.com/zhoujie/p/redis3.html
https://www.cnblogs.com/rbcd/articles/17498983.html
下载安装包
https://download.redis.io/releases/ 下载安装包列表版本
https://download.redis.io/releases/redis-5.0.5.tar.gz 直接下载安装包
单机版安装
1、redis使用C语言编写,所以需要安装C语言库
yum install -y gcc-c++ automake autoconf libtool make tcl
2、解压后进入redis目录
cd /usr/local/redis-5.0.5/
3、编译
make
4、安装
make install PREFIX=/usr/local/redis
5、开启守护进程,复制 /usr/local/redis-5.0.5/中的redis.conf配置文件
cp redis.conf /usr/local/redis/bin/
6、修改配置文件:vim /usr/local/redis/bin/redis.conf
daemonize的值由no修改为yes
7、修改外部访问,在redis5中需要修改配置文件redis.conf允许外部访问。需要修改两处
注释掉:#bind 127.0.0.1
protected-mode yes 改成 no
8、启动redis
./redis-server redis.conf
9、重启redis
./redis-cli shutdown
./redis-server redis.conf
10、启动客户端工具
./redis-cli
自带的测试集群
测试版感受,目录 /utils/create_cluster/,自动创建的测试集群是3主3从redis集群
集群部署
集群创建可以使用/utils/install_server.sh 创建多个实例,也可以使用配置文件copy的形式创建6个文件,如下是使用多个配置文件的形式创建集群
1、集群配置至少需要包含如下这几项配置
port 8801 端口号
cluster-enabled yes 开启集群模式
cluster-config-file nodes_8801.conf 集群的配置,配置文件首次启动自动生成8801,8802,8803
cluster-node-timeout 5000 请求超时,默认15秒,可自行设置
appendonly yes 开启aof持久化模式,每次写操作请求都追加到appendonly.aof文件中,指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失(默认为no)
#appendfsync always 每收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec 每秒强制写入磁盘一次,性能和持久化方面做了折中,推荐(默认值)
requirepass pwd123 redis密码设置
masterauth pwd123 主从连接密码配置
protected-mode no 外网访问时要关闭保护模式,集群创建后启用密码
daemonize yes redis后台运行
pidfile /var/run/redis_8801.pid pid文件
logfile /rbc/redis/logs/8801.log redis服务日志
dir /rbc/redis/db/8801 指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
bind 127.0.0.1 默认ip为127.0.0.1,绑定IP地址
2、需要创建日志目录、db目录
mkdir /rbc/redis/logs/
mkdir /rbc/redis/db/8801
3、启动6个redis节点服务
src/redis-server redis-cluster-conf/8801/redis.conf
src/redis-server redis-cluster-conf/8802/redis.conf
src/redis-server redis-cluster-conf/8803/redis.conf
src/redis-server redis-cluster-conf/8804/redis.conf
src/redis-server redis-cluster-conf/8805/redis.conf
src/redis-server redis-cluster-conf/8806/redis.conf
4、把这6个redis服务组成集群
src/redis-cli -a pwd123 --cluster create 127.0.0.1:8801 127.0.0.1:8802 127.0.0.1:8803 127.0.0.1:8804 127.0.0.1:8805 127.0.0.1:8806 --cluster-replicas 1
参数说明:
-- cluster-replicas 1 是指创建1个副本,上面创建的是3主3从的redis集群
-- -a 是指集群密码,需要和redis配置文件设置的密码保持一致
5、停止集群
kill掉6个服务
6、重启集群
先kill掉6个服务,再启动6个服务
6、重建集群
需要删除redis的服务目录db下的文件,然后启动6个服务并执行创建集群命令
客户端连接集群
redis-cli --cluster help 集群创建帮助
连接集群(参数-c可连接到集群,因为redis.conf将bind改为了ip地址,所以-h参数不可以省略,-p参数为端口号)
redis-cli -c -p 8801 -a pwd 客户端连接集群
redis-cli -c -h IP -p 8801 -a pwd 客户端连接集群
cluster nodes 查询节点列表
cluster info 查看集群信息
cluster help 查看集群相关指令
1、redis命令
keys *key* 模糊key查询
// 1、key操作
exists key 判断key是否存在;(存在返回数字,不存在返回0)
expire key 秒数 设置key的过期时间,单位秒;(成功返回1,失败返回0)
ttl key 查看key的剩余过期时间;(返回剩余时间,如果过期返回-1)
del key 根据key删除键值对;(返回被删除key的数量)
// 2、字符串值(String)
set key value nx key不存在时设置成功
set key value xx key存在时可以更新成功
type key 查询值类型
set key value 设置指定key的值;(成功返回OK)
get key 获取指定key的值;(返回key的值。不存在返回nil)
setnx key value 当且仅当key不存在时才新增;(不存在时返回1,存在返回0)
setex key seconds value 设置key的存活时间,无论是否存在指定key都能新增,如果存在key覆盖旧值。同时必须指定过期时间;(返回OK)
// 3、哈希表(Hash)
hset key field value 给key中field设置值;(成功1,失败0)
hget key field 获取key中某个field的值;(返回field的内容)
hmset key field value field value 给key中多个filed设置值;(成功OK)
hmget key field field 一次获取key中多个field的值;(value列表)
hvals key 获取key中所有field的值;(value列表)
hgetall key 获取所有field和value;(field和value交替显示列表)
hdel key field field 删除key中任意个field;(成功删除field的数量)
// 4、列表(List)
lpush key value value 向列表头部插入一个或多个值;(列表长度)
rpush key value value 向列表末尾中插入一个或多个值;(列表长度)
lpop
rpop
lrange list 0 -1 返回列表中指定区间内的值。可以使用-1代表列表末尾;(查询到的值)
lpush key value value 将一个或多个值插入到列表前面;(列表长度)
llen key 获取列表长度;(列表长度)
lrem key count value 删除列表中元素。count为正数表示从左往右删除的数量。负数从右往左删除的数量;(删除数量)
// 5、集合(Set)
sadd key value value value 向集合中添加内容。不允许重复;(集合长度)
scard key 返回集合元素数量;(集合长度)
smembers key 查看集合中元素内容;(集合中元素)
// 6、有序集合(Sorted Set); 有序集合中每个value都有一个分数(score),根据分数进行排序
zadd key score value score value 向有序集合中添加数据;(长度)
zrange key 区间 [withscores] 返回区间内容,withscores表示带有分数;(值列表)
2、redis数据结构
1、String 字符串
set、get、del、incr、decr
2、List 链表
lpush、rpush、lpop、rpop、lrang
3、Hash 哈希
hset、hget、hdel
4、Set 集合
sadd、srem、 scard、smembers、sismember
5、Zset(sorted set 有序集合)
zadd、zrem、zcard、zrange、zscore
3、redis数据持久化(Redis dataBase)RBD
一、三种触发机制
1、save:该命令会阻塞当前redis服务
2、bgsave:redis会在后台异步进行快照操作,具体操作是redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责
3、配置参数周期性备份:自动触发参数是由我们的配置文件来完成的
优点:RBD是一个非常紧凑的文件,保存了在某个时间点的快照
缺点:如何备份的时间间隔短,比较耗费服务器性能,备份时间间隔长,可能会导致数据恢复时丢失部分数据
Redission的使用
引入pom文件
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.9.1</version>
</dependency>
集群创建
Config config = new Config();
config.useClusterServers().addNodeAddress(new String[]{"redis://localhost:6379"});
config.useClusterServers().setPassword("123");
RedissonClient redissonClient = Redisson.create(config);
单机创建
Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379");
config.useSingleServer().setPassword("123");
RedissonClient redissonClient = Redisson.create(config);
锁控制示例
@Autowired
private RedissonClient redissonClient;
RLock lock = redissonClient.getLock(KEY);
if (lock.tryLock()) {
try {
} catch (Exception e) {
} finally {
lock.unlock();
}
}