学习一下懵逼的Redis

Redis学习笔记

— NoSql数据库,基于Key-Value键值对存储。

Redis 优势

1.性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

2.丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

3.原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

4.丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

5.Redis运行在内存中但是可以持久化到磁盘.提供两种不同持久化方法将数据存储到硬盘。一种rdb形式(全量数据备份,备份的是数据),一种aof形式(增量持久化备份,备份的是指令)。

常用redis基础数据类型和命令

String

1、set/get - 设置和获取key对应的值

eg: 

set age 18

get age

2、mget - 批量获取多个key值,不存在则返回nil

eg:

mget age name

3、incr && incrby - incr对key对应的值进行++操作,并返回新值;incrby加指定值。

eg:

incr age

incrby age 10

4、decr && decrby - decr对key对应的值进行–操作,并返回新值;incrby减指定值。

eg:

decr age

decr age 10

5、setnx(set if not exist)- 设置key对应的值为String类型value,如果key已存在则返回0(代表失败),1代表成功。

eg:

setnx age 22

6、setex(set expire)- 设置key对应的值为String类型value,并设定有效期。

eg:

setex name3 10 xxxx //(10s过期)

7、其他命令

getrange 获取key对应value子字符串

eg:

getrange name 0 3

mset 批量设置多个key的值,如果成功表示所有值都被设置,否则返回0表示没有任何值被设置

eg:
 
mset name1 xxx name2 yyy

msetnx,同mset,不存在就设置,不会覆盖已有的key

eg:

msetnx name xxx name3 zzz

getset 设置key的值,并返回key旧的值

eg:

getset name4 xxxyyy

append 给指定key的value追加字符串,并返回新字符串长度

eg:

append name qqq

Hash

hset-设置key对应的HashMap中的field的value

hget-获取key对应的HashMap中的filed的value

hgetall-获取key对应的HashMap中所有field的value

hlen-返回key对应的HashMap中的field的数量

eg:

hset myhashmap keyxxx valueyyy

hget myhashmap keyxxx

hgetall myhashmap

hlen myhashmap

hmset-批量设置和获取

eg:

hmset myhashmap name1 xxx name2 yyy name3 zzz

hdel-删除某个key

eg:

hdel myhashmap name1

List

–使用场景:消息队列,好友列表等

lpush——在key对应的list的头部添加一个元素

eg:

lpush mylist value1 value2 value3

lrange——获取key对应的list的指定下标范围的元素,-1表示获取所有元素

eg:

lrange mylist 0 -1
lrange mylist 0 3

rpush——在key对应的list的尾部添加一个元素

eg:

rpush mylist value4

llen——列表长度

lindex——获取具体值

lpop——从key对应的list的头部删除一个元素,并返回该元素

rpop——从key对应的list的尾部删除一个元素,并返回该元素

eg:

llen mylist

lindex mylist 3

lpop mylist

rpop mylist

Set

sadd——在key对应的set中添加一个元素

smembers——在获取key对应的set所有元素

spop——随机返回并删除set中一个元素

sdiff——求两个集合差集

sunion——求key对应的set并集

sinter——求key对应的set交集

eg:

sadd myset value1 value2 value3 value4

smembers myset

spop myset

sdiff myset1 myset2

sunion myset1 myset2

sinter myset1 myset2

SortSet

– Set的基础上增加顺序score,再根据score进行排序。比如用SortSet实现排行榜

zadd——在key对应的zset中添加一个元素

zrange——获取key对应的zset中指定范围元素,-1表示获取所有元素

zrem——删除key对应的zset中一个元素

zrangebyscore——返回有序集key中,指定分数范围的元素列表,排行榜中运用

zrank——返回key对应的zset中指定member排名。其中member按score值递增(从小到大);排名以0为底,也就是说,score值最小的成员排名为0,排行榜中运用

eg:

zadd myset 1 setvalue1 2 setvalue2 3 setvalue3

zrange myset 0 -1

zrange myset 0 -1 withscores

zrem myset setvalue2

zrangebyscore myset 1 3

zrank myset setvalue3

Redis消息订阅与发布

– 类似于信息管道,用来进行系统间消息解耦,类似于mq。主要有消息发布者和订阅者。比如运用于:订单支付成功,会员支付成功,会员系统加积分,钱包扣钱,发货系统等。

1、PUBLISH

–将信息message发送到指定频道Channel。返回收到的客户端数量。

2、SUBSCRIBE

–订阅给指定频道信息。

3、UNSUBSCRIBE

–取消订阅指定频道,如不指定,则取消订阅所有频道。

Redis事务

1、MULTI 与 EXEC命令

–以 MULTI 开始一个事务,然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令。

2、DISCARD命令

–订用于取消一个事务, 它清空客户端的整个事务队列, 然后将客户端从事务状态调整回非事务状态, 最后返回字符串 OK 给客户端, 说明事务已被取消。

3、WATCH命令

–用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他客户端修改了, 那么整个事务不再执行, 直接返回失败。

redis作业场景

1.利用Redis的发布和订阅功能,实现消息的存储推送

2.Redis实现分布式session共享

3.利用Redis的zset score的有序性,实现数据的排序

java springboot配置redis

1 gradle依赖包:

dependencies {
 implementation 'org.springframework.boot:spring-boot-starter-data-redis'
 implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive'
 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
 implementation 'org.springframework.boot:spring-boot-starter-web'
 implementation 'org.springframework.boot:spring-boot-starter-web-services'
 implementation 'org.springframework.boot:spring-boot-starter-websocket'
 implementation group: 'redis.clients', name: 'jedis', version: '3.3.0'
 compileOnly 'org.projectlombok:lombok'
 annotationProcessor 'org.projectlombok:lombok'
 runtime 'org.springframework.boot:spring-boot-starter-tomcat'
 testImplementation('org.springframework.boot:spring-boot-starter-test') {
  exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
 }
 testImplementation 'io.projectreactor:reactor-test'

 compile group: 'org.webjars', name: 'jquery', version: '3.5.1'
}

2 RedisConfig配置:

package com.learn.redis_demo.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.listener.RedisMessageListenerContainer;

@Configuration
public class RedisConfig {
@Autowired
private RedisConnectionFactory redisConnectionFactory;

@Bean
public RedisMessageListenerContainer redisMessageListenerContainer() {

RedisMessageListenerContainer container = new RedisMessageListenerContainer();

container.setConnectionFactory(redisConnectionFactory);

return container;

}
}

3 通过java操作redis

package com.learn.redis_demo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;

import java.util.Set;

@Component
public class RedisService {
@Autowired
StringRedisTemplate redisTemplate;

public void add(String key, String value, double score) {
redisTemplate.opsForZSet().add(key, value, score);
}

public Set<String> range(String key, int start, int end) {
return redisTemplate.opsForZSet().range(key, start, end);
}

public Set<ZSetOperations.TypedTuple<String>> rangeWithScore(String key, int start, int end) {
return redisTemplate.opsForZSet().rangeWithScores(key, start, end);
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值