redis
redis学习
redis作用
- 作为热点数据缓存使用(验证码)
- session共享
- 解决高并发问题
redis下载安装
在Linux下安装,我使用Ubuntu安装, redis官网下载最新版安装包
上传至服务器,首先确保服务器安装了gcc编译器,随后使用 tar -zxvf redis**** 命令解压
随后进入解压后的redis目录下,使用 MAKE 命令进行编译,然后使用 MAKE INSTALL 命令进行安装
redis配置
进入redis.conf文件中,修改 daemonize no 为daemonize yes,代表支持守护运行(后台运行)
redis运行与关闭
redis-server运行redis
redis-cli进入redis控制台
redis-cli shutdown结束redis
redis常用命令
select 1 切换到1号库,一共16个库
keys * 查看当前库所有键
exists key 判断某个键是否存在
type key 查看key的类型
del key 删除指定key
unlink key 根据value选择非阻塞删除
expire key 10 为key设置过期时间10s
ttl key 查看还有多久过期,返回-2已过期,-1永不过期
dbsize 查看库的大小
flushdb 清除当前库
flushall 通杀全部库
redis常用数据类型
String
set key value 设置键值对
get key 根据get查询键值
append key value 将给定的value追加到原值末尾
strlen key 得到key对应值的长度
setnx key value 在key不存在的时候,设置key的value
incr key 将key对应的值增1,只有数值值有用
decr key 将key对应的值减1,只有数值值有用
incrby / decrby key <步长> 将key中的值增加多少或者减少多少步长
mset key1 value1 key2 value2 .... 同时设置多个键值对,mget同理,
msetnx key1 value1 key2 value2 同时设置多个键值对,当key不存在是设置
getrange key 初始位置 结束位置 取得值的范围
setrange key 初始位置 value 从初始位置开始覆盖key的字符串
setex key 过期时间 value 设置键的同时设置过期时间
getset key value 设置新值同时获得了旧值
List
list的数据结构为quicklist,在元素较少时使用连续空间存储(ziplist),当数据量较多时才使用quicklist
lpush/rpush key value1 value2 value.. 从坐标或右边插入一个或者多个值
lpop/rpop key 从左边或者右边取出一个值,如果取完了则key就不存在了
rpoplpush key1 key2 从key1列表右边取出一个值放入key2列表的左边
lrange key start stop 按照索引下标从左到右获取元素
lindex key index 获取索引下标对应元素
llen key 获得列表长度
linsert key before value new value 在value的后面插入新的value
lrem key n value 从左边删除n个value
lset key index value 将列表key下标为index的值替换为value
Set
set可以自动排重,适合不想要重复数据的情况,set使用hash结构
sadd key value1 value2 将一个或者多个元素加入到集合key中
smembers key 取出集合所有值
sismember key value 判断集合中是否有该值
scard key 返回元素个数
screm key value1 value2 删除集合中的某个或者多个元素
spop key 随机从集合中取出一个值
srandmember key n 随机从集合中取出n个值,但不删除
smove source destination value 把集合中的一个值移动到另一个集合
sinter key1 key2 返回两个集合的交集
sunion key1 key2 返回两个集合的并集
sdiff key1 key2 返回两个集合的差集(key1中的)
Hash
hash是一个键值对集合,适合存储对象
hset key field value 给key集合的fileld属性赋值value
hget key filed 从key集合的filed取出value
hmset key1 field1 value1 field2 value2 批量设置hash的值
hexists key field 查看key中的field是否存在
hkeys key 查看该集合的所有field
hvals key 查看该集合的所有value
hincrby key field increment 为hash表key中的域field的值加increment
hsetnx key field value 仅当field不存在时,设置field的值为value
Zset
Zset是一个没有重复元素的字符串集合,跳跃表
zadd key score1 value1 score2 value2 将一个或者多个元素及其score值加入到有续集key中
zrange key start stop [withscores] 返回key中下标在start到stop之间的元素,带上withcores可以显示scores
zrangebyscore key min max [withscores] 返回min max范围内的元素(从小到大)
zrevrangebyscore key max min [withscores] 返回max min范围内的元素(从大到小)
zincrby key increment value 为元素的score加上增量
zrem key value 删除该集合下指定元素的值
count key min max 统计该集合分数区间的元素个数
zrank key value 返回该值在集合中的排名
Bitmaps
以bit形式存储的键值对
setbit key offset value(0/1) 设置key所属空间的offset位置的value
getbit key offset 得到key所属空间的offset位置的value
HyperLogLog
pfadd key element 将元素添加到HyperLogLog中
pfcount key 获得key中元素的数量
pfmerge destkey sourcekey1 sourcekey2 将一个或者多个HLL的元素合并到一个新的HLL
Geospatial
存储地理信息的数据类型
geoadd key 经度 纬度 城市名称 给元素设置经纬度
geopos key member 获得指定地区的坐标值
geodist key member1 member2 m/km/ft/mi 取到两个位置的直线距离
georadius key longitude latitude radius m/km/ft/mi 以给的的经纬度为中心,找出某一半径内的元素
Jedis使用
maven导入jedis依赖
<!--Jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.3</version>
</dependency>
使用步骤:
Jedis jedis=new Jedis("119.91.72.70",6379);
jedis.auth("***");如果有密码的话
//参考jedis里面的方法
jedis.set("test","111");
SpringBoot整合redis
导入依赖:
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--commons-pool连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
配置文件
spring:
#redis配置
redis:
#地址
host: 119.91.72.70
#端口
port: 6379
#密码
password: *****
#数据库索引
database: 0
#连接超时时间,单位毫秒
timeout: 1800000
lettuce:
pool:
#最大连接数
max-active: 20
#最大阻塞时间(-1为无限制)
max-wait: -1
#最大空闲连接
max-idle: 5
#最小空闲连接
min-idle: 0
配置类
@EnableCaching
@Configuration
public class RedisConfigure extends CachingConfigurerSupport {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> template = new RedisTemplate<>();
RedisSerializer<String> redisSerializer=new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper=new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
template.setConnectionFactory(factory);
template.setKeySerializer(redisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory){
RedisSerializer<String> redisSerializer=new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper=new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
RedisCacheConfiguration configuration=RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(600))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager=RedisCacheManager.builder(factory)
.cacheDefaults(configuration)
.build();
return cacheManager;
}
}
redis事务
输入Multi 命令后,输入的命令都会进入组队阶段,不会执行,直到输入ExEC命令后,redis会将之前队列中的命令依次执行。可以使用discard命令放弃组队。
组队阶段如果有命令错误,执行时所有命令均无法执行。
执行阶段有错误,只有错误命令不执行。
watch
watch key监视key,如果在事务执行之前这个key被改动,那么打断该事务。
unwatch
取消对命令的监视
redis持久化
RDB
-
save方式触发,但会阻塞当前redis服务器,在save期间,redis不能处理其他命令。 -
bgsave在后台异步进行快照操作,同时也可响应其他命令。 -
自动触发:在redis.conf文件中配置,可以选择如下配置

RDB恢复备份:将rdb文件拷贝至redis目录下启动redis即可。
AOF
AOF只追加文件,不改写文件
AOF默认不开启
如果RDB和AOF同时开启,默认使用AOF

浙公网安备 33010602011771号