一、概念
可以用做缓存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