redis常见命令,位图bitmap、redis缓存、redis集群搭建

一、概念

可以用做缓存kv数据

Redis key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值

Key取值原则: 键值不需要太长,消耗内存,且在数据中查找这类键值的计算成本较高 键值不宜过短,可读性较差

字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据 例如: 一张JPEG格式的图片或者一个序列化的Ruby对象 一

个字符串类型的值最多能存储512M字节的内容

二、常见命令

1、给键赋值

设置字符串值 SET  key  values  [EX seconds] [PX milliseconds] [NX|XX]

        EX 设置过期时间,秒,等同于SETEX key seconds value

        PX 设置过期时间,毫秒,等同于PSETEX key milliseconds value

        EXAT表是过期时间,set k v EXAT 时间戳(秒)表示到指定时间过期。

        NX 表示键(k)不存在时,才能设置,等同于SETNX key value

        XX 表示键(k)存在时,才能设置

设置多个键的字符串值 MSET key value [key value ...]

键不存在时,设置字符串值 MSETNX key value [key value ...] 注意:这是原子操作,要成功都成功,要失败都失败。

注意:

过期:Redis中可以给Key设置一个生存时间(秒或毫秒),当达到这个时长后,这些键值将会被自动删除

设置多少秒或者毫秒后过期 EXPIRE key seconds              PEXPIRE key milliseconds

设置在指定时间戳过期 EXPIREAT key timestamp(秒时间戳)     PEXPIREAT key milliseconds-timestamp(毫秒时间戳)

删除过期 PERSIST key

查看剩余生存时间 TTL key 

key存在但没有设置TTL,返回-1

key存在,但还在生存期内,返回剩余的秒或者毫秒

key曾经存在,但已经消亡,返回-2(2.8版本之前返回-1)

2、查看键

查找键 KEYS pattern

     pattern取值    * 任意长度字符  ? 任意一个字符  [ ] 字符集合,表示可以是集合中的任意一个:keys k[ab]  查的是ka和kb

查看 键类型 TYPE key

键是否存在 EXISTS key

键重命名 RENAME key newkey         RENAMENX key newkey

键删除 DEL key [key ...]

3、获取键值

获取值 GET key  键不存在,返回null

获取多个给定的键的值 MGET key [key ...]

返回旧值并设置新值 GETSET key value 如果键不存在,就创建并赋值

字符串长度 STRLEN key

4、修改键值

追加字符串 APPEND key value 如果键存在就追加;如果不存在就等同于SET key value

获取子字符串 GETRANGE key start(开始索引值) end(结束索引值)

                       索引值从0开始,负数表示从字符串从右边开始数起,-1表示最后一个字符,-2表示右边数第二个数。

覆盖字符串 SETRANGE key offset value 从offset开始把后面的用给的value替代

键值的增减 INCR key(增) DECR key(减) 数字类的字符串值会增减1;

指定增减数 INCRBY key decrement(指定数)    DECR key decrement

三、位图bitmap

不是真正的数据类型 是隐藏再String的一个二进制的存储方式

一个字符串类型的值最多能存储512M字节的内容 位上限:2^(9+10+10+3)=2^32b

每个位图的位置默认存储的为0,存储数据是按照一个数据八位一个字节的二进制,两个数据就是16位,依次顺推

set a a;0110 0001
位图:0110 0001 0000....00000
​
设置某一位上的值
SETBIT key offset value 
    offset偏移量,从0开始
    value不写,默认是0
获取某一位上的值
    GETBIT key offset
返回指定值0或者1在指定区间上第一次出现的位置
    BITPOS key bit [start] [end]   start 和end 表是的字节区间,结果显示的是位的结果,在位中的位置。

位操作

BITOP AND destkey key [key ...] ,对一个或多个 key 求逻辑并(有0则0),并将结果保存到 destkey

BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或(有1则1),并将结果保存到 destkey

BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或(相同为0,不同为0),并将结果保存到 destkey

BITOP NOT destkey key ,对给定 key 求逻辑非(将全部0和1互换),并将结果保存到 destkey

a:97:0110 0001
b:98:0110 0010
and :0110 0000      
or  :0110 0011  
xor :0000 0011

统计指定位区间上值为1的个数 BITCOUNT key [start] [end] 从左向右从0开始,从右向左从-1开始,注意官方start、end是字节,结果显示的是位 

