Redis学习笔记
- 配置文件
- 启动redis
- 与redis进行交互
- redis命令
- Redis通用命令
- keys 查看所有符合模板的key
- type 查看这个key的存储类型
- del 删除一个key
- exists 判断一个Key是否存在
- ttl 查看一个key的有效期
- expire 给一个key设置有效期
- String 类型命令
- set 给字段设置值### MSET 批量设置值
- get 获取key的值 mget批量获取key的值
- incr 让一个整形的key自增1
- incrby 让一个整形的Key自增指定的步长
- incrByFloat 让一个浮点型的key自增指定的步长
- setnx 如果key不存在则设置key的值
- setex 设置key的值和过期时间
- Hash类型
- hset 设置hash类型的属性值
- hget 获取一个hash属性值
- hmset 同时 设置多个hash属性值
- hmget 同时获取多个hash属性值
- hkeys 获取hash的所有属性
- hvals 获取hash所有的属性值
- hgetAll 获取hash所有的属性和属性值
- hincrby 让一个整形hash属性自增指定的步长
- hincrbyfloat 让一个浮点型hash属性自增指定步长
- hdel 删除一个或多个hash属性
- hlen 获取hash包含多少个属性
- hsetnx 如果hash中的属性不存在才执行,否则不执行
- hstrlen 获取hash属性值的长度
- List类型
- rpush 从list的右边插入一个或多个元素
- lpush 从list 的左边插入一个或多个元素
- lrang 返回角标范围内的元素
- lpop 返回并删除第一个或多个元素
- RPOP 返回并删除最后一个或多个元素
- LINDEX 获取索引下标的元素
- linsert 向指定的元素前面或后面插入元素
- llen list中包含多少元素
- lpushx 仅当list存在时才向list左边插入一个或多个元素。Rpushx是向右边插入元素
- LREM 删除元素
- Set 类型
- sadd 向集合中插入一个或多个元素
- scard 获取集合元素的个数
- smembers 获取集合中所有的元素
- sismember 判断元素是否是集合中的元素
- smismember 依次判断多个元素是否是集合中的元素
- srem 从集合中删除指定的元素
- srandmember 从集合中随机返回一个或多个元素
- sinter 返回多个集合之间的交集
- sunion 返回多个集合之间的并集,无重复的并集
- sdiff 返回多个集合之间的差集
- SortedSet 类型
- SpringBoot 整合Redis
- 依赖包
- 配置文件
- RedisTemplate模板
- 测试
配置文件
- 修改配置文件
- 修改一下配置
// 监听地址,默认是127.0.0.1只能本地进行访问。修改成指定地址可以访问,0.0.0.0是任意地址都可访问
bind 0.0.0.0
// 守护进行 修改成yes即可后台运行
daemonize yes
// 需要密码登录
requirepass 123456
- 其他配置
// 监听端口
port 6379
// 工作目录,默认是当前目录,也就是redis-server存放的目录,日志,持久化文件会保存在这个目录
dir ./
// 数据库数量,设置为2,代表只是用2个库,默认有16个库,编号0~15
databases 2
// 设置redis能够使用的最大内存
maxmemory 512mb
// 日志文件,默认为空,不吉利日志,可以指定日志文件名
logfile "redis.log"
启动redis
1.前台启动 redis-server
- 基于配置文件启动 redis-service /usr/local/redis-6.2.1/redis.cnf
通过图片我们可以看到redis进程
与redis进行交互
- 通过redis自带的命令行客户端进行交互
redis-cli [options]
其中常见options有
- -h 127.0.0.1:指定要连接的redis节点ip地址,默认是127.0.0.1
- -p 6379:指定要连接redis节点的端口号,默认是6379
- -a 123456:指定访问redis的密码
当我们看到PONG是代表已经完成redis的链接,可以正常交互了
redis命令
Redis通用命令
1.select index :选择指定数据库
// 选择0号数据库
select 0
// 选择3号数据库
select 3
keys 查看所有符合模板的key
- keys h?llo 匹配:hallo和hello
- keys h*llo 匹配:hllo 和 heeeello
type 查看这个key的存储类型
del 删除一个key
exists 判断一个Key是否存在
ttl 查看一个key的有效期
expire 给一个key设置有效期
给一个key设置有效期,有效期到期时该key会被自动删除
String 类型命令
String类型其Value是字符串,最大长度不可超过512M,根据字符串的格式不同又可以分为三类
- string: 普通字符串
- int:整数类型,可以做自增,自减操作
- float:浮点类型,可以做自增,自减操作
set 给字段设置值
### MSET 批量设置值
get 获取key的值 mget批量获取key的值
incr 让一个整形的key自增1
incrby 让一个整形的Key自增指定的步长
incrByFloat 让一个浮点型的key自增指定的步长
setnx 如果key不存在则设置key的值
setex 设置key的值和过期时间
Hash类型
hset 设置hash类型的属性值
hget 获取一个hash属性值
hmset 同时 设置多个hash属性值
hmget 同时获取多个hash属性值
hkeys 获取hash的所有属性
hvals 获取hash所有的属性值
hgetAll 获取hash所有的属性和属性值
hincrby 让一个整形hash属性自增指定的步长
hincrbyfloat 让一个浮点型hash属性自增指定步长
hdel 删除一个或多个hash属性
hlen 获取hash包含多少个属性
hsetnx 如果hash中的属性不存在才执行,否则不执行
hstrlen 获取hash属性值的长度
List类型
rpush 从list的右边插入一个或多个元素
lpush 从list 的左边插入一个或多个元素
lrang 返回角标范围内的元素
lpop 返回并删除第一个或多个元素
RPOP 返回并删除最后一个或多个元素
LINDEX 获取索引下标的元素
linsert 向指定的元素前面或后面插入元素
llen list中包含多少元素
lpushx 仅当list存在时才向list左边插入一个或多个元素。Rpushx是向右边插入元素
LREM 删除元素
语法
lREM key count element
- count>0:从头开始删除 删除count个等于element元素
- count =0 删除原有等于element的元素
- count < 从右边删除count个等于element的元素
Set 类型
sadd 向集合中插入一个或多个元素
scard 获取集合元素的个数
smembers 获取集合中所有的元素
sismember 判断元素是否是集合中的元素
smismember 依次判断多个元素是否是集合中的元素
srem 从集合中删除指定的元素
srandmember 从集合中随机返回一个或多个元素
sinter 返回多个集合之间的交集
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SINTER key1 key2 key3 = {c}
sunion 返回多个集合之间的并集,无重复的并集
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SUNION key1 key2 key3 = {a,b,c,d,e}
sdiff 返回多个集合之间的差集
key1 = {a,b,c,d}
key2 = {b,c,e}
SDIFF key1 key2 = {a,d}
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SDIFF key1 key2 key3 = {b,d}
SortedSet 类型
SpringBoot 整合Redis
依赖包
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'org.apache.commons:commons-pool2'
配置文件
spring:
redis:
host: 106.14.222.244
port: 6379
password: 123456
connect-timeout: 1000
lettuce:
pool:
max-active: 8
max-idle: 4
min-idle: 2
max-wait: 1000
RedisTemplate模板
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> getRedisTemplate(RedisConnectionFactory factory)
{
//创建redisTemplate
RedisTemplate<String,Object> template = new RedisTemplate<>();
//设置连接工厂
template.setConnectionFactory(factory);
//创建Json解析
Jackson2JsonRedisSerializer<?> jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance);
jsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//设置序列化
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
测试
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Test
void contextLoads() {
redisTemplate.opsForValue().set("name","王五");
redisTemplate.opsForValue().set("user:200", new User("冯家振", 21));
}
@Test
void testHash() {
Map<String, Object> map = new HashMap<>();
map.put("name","冯家振");
map.put("age", 12);
map.put("sex", "男");
redisTemplate.opsForHash().putAll("myHash", map);
Map<Object, Object> myHash = redisTemplate.opsForHash().entries("myHash");
for (Object key : myHash.keySet()) {
System.out.println(key + " " + myHash.get(key));
}
}
}