第五天
redis
redis是基于内存的key-value的数据库
首先在对应redis文件中打开cmd 然后输入redis-server.exe redis.windows.config
开开启服务端 关闭服务端是ctrl + c
然后再开一个cmd 输入redis-cli.exe
开启客户端 就可以进去了 也可以输入redis-cli.exe -h localhost -p 6379
来进入客户端
然后可以设置密码 在config文件夹下ctrl+f搜索pass 有一个requirepass 后面就是密码
-
数据类型
哈希数据类似于hashMap
列表按照插入顺序排序类似队列 左侧就是头部 右侧就是尾部 可以有重复元素
集合 也叫无序集合 不能有重复元素 类似于hashSet
有序集合 每一个元素会关联一个分数(score) redis会自动按分数升序排序 没有重复 -
字符串操作
-
哈希操作
-
列表操作
-
集合操作
-
有序集合操作
-
通用操作
java操作redis
这里使用的是spirng data redis 首先就是导入Spring Data Redis的依赖 然后配置Redis数据源 通过编写配置类创建RedistributionTemplate对象 最后通过RedisTemplate对象操作Redis
创建一个RedisTemplate模板对象 需要在配置类下配置
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
log.info("开始创建redis模板化对象....");
RedisTemplate redisTemplate = new RedisTemplate();
//设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redisKey的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
这里设置序列化器即使为了在操作redis的时候 保证保存的key是一样的 因为java在进行存储的时候会再进行封装一层 会导致存储的value跟key都不一样 但是加上序列化器之后就保证了key是一样的 value虽然在redis中显示是不一样的 但是你用java再根据key得到value 也是一样的
创建完成之后就可以使用了
-
字符串
如果想操作字符串ValueOperations valueOperations = redisTemplate.opsForValue();
然后set就是redisTemplate.opsForValue().set("city","河北");
get就是String city = (String) redisTemplate.opsForValue().get("city");
setex(设置有效期)redisTemplate.opsForValue().set("code","123456",30, TimeUnit.SECONDS);
setnx(如果有就不创建 没有就创建)redisTemplate.opsForValue().setIfAbsent("lock","1");
-
哈希
操作哈希HashOperations hashOperations = redisTemplate.opsForHash();
hset->hashOperations.put("100","name","小明"); hashOperations.put("100","age","22");
hget->String name = (String) hashOperations.get("100", "name");
hdel->Set keys = hashOperations.keys("100");
hkeys->List values = hashOperations.values("100");
hvals->hashOperations.delete("100","name");
-
列表
操作集合ListOperations listOperations = redisTemplate.opsForList();
lpush->listOperations.leftPushAll("list",2,3,4,5); listOperations.leftPush("list",5);
rpop->listOperations.rightPop("list");
lrange->List list = listOperations.range("list", 0, -1);
llen->listOperations.size("list");
-
集合
操作setSetOperations setOperations = redisTemplate.opsForSet();
sadd->setOperations.add("myset1",1,2,3,4,5); setOperations.add("myset2",4,5,6,7);
smembers->Set myset1 = setOperations.members("myset1");
sinter->Set intersect = setOperations.intersect("myset1", "myset2");
scard(查看元素个数)->Long myset2 = setOperations.size("myset1")
sunion->Set union = setOperations.union("myset1", "myset2");
srem->setOperations.remove("myset1",1);
-
有序集合
操作ZsetZSetOperations zSetOperations = redisTemplate.opsForZSet();
zadd->zSetOperations.add("zset1",1,2);
zrange->Set zset1 = zSetOperations.range("zset1", 0, -1);
zincrby->zSetOperations.incrementScore("zset1",1,8);
zrem->zSetOperations.remove("zset1",1);
-
通用命令
keys->Set keys = redisTemplate.keys("*");
exits->Boolean name = redisTemplate.hasKey("name");
type->DataType type = redisTemplate.type(key);
del->redisTemplate.delete("list");
HttpClient
在java中通过编码的方式来发送HTTP请求 阿里云oss已经导入了httpClient依赖 就不需要再显示导入依赖了