BITCOUNT testkey 0 0表示从索引为0个字节到索引为0个字节,就是第一个字节的统计

BITCOUNT testkey 0 -1等同于BITCOUNT testkey 最常用的就是 BITCOUNT testkey

注意:八位是一个字节

库的操作

redis默认16个库

切换数据库

select index

清除当前库数据 FLUSHDB  清除所有库中的数据 FLUSHALL

四、redis缓存

1、导入依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>4.1.1</version>
        </dependency>

2、连接

Jedis jedis=new Jedis("master",6379);
jedis.set("k","v");

用hashmap传值

HashMap<String, String> map = new HashMap<>();
        //1500100008,符半双,22,女,理科六班
        map.put("id","1500100008");
        map.put("name","符半双");
        map.put("age","22");
        map.put("sex","女");
        map.put("clazz","理科六班");
        jedis.hmset("hash1500100008",map);

3、用redis连接池连接

         /**
         * 连接池配置文件
         */
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        /**
         * 连接池的设置
         */
        jedisPoolConfig.setMinIdle(2);
        jedisPoolConfig.setMaxIdle(5);
        /**
         * 创建连接池
         */
        JedisPool jedisPool = new JedisPool(jedisPoolConfig,"master",6379);
        Jedis resource = jedisPool.getResource();
        resource.set("a","a");
        /**
         * 使用时候 需要放回 close
         */
        resource.close();

五、redis集群搭建

1、创建安装目录 在master ,node1 ,node2中分别创建

mkdir  /usr/local/soft/redis-cluster

2、将redis 复制到redis-cluster 目录下修改名字为7000

复制前删除单机版缓存文件

rm -rf appendonly.aof

cp -r /usr/local/soft/redis  /usr/local/soft/redis-cluster
mv  /usr/local/soft/redis-cluster/redis /usr/local/soft/redis-cluster/7000

3、修改配置文件

vim /usr/local/soft/redis-cluster/7000/bin/redis.conf
daemonize    yes                         //redis后台运行
pidfile  /var/run/redis_7000.pid         //pidfile文件对应7000
port  7000                               //端口7000
cluster-enabled  yes                     //开启集群   把注释#去掉
cluster-config-file  nodes.conf          //集群的配置  配置文件首次启动自动生成
cluster-node-timeout   5000              //请求超时  设置5秒够了
appendonly  yes                          //aof日志开启   有需要就开启,它会每次写操作都记录一条日志  (全持久化)

4、复制7000

cd /usr/local/soft/redis-cluster
cp -r 7000 7001
cp -r 7000 7002
cp -r 7000 7003
cp -r 7000 7004
cp -r 7000 7005

5、修改每一个里面的配置

vim 7001/bin/redis.conf
把7000改成对应的端口号
pidfile /var/run/redis_7001.pid
port 7001

6、在7002 ,7003 复制到node1

scp -r /usr/local/soft/redis-cluster/7002 node1:/usr/local/soft/redis-cluster/
scp -r /usr/local/soft/redis-cluster/7003 node1:/usr/local/soft/redis-cluster/

7、在7004 ,7005 复制到node2

scp -r /usr/local/soft/redis-cluster/7004 node2:/usr/local/soft/redis-cluster/
scp -r /usr/local/soft/redis-cluster/7005 node2:/usr/local/soft/redis-cluster/

8、启动redis

1、在master中执行
    cd /usr/local/soft/redis-cluster/7000/bin
    ./redis-server redis.conf
    cd /usr/local/soft/redis-cluster/7001/bin
    ./redis-server redis.conf
​
2、在node1中执行
    cd /usr/local/soft/redis-cluster/7002/bin
    ./redis-server redis.conf
    cd /usr/local/soft/redis-cluster/7003/bin
    ./redis-server redis.conf
​
3、在node2中执行
    cd /usr/local/soft/redis-cluster/7004/bin
    ./redis-server redis.conf
    cd /usr/local/soft/redis-cluster/7005/bin
    ./redis-server redis.conf

9、启动集群 第一次使用 都免集群重启不需要使用

redis-cli --cluster create 192.168.160.110:7000 192.168.160.110:7001 192.168.160.120:7002 192.168.160.120:7003 192.168.160.130:7004 192.168.160.130:7005 --cluster-replicas 1

10、客户端访问reids集群

# -p  端口号   -h  节点ip  -c  自动重定向
redis-cli -p 7000 -h master -c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值