redis_study
下载docker 的桌面化工具dockerDesktop
https://www.docker.com/products/docker-desktop/
下载windows版本,安装
添加一个redis服务
查看docker中运行的虚拟机,连接redis
1.docker ps 查看docker中运行的虚拟机
2.docker exec -it myRedis bash 选在连接的虚拟机
3.redis-cli [options] [commonds] 启动
-h 默认 127.0.0.1
-p 默认 6379
-a 指定redis访问密码
ping
常用命令
help [command] 获取帮助,查看命令用法
keys 查看符合模板的所有key
del 删除指定的key
exists 判断key是否存在
expire 给一个key设置有效期,到期自动删除,单位为s
ttl 查看key的有效时间
flushdb和flushall命令删除所有key。
Redis常用命令集
1)连接操作命令
quit:关闭连接(connection)
auth:简单密码认证
help cmd: 查看cmd帮助,例如:help quit
2)持久化
save:将数据同步保存到磁盘
bgsave:将数据异步保存到磁盘
lastsave:返回上次成功将数据保存到磁盘的Unix时戳
shundown:将数据同步保存到磁盘,然后关闭服务
3)远程服务控制
info:提供服务器的信息和统计
monitor:实时转储收到的请求
slaveof:改变复制策略设置
config:在运行时配置Redis服务器
4)对value操作的命令
exists(key):确认一个key是否存在
del(key):删除一个key
type(key):返回值的类型
keys(pattern):返回满足给定pattern的所有key
randomkey:随机返回key空间的一个
keyrename(oldname, newname):重命名key
dbsize:返回当前数据库中key的数目
expire:设定一个key的活动时间(s)
ttl:获得一个key的活动时间
select(index):按索引查询
move(key, dbindex):移动当前数据库中的key到dbindex数据库
flushdb:删除当前选择数据库中的所有key
flushall:删除所有数据库中的所有key
5)String
set(key, value):给数据库中名称为key的string赋予值value
get(key):返回数据库中名称为key的string的value
getset(key, value):给名称为key的string赋予上一次的value
mget(key1, key2,…, key N):返回库中多个string的value
setnx(key, value):添加string,名称为key,值为value
setex(key, time, value):向库中添加string,设定过期时间time
mset(key N, value N):批量设置多个string的值
msetnx(key N, value N):如果所有名称为key i的string都不存在
incr(key):名称为key的string增1操作
incrby(key, integer):名称为key的string增加integer
decr(key):名称为key的string减1操作
decrby(key, integer):名称为key的string减少integer
append(key, value):名称为key的string的值附加value
substr(key, start, end):返回名称为key的string的value的子串
6)List
rpush(key, value):在名称为key的list尾添加一个值为value的元素
lpush(key, value):在名称为key的list头添加一个值为value的 元素
llen(key):返回名称为key的list的长度
lrange(key, start, end):返回名称为key的list中start至end之间的元素
ltrim(key, start, end):截取名称为key的list
lindex(key, index):返回名称为key的list中index位置的元素
lset(key, index, value):给名称为key的list中index位置的元素赋值
lrem(key, count, value):删除count个key的list中值为value的元素
lpop(key):返回并删除名称为key的list中的首元素
rpop(key):返回并删除名称为key的list中的尾元素
blpop(key1, key2,… key N, timeout):lpop命令的block版本。
brpop(key1, key2,… key N, timeout):rpop的block版本。
rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
7)Set
sadd(key, member):向名称为key的set中添加元素member
srem(key, member) :删除名称为key的set中的元素member
spop(key) :随机返回并删除名称为key的set中一个元素
smove(srckey, dstkey, member) :移到集合元素
scard(key) :返回名称为key的set的基数
sismember(key, member) :member是否是名称为key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
sunion(key1, (keys)) :求并集
sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
sdiff(key1, (keys)) :求差集
sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
smembers(key) :返回名称为key的set的所有元素
srandmember(key) :随机返回名称为key的set的一个元素
8)Hash
hset(key, field, value):向名称为key的hash中添加元素field
hget(key, field):返回名称为key的hash中field对应的value
hmget(key, (fields)):返回名称为key的hash中field i对应的value
hmset(key, (fields)):向名称为key的hash中添加元素field
hincrby(key, field, integer):将名称为key的hash中field的value增加integer
hexists(key, field):名称为key的hash中是否存在键为field的域
hdel(key, field):删除名称为key的hash中键为field的域
hlen(key):返回名称为key的hash中元素个数
hkeys(key):返回名称为key的hash中所有键
hvals(key):返回名称为key的hash中所有键对应的value
hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value
IDEA 连接Redis
- 官网下载redis,找到配置文件Redis.conf 修改如下内容
bind 127.0.0.1 #注释掉这部分,使redis可以外部访问
daemonize yes#用守护线程的方式启动
requirepass 密码#给redis设置密码
appendonly yes#redis持久化 默认是no
tcp-keepalive 300 #防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300
- 选择一块存储区域,存放配置文件
data文件存放 redis持久化的数据,做数据备份
3.启动docker,创建redis服务
truedei@truedei:~$ sudo docker run -p 6379:6379 --name redis -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
-p 6379:6379:把容器内的6379端口映射到宿主机6379端口
-v /data/redis/redis.conf:/etc/redis/redis.conf:把宿主机配置好的redis.conf放到容器内的这个位置中
-v /data/redis/data:/data:把redis持久化的数据在宿主机内显示,做数据备份
redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动
–appendonly yes:redis启动后数据持久化
docker run --name myRedis2 -p 6379:6379 -v /D/docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /D/docker/redis/data:/data/ -d redis:latest redis-server /etc/redis/redis.conf --appendonly yes
4.启动情况
5.idea到入redis依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.1</version>
</dependency>
6.建立连接
//创建一个工具类用来获取 Jedis 对象
public class JedisConnectionFactory {
private static final JedisPool jedisPool;
static {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(8);//最大连接数
poolConfig.setMaxIdle(8);//最大空闲连接
poolConfig.setMinIdle(0);//最小空闲连接
// poolConfig.setMaxWait(new Duration(0, 0));
poolConfig.setMaxWaitMillis(10000);
jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379,1000,"chen.g0603");
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
SpringDataRedis
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置文件
spring:
redis:
host: 127.0.0.1
port: 6379
password: chen.g0603
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100
3,注入RedisTemplate
@AutoWired
private RedisTemplate redisTemplate;
4.测试连接
@AutoWired
private RedisTemplate redisTemplate;
@Test
void testString(){
redisTemplate.opsForValue().set("name","tom");
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
5.数据存储被序列化,需要进行转码减少存储信息,实现全自动序列化和反序列化
但是存储了类的字节码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrpCdfxT-1657423929216)(vx_images/308332309239879.png)]
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate (RedisConnectionFactory connectionFactory){
//创建redistemplate对象
RedisTemplate<String, Object> template = new RedisTemplate<>();
//设置连接工厂
template.setConnectionFactory(connectionFactory);
//创建json序列化工具
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//设置key的序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
//设置value的序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}
6.因为SpringDataRedis中有包装好的 StringRedisTemplate 他的key和value的序列化默认为string 减少了序列化存储的空间但是需要自己手动的进行反序列化
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void testStringRedisTemplate(){
String user = JSON.toJSONString(new User("tom", 212));
System.out.println("user-->JSON:::>"+user);
stringRedisTemplate.opsForValue().set("user:101",user);
String s = stringRedisTemplate.opsForValue().get("user:101");
System.out.println("get-->redis :user::::>"+s);
User user1 = JSON.parseObject(s, User.class);
System.out.println("JSON-->User:::>"+user1);
}