Redis入门(常用命令、spring-boot-starter-data-redis)

Redis

redis是一个基于内存的key-value的结构数据库

启动: redis-server.exe redis.windows.conf

客户端链接:redis-cli.exe [-h 目标ip] [-p 端口] [-a 密码]

修改链接密码:

redis.windows.conf中的requirepass 123456

常用的数据类型

redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型

  • 字符串 string

  • 哈希 hash

  • 列表 list

  • 集合 set

  • 有序集合 sorted set/zset

常用命令

字符串操作命令

SET key value 设置指定key的值

GET key 获取指定key的值

SETEX key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒

SETNX key value 只有在key不存在时设置key的值

哈希操作命令

HSET key field value 将哈希表key中的字段field的值设置为value

HGET key field 获取存储在哈希表中指定字段的值

HDEL key field 删除存储在哈希表中的指定字段

HKEYS key 获取哈希表中所有的字段

HVALS key 获取哈希表中所有的值

列表操作命令

LPUSH key value1 [value2] 将一个或多个值插入到列表头部

LRANGE key start stop 获取列表指定范围内的元素

RPOP key 移除并获取列表最后一个元素

LLEN key 获取列表长度

集合操作命令

SADD key member1 [member2] 向集合添加一个或多个成员

SMEMBERS key 返回集合的所有成员

SCARD key 获取集合的成员数

SINTER key1 [key2] 返回给定所有集合的交集

SUNION key1 [key2] 返回所有给定集合的并集

SREM key member1 [member2] 删除集合中一个或多个成员

有序集合操作命令

ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员

ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员

ZINCRBY key increament member 有序集合中对指定成员的分数加上增量increment

ZREM key member [member...] 移除有序集合中的一个或多个成员

通用命令

KEYS pattern 查找所有符合给定模式(pattern)的key

EXISTS key 检查给定key是否存在

TYPE key 返回key所存储的值的类型

DEL key 该命令用于在key存在时删除key

在java中操作Redis

Redis的常用java客户端有jedis,lettuce,Spring Data Redis

Spring Data Redis

依赖
复制代码
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.3</version>
</dependency>
配置redis数据源(application.yml)
复制代码
spring:
  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0
编写配置类,创建RedisTempalte对象
java 复制代码
@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象。。。");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的链接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}
复制代码
通过RedisTemplate对象操作Redis
java 复制代码
@SpringBootTest
public class SpringDataRedisTest {
​
    @Autowired
    private RedisTemplate redisTemplate;
​
    @Test
    public void testRedisTempalte(){
        System.out.println(redisTemplate);
    }
}
操作字
复制代码
符串类型的数据
java 复制代码
/**
     * 操作字符串类型的数据
     */
@Test
public void testString(){
    // set get setex setnx
    //插入
    redisTemplate.opsForValue().set("city", "北京");
    //获取
    String city = (String) redisTemplate.opsForValue().get("city");
    System.out.println(city);
    //插入,设置有效时间
    redisTemplate.opsForValue().set("code", "1234", 3, TimeUnit.MINUTES);
    //如果不存在插入
    redisTemplate.opsForValue().setIfAbsent("lock", 1);
    redisTemplate.opsForValue().setIfAbsent("lock", 2);
    //获取
    Integer lock = (Integer) redisTemplate.opsForValue().get("lock");
    System.out.println(lock);
}
复制代码
操作哈希类型的数据
java 复制代码
/**
* 操作哈希类型的数据
*/
@Test
public void testHash(){
    // hset hget hkeys hvals
    HashOperations hashOperations = redisTemplate.opsForHash();
​
    //插入
    hashOperations.put("100", "name", "tom");
    hashOperations.put("100", "age", 20);
    //获取
    String name = (String) hashOperations.get("100", "name");
    System.out.println(name);
​
    //获取所有哈希value
    List values = hashOperations.values("100");
    System.out.println(values);
​
    //删除某个哈希key
    hashOperations.delete("100", "age");
​
    //获取所有哈希key
    Set keys = hashOperations.keys("100");
    System.out.println(keys);
}
操作列表类型的数据
java 复制代码
/**
* 操作列表类型的数据
*/
@Test
public void testList() {
    // lput lrange rpop llen
    ListOperations listOperations = redisTemplate.opsForList();
​
    //左侧插入
    listOperations.leftPushAll("mylist", "a", "b", "c");
    listOperations.leftPush("mylist", "d");
    //范围获取
    List mylist = listOperations.range("mylist", 0, -1);
    System.out.println(mylist);
    //右侧弹出
    String mylist1 = (String) listOperations.rightPop("mylist");
    System.out.println(mylist1);
    //获取长度
    Long mylist2 = listOperations.size("mylist");
    System.out.println(mylist2);
}
操作集合类型的数据
java 复制代码
/**
     * 操作集合类型的数据
     */
@Test
public void testSet() {
    //sadd smembers scard sinter sunion srem
    SetOperations setOperations = redisTemplate.opsForSet();
​
    //插入
    setOperations.add("set1", "a", "b", "c", "d");
    setOperations.add("set2", "a", "b", "x", "y");
    //获取所有元素
    Set set1 = setOperations.members("set1");
    System.out.println(set1);
    //获取交集
    Set intersect = setOperations.intersect("set1", "set2");
    System.out.println(intersect);
    //获取并集
    Set union = setOperations.union("set1", "set2");
    System.out.println(union);
    //删除元素
    setOperations.remove("set1", "a", "b");
    //获取元素个数
    Long size1 = setOperations.size("set1");
    System.out.println(size1);
​
}
操作有序集合类型的数据
java 复制代码
/**
     * 操作有序集合类型的数据
     */
@Test
public void testZset() {
    // zadd zrange zincrby zrem
    ZSetOperations zSetOperations = redisTemplate.opsForZSet();
​
    // 添加
    zSetOperations.add("zset1", "a", 10);
    zSetOperations.add("zset1", "b", 12);
    zSetOperations.add("zset1", "c", 9);
    // 获取某个范围内的元素
    Set zset1 = zSetOperations.range("zset1", 0, -1);
    System.out.println(zset1);
    // 增加权重
    zSetOperations.incrementScore("zset1", "c", 10);
    // 删除
    zSetOperations.remove("zset1", "a", "b");
​
    Set zset2 = zSetOperations.range("zset1", 0, -1);
    System.out.println(zset2);
}
​
复制代码
​
​
通用命令操作
java 复制代码
/**
     * 通用命令操作
     */
@Test
public void testCommon() {
    // keys exists type det
​
    // 获取所有的key
    Set keys = redisTemplate.keys("*");
    System.out.println(keys);
​
    // 某个key是否存在
    Boolean name = redisTemplate.hasKey("name");
    Boolean set1 = redisTemplate.hasKey("set1");
    System.out.println(name);
    System.out.println(set1);
​
    //查看key中value的类型
    for (Object key: keys){
        DataType type = redisTemplate.type(key);
        System.out.println(type);
    }
​
    //删除key
    redisTemplate.delete("mylist");
}
相关推荐
heartbeat..4 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据6 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦6 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
YMatrix 官方技术社区7 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录8 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong8 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
欧亚学术9 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
黑白极客10 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
码农水水10 小时前
中国邮政Java面试:热点Key的探测和本地缓存方案
java·开发语言·windows·缓存·面试·职场和发展·kafka
大厂技术总监下海10 小时前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache