Redis

安装

下载

1.wget https://download.redis.io/releases/redis-6.2.6.tar.gz
2.tar xzf redis-6.2.6.tar.gz
3.cd redis-6.2.6
4.make

安装

make命令报错,

​ 错误1:gcc命令找不到,是由于没有安装gcc导致

​ 执行命令:yum -y install gcc

​ 错误2:jemalloc/jemalloc.h错误

​ 执行命令:make MALLOC=libc

启动

使用命令:./redis-server & 可后台运行

带着配置文件启动./redis-server …/redis.conf &

使用

在src目录下使用命令:./redis-cli

./redis-cli -h ip地址(127.0.0.1) -p 端口号(6379)

关闭

切换到redis/src/目录下 执行./redis-cli shutdown

基本命令

1.ping

​ 返回pong说明正常

2.select index
select 5 表示使用同名编号
3.flushdb

​ 删除当前库的数据

4.exit退出当前redis链接
5.keys pattern

​ *:表示0-n个字符 例:keys * 查询所有的key

​ ?:表示单个字符 例: wo?d ,匹配word wood

​ wo??d 匹配world

6.expire key seconds

​ 作用设置key的生存时间,超出时间key自动删除,单位秒

​ 设置成功返回1其他情况0

7.ttl key

​ 以秒为单位,返回key的剩余生存时间(time to live)

​ 返回值:

​ -1:没有设置key的生存时间,key永不过期

​ -2:key不存在

​ >=0:key的剩余时间,单位秒

8.type key

​ 作用:查看key所存储值的数据类型

​ 返回值:字符串表示的数据类型

​ none(key不存在)

​ zset(有序集)

​ hash(哈希表)

9.del key[key…]

​ 删除key,不存在的key忽略

​ 返回值:数字,删除的key的数量

10.mset

​ mset key1 value1 key2 value2…

11.mget

​ mget key1 key2…

数据类型

hash

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-exd9cEiP-1661827012570)(C:\Users\OMEN\AppData\Roaming\Typora\typora-user-images\image-20220311173616005.png)]

list

redis列表是简单的字符串列表,按照插入顺序排序

在这里插入图片描述

在这里插入图片描述

set

是string类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据

在这里插入图片描述

zset

有序集合,且不允许重复的成员

数据类型命令

1.String
set

​ key value 覆盖以前的旧值

get

​ get key 获取key的值 nil表示null

incr

​ incr key 只能对数字类型使用,同i++作用一样,对value+1

​ string默认0

decr

​ i–

append

​ append key value

​ 如果key存在,则把value追加到key原来旧值的末尾

​ 不存在,则将key设置值为value

​ 返回值,追加之后的总长度

strlen key

​ key的长度

getrange

​ getrange key start end

​ 作用:获取key中字符串值从start开始到end结束的子字符串,包括start和end,负数

​ 表示从字符串的末尾开始,-1表示最后一个字符,第一个为0

​ 返回值:截取的子字符串

​ setrange

​ setrange key offset value

​ 用value替换key的存储的值从offset开始,不存在的key做空白字符串

​ 返回值:修改后的字符串的长度

2.hash
hset

​ 语法:hset hash表的key field value

​ 作用:将哈希表key中的域field的值设为value,如果key不存在,则新建hash表

​ 行复制,如果有field,则覆盖值

​ 返回值:

​ ①如果field是hash表中新field,且设置值成功,返回1

​ ②如果field已经存在,旧值覆盖新值,返回0

hget

​ hget key field

​ 不存在返回控

hmset

​ hmset key filed1 value1 filed2 value2…

​ 创建多个field value

hmget

​ hmget key filed…

​ 没有的filed返回nil

hgetall

​ hgetall key

​ 查看key里面所有的filed 和 value

hdel

​ hdel key filed

​ 删除key里面的filed

hkeys

​ hkeys key

​ 查看key里面所有的filed

hvals

​ hvals key

​ 查看key里面所有的value

hexists

​ hexists key field

​ 查询fild是否存在于key中

​ 返回:1存在

​ 0不存在

在这里插入图片描述

3.list
lpush

​ lpush key value[value…]

​ 从左侧操作表头

rpush

​ rpush key value[value…]

​ 从左侧操作表头

lrange

​ lrange key start end

​ 查询列表的起始区间value

在这里插入图片描述

在这里插入图片描述

lindex

​ lindex key index

​ 去下标为index的值

llen

​ llen key

​ key的长度

lrem

lrem key count value

​ count>0从头部删除count个和value值相等的元素,

​ count<0从尾部删除count个和value值相等的元素,

​ count=0删除所有和value值相等的元素

在这里插入图片描述

lset

​ lset key index value

​ 把下标为index的值用value替换

​ 成功返回ok,超出范围或key不存在返回error

linsert

​ linsert key befor|after pivot value

​ 把value值插入到pivot之前或之后

​ 执行成功返回新列表长度,没找到返回-1,key不存在返回0,有 重复值在第一个值插入

在这里插入图片描述

4.set
sadd

​ sadd key member[member…]

​ 把一个或多个member加入到key中,已存在集合中的元素将被忽略

​ 返回值:加入到集合的新元素的个数

smembers

​ smembers key

​ 显示集合的成员

sismember

​ sismember key value

​ 检查value是否存在key中

​ 返回:1存在

​ 0不存在

scard

​ scard key

​ 返回set的长度

srem

​ srem key member[member…]

​ 删除key中的member

srandmember

​ srandmember key[count]

​ count正数,表示在集合中随机抽取俩个元素

在这里插入图片描述

​ count负数,可以重复多次

在这里插入图片描述

spop

​ spop key[count]

​ 默认删除一个,并显示,count删除个数

在这里插入图片描述

zset
zadd

​ zadd key score member[score member…]

​ 把一个或多个member元素及其score值加入到有序集合key中,若member存在集合中,则更新值,score可以是整数或浮点数,添加member的score相同按字典序排序

​ 返回值:数字,新添加的元素个数

在这里插入图片描述

zrange

​ zrange key start stop[withscores]

​ 查询有序集合,指定区间内的元素,按score值从小到大排序,withscores选项让score和value一同返回

​ 返回值:自定义区间的成员集合

zrevrange

​ 从大到小排序

zrem

​ zrem key member[member…]

​ 删除key中的member

​ 返回删除的个数

zrangebyscore

​ zrangebyscore key min max [withscores] [limit offset count]

​ 获取score值位于min<=score<=max之间的成员,从小到大排序

​ 使用(表示不包过 -inf表示最小,+inf表示最大

​ limit 用来限制返回结果的数量和区间

​ withscores 显示score和value

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

zrangebyscore

​ 从大到小排序显示

zcount

​ zcount key min max

​ 返回一个score在min和max区间的score个数

redis事务

事务操作的命令
1.multi

​ 开启事务

​ 返回ok

2.exec

​ 执行事务块

​ 事务被打断返回nil

3.discard

​ 放弃事务

​ 返回ok

4.watch

​ watch key[]

​ 作用监视key

5.unwatch

​ 取消监视

事务的实现
redis没有事务的回滚

持久化

RDB

​ redis database(RDB):指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存

​ rdb把数据集存储在二进制文件中,只有一个文件,默认是dump.rdb。适合做备份,保存数据是在单独的进程中写文件,不影响redis的正常使用,rdb恢复数据时比其他的AOF速度快

​ save 表示在seconds秒内数据集至少有changes个key改动

​ 可以有多条save 满足任意一条就满足

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JHATmqIM-1661827012591)(C:\Users\OMEN\AppData\Roaming\Typora\typora-user-images\image-20220313161432483.png)]

缺点:会有一定数据的丢失

AOF

​ Append-only File(AOF) ,redis每次接收到一条改变数据的命令时,它将把该命令写到一个AOF文件中(只记录写操作,读操作不记录),当redis重启时,它通过执行AOF文件中所有命令来恢复数据

appendonly:默认时no ,yes打开aof持久化

appendfilename:指定aof文件名,默认appendonly.aof

dir:指定rdb和aof文件存放目录,默认./

appendfsync:配置向aof文件写命令数据的策略:

​ no:不主动进行同步操作。而是完全交由操作系统(30s一次),比较快但不很安全

​ always:每次执行写入都会执行同步,慢一些但是比较安全

​ everysec:每秒执行一次同步操作,比较平衡,默认

auto-aof-rewrite-min-size:允许重写最小的aof文件大小,默认64m,当aof文件大于64m,开始整理aof文件,去掉无用的操作命令,缩小aop文件

主从复制

主服务器用来修改数据(master)

从服务器用来读数据(slave)

端口号0-1024被操作系统占用

​ 可以从1025-65535中选

配置主服务器6380.conf

​ include /home/wjh/redis-6.2.6/redis.conf
​ daemonize yes
​ port 6380
​ pidfile /var/run/redis_6380.pid
​ logfile 6380.log
​ dbfilename dump6380.rdb

从服务器6382.conf

include /home/wjh/redis-6.2.6/redis.conf
daemonize yes
port 6382
pidfile /var/run/redis_6382.pid
logfile 6382.log
dbfilename dump6382.rdb
slaveof ip 端口

slaveof 表示是谁的从服务器

从服务器

不能写入数据

容灾处理

把从服务器升级为主服务器

salveof no one

另外一个需要重新指定主服务器 salveof ip 端口

哨兵

​ 高可用Sentinel哨兵

​ Sentinel哨兵redis官方提高的高可用方案,可以用来监控多个redis服务器实例的运行情况Redis Sentinel 是一个运行在特殊模式下的Redis服务器,Redis Sentinel是在多个Sentinel进程环境下互相协作工作的

​ Sentinel系统有三个主要任务:

​ 1.监控:Sentinel不断的检查主从服务器是否按照预期正常工作

​ 2.提醒:被监控的Redis出现问题时。Sentinel会通知管理员或其他应用程序

​ 3.自动故障转移:监控的主Redis不能正常工作,Sentinel 会开始进行故障迁移操作

三份sentinel配置文件修改:

1.修改port 26380 26382 26384

2.修改sentinel monitor mymaster ip 端口 2

​ 格式 sentinel monitor <Quorum投票数>

安全设置

  1. ./ redis-cli -a 密码

​ 2. auth 密码

Jedis

依赖
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.7.1</version><!--版本号可根据实际情况填写-->
</dependency>
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.3.2</version>
</dependency>
String host = "192.168.121.134";
int port = 6379;
String password = "123456";
Jedis jedis = new Jedis(host,port);
jedis.auth(password);
示例
String host = "192.168.121.134";
int port = 6379;
String password = "123456";
JedisPool pool = RedisUtils.open(host,port,password);
Jedis jedis = pool.getResource();
Map map = new HashMap<String,String>();
map.put("css","5");
map.put("html","10");
map.put("js","50");
jedis.hmset("javaweb",map);
System.out.println(jedis.get("student"));
Set<String> list = jedis.hkeys("javaweb");
for(String s:list){
    System.out.println(jedis.hget("javaweb", s));
}
System.out.println( "Hello World!" );
pool.close();
工具类
public class RedisUtils {


    private  static JedisPool pool;

    public static JedisPool open(String ip,int port,String password){
        if( pool == null){
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(20);//设置最大的线程数,一个线程就是一个jedis
            config.setMaxIdle(2);//设置最大的空闲数量
            config.setTestOnBorrow(true);//每一个对象都是检查可用的


            /*
            * poolConfig:配置器JedisPoolConfig
            * ip:redis所在的linux的ip
            * port:redis所在的端口
            * timeout:链接redis的超时,毫秒值
            * password: redis的密码
            *
            * */

            pool = new JedisPool(config,ip,port,6000,password);
        }
        return pool;
    }
    public static void close(){
        if(pool != null){
            pool.close();
        }
    }
}

){
if( pool == null){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(20);//设置最大的线程数,一个线程就是一个jedis
config.setMaxIdle(2);//设置最大的空闲数量
config.setTestOnBorrow(true);//每一个对象都是检查可用的

        /*
        * poolConfig:配置器JedisPoolConfig
        * ip:redis所在的linux的ip
        * port:redis所在的端口
        * timeout:链接redis的超时,毫秒值
        * password: redis的密码
        *
        * */

        pool = new JedisPool(config,ip,port,6000,password);
    }
    return pool;
}
public static void close(){
    if(pool != null){
        pool.close();
    }
}

}


“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值