Redis

发布时间 2023-07-13 15:37:33作者: 青椒同学

Redis数据结构:

String:hello

 

1688910823446.png

常见命令:

set:添加或修改一个已经存在String类型的键值对

get:根据key获取Strig类型value

mset:批量添加多个String类型的键值对

mget:根据多个key获取多个Value1

incr:让一个整型的key自增1

incrby:让一个整型的key自增兵指定步长

incrbyfloat:让i个浮点类型的数字自增并指定步长

setnx:添加一个String类型的键值对,前提是这个key不存在,否则不执行

setex:添加一个String类型的键值对,并且指定有效期

Hash:{name:"Jack", age: 21}

 

1688910946321.png

常见命令:

hset key field value:添加或修改hash类型key的field值

hget key field:获取一个hash类型key的field的值

hmset:批量添加多个hash类型key的field值

hmget:批量获取多个hash类型key的field值

hgetall:获取一个hash类型的key中的所有的field和value

hkeys:获取一个hash类型的key中的所有的field

hvalues:获取一个hash类型的key中的所有的value

hincrby:让一个hash类型key的字段值自增并指定步长

hsetnx:添加一个String类型的键值对,前提是这个key不存在,否则不执行

List:[A→B→C→C]

常见命令

LPUSH key element:向列表左侧插入一个或多个元素

LPOP key:移除并返回列表左侧的第一个元素,没有则返回null

RPUSH key element:像列表右侧插入一个或多个元素

RPOP key:移除并返回列表右侧的第一个元素

LRANGE key star end:返回一段角标范围内的所有元素

BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是返回null

Set:{A,B,C}

常用命令

SADD key member:向set中添加一个或多个元素

SREM key member:移除set中的指定元素

SCARD key:返回set中元素的个数

SISMEMBER key member:判断一个元素是否存在于set中

SMEMBERS:获取set中的所有元素

SINTER key1 key2:求key1与key2的交集

SDIFF key1 key2:求key1与key2的差集

SUNION key1 key2:求key1与key2的并集

SortedSet:{A:1,B:2,C:3}

常用命令

ZADD key score member:添加一个或多个元素到sorted set,如果已经存在则更新其score值

ZREM key member:删除sorted set中的一个指定元素

ZSCORE key member:获取sorted set中的指定元素的score值

ZRANK key member:获取sorted set中的指定元素的排名

ZCARD key:获取sorted set中的元素个数

ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

ZlINCRBY key increment member: 让sorted set中的指定元素自增,步长为指定的increment值

ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

ZDIFF、ZINTER、ZUNION:求差集、交集、并集

GEO:{A:(120.3,30.5)}

BitMap:0110110101110101011

HyperLog:0110110101110101011

 

Redis通用命令:(HELP + 命令 :查看命令语句)

KEYS:查看复合模版的所有key(不建议在生产环境设备上使用)

keys *

DEL:删除一个指定的key

DEL name id

EXISTS:判断key是否存在

EXSISTS age

EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

EXPIRE age 20

TTL:查看一个key的剩余有效期

TTL age

通过help[command]可以查看一个命令的具体用法。

 

Redis客户端:

Jedis:

以Redis命令作为方法名称,线程实例不安全,多线程环境下需要基于连接池使用

Iettuce:

基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的.支持Redis的哨兵模式、集群模式和管道模式

Redisson:

基于Redis实现的分布式、可伸缩的Java数据结构集合.包含了如Map、Queue、Lock、Semaphore、AtomicLong等强大功能

 

Jedis使用:

引入依赖

1 <dependency>
2     <groupId>redis.clients</groupId>
3     <artifactId>jedis</artifactId>
4     <version>4.3.0</version>
5 </dependency>

 

建立连接

 1 private Jedis jedis;
 2 
 3 @BeforeEach
 4 void setUp(){
 5     //建立连接
 6     jedis = new Jedis("192.168.150.101",6379);
 7     //设置密码
 8     jedis.auth("123456");
 9     //选择库
10     jedis.select(0);
11 }

 

测试String

1 @Test
2 void testString(){
3     //插入数据,方法名称就是redis命令名称
4     String result = jedis.set("name","张三");
5     System.out.println("result = " + result);
6     //获取数据
7     String name = jedis.get("name");
8     Symtem.out.println("name" + name);
9 }

 

释放资源

@AfterEach
void tearDown(){
    //释放资源
    if (jedis != null){
        jedis.close();    
    }
}

 

Jedis连接池

Jedis本身是线程不安全的,频繁的创建和销毁连接会有性能损耗

public class JedisConnectionFactory {
    private static final JedisPool jedisPool;
    static {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //最大连接
        jedisPoolConfig.setMaxTotal(8);
        //最大空闲连接
        jedisPoolConfig.setMaxIdle(8);
        //最小空闲连接
        jedisPoolConfig.setMinIMle(o);
        // 设置最长等待时间, ms
        jedisPoolConfig.setMaxWaitMillis(200);
        jedisPool = new JedisPool(jedisPoolConfig,"192.168.150.101",6379,1000,"123321");               
     }
     // 获取Jedis对象
     public static Jedis getJedis(){
        return jedisPool.getResource(); 
    }
}

 

SpringDataRedis:

提供了不同Redis客户端整合

提供了RedisTemplate统一API来操作Redis

支持Redis的发布订阅模型

支持Redis哨兵和Redis集群

支持基于Lettuce的响应式编程

支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化

支持基于Redis的JDKCollection实现