Redis

引用本地文章(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

2List 链表
lpush、rpush、lpop、rpop、lrang

3、Hash 哈希
hset、hget、hdel

4Set 集合
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();
    }
}
posted @   rbcd  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示