前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis五种数据类型详细用法

Redis五种数据类型详细用法

作者头像
Liusy
发布2020-09-01 16:15:32
3260
发布2020-09-01 16:15:32
举报
文章被收录于专栏:Liusy01Liusy01Liusy01

今天咱来聊一下Redis五种数据类型的详细用法以及在代码中如何使用。这些在网上都很容易查到,所以这一篇就比较累赘。废话不多说,开始!

Redis五种数据类型:

(1)string:字符串对象

(2)list:列表对象

(3)hash:散列

(4)set:集合

(5)zset:有序集合

接下来一一进行操作(命令行操作,由于很多,就不一一截图了):

一、统一操作(五种数据类型都拥有,针对key)

我给定一个key:k1

//获取所有key
keys *
//删除k1
DEL k1
//检查给定的k1是否存在
EXISTS k1
//给k1设置1秒的过期时间,1秒过后,k1被删除
EXPIRE k1 1
//给k1设置过期时间为unix时间戳,也就是北京时间2019-11-29 22:22:09
EXPIREAT k1 1575037329
//查看k1还有多长时间过期,单位为毫秒
PTTL k1
//查看k1还有多长时间过期,单位为秒
TTL k1
//取消k1的过期时间设置
PERSIST k1
//修改key的名称,将k1修改为k2
RENAME k1 k2
//查看k1是什么数据类型的
TYPE K1

二、string(字符串对象)

//设置k1的值为value1
set k1 value1
//获取k1的值
get k1
//先获取k1的值,然后再将k1的值设为k1_value 
GetSet k1 k1_value
//同时设置多个key的值,k1的值为v1,k2的值为v2
mset k1 v1 k2 v2
//同时获取k1,k2的值
mget k1 k2
//将k1的值加1
incr k1
//将k1的值加上3
incrby k1 3
//将k1的值减1
decr k1
//将k1的值减3
decrby k1 3
//在k1的值后面添加相应的字符串
append k1 value

三、list(列表对象)

从左到右索引为0,1,2...

//将v1,v2,v3添加到列表k1
LPUSH k1 v1 v2 v3
//获取列表k1中索引为1的值,索引从0算起
LINDEX k1 1
//获取列表k1的元素个数
 LLEN k1
 //移除并获取k1的第一个元素
 LPOP k1
 //获取索引0~2的元素,当2改成-1,则获取所有元素
 LRANGE k1 0 2
 //设置索引为1的元素值为v4
 LSET k1 1 v4
 //移除并获取列表k1的最后一个元素
 RPOP k1
 //在列表k1尾部添加v5和v6两个元素
 RPUSH k1 v5 v6

四、hash(散列对象)

散列对象相当于字典(map)

//给h_k1添加一个键为k1,值为v1的entry
HSET h_k1 k1 v1
//获取h_k1中k1的值
HGET h_k1 k1
//删除h_k1中的k1,可以删除多个,key之间空格隔开
HDEL h_k1 k1
//获取h_k1中k1的值
HGET h_k1 k1
//给h_k1添加<k2,v2>,<k3,v3>的entry
HMSET h_k1 k2 v2 k3 v3
//同时获取h_k1中k2,k3的值
HMGET h_k1 k2 k3
//获取h_k1中的所有键对值
HGETALL h_k1
//获取h_k1中的键对值数量
HLEN h_k1
//获取h_k1中所有的key
HKEYS h_k1
//获取h_k1中所有的value
HVALS h_k1
//查看h_k1中key为k2的entry是否存在
HEXISTS h_k1 k2

五、set(集合)

集合中的元素是唯一的,类似于java中的set集合。

//往s_k1集合中添加v1,v2,v3,v4
SADD s_k1 v1 v2 v3 v4
//获取s_k1集合成员数量
SCARD s_k
//获取s_k1中的所有成员
SMEMBERS s_k1
//移除并返回s_k1中随机一个数
SPOP s_k1
//给s_k1,s_k2做交集
SINTER s_k1 s_k2
//给s_k1,s_k2做交集并且将结果存储到s_k3
SINTERSTORE s_k3 s_k1 s_k2
//给s_k1,s_k2做并集
SUNION s_k1 s_k2
//给s_k1,s_k2做并集并且将结果存储到s_k4
SUNIONSTORE s_k4 s_k1 s_k2

六、zset(有序集合)

//给z_k1添加三个元素v1、v2、v3,分值分别是1、2、3
ZADD z_k1 1 v1 2 v2 3 v3
//获取z_k1的元素个数
ZCARD z_k1
//获取分值为1~3的成员数
ZCOUNT z_k1 1 3
//获取索引 0~2的成员,2改成-1为获取所有成员 
ZRANGE z_k1 0 2
//获取索引 0~2的成员以及其分值
ZRANGE z_k1 0 2  withscores
//获取分值为0~2的成员,后面也可以带上withscores
ZRANGEBYSCORE z_k1 0 2
//获取v2的索引
ZRANK z_k1 v2
//获取z_k1中v1的分值
ZSCORE z_k1 v1
//对z_k1和z_k2做交集,中间的2表示对两个有序集合做交集,并将结果存在z_k3
ZINTERSTORE z_k3 2 z_k1 z_k2
//对z_k1和z_k2做并集,中间的2表示对两个有序集合做并集,并将结果存在z_k4
ZUNIONSTORE z_k4 2 z_k1 z_k2

命令行的常规操作如上,接下来看一下代码(分为普通maven项目和 spring boot项目)如何操作。

一、普通maven项目

(1)操作单机redis(一般使用jedis连接,需要导入jedis的jar包)

连接方式

连接之后就可以直接用返回的jedis操作api,相应的IDEA都会有提示,这里就不在赘述。

(2)连接集群方式

连接无密码集群:

连接有密码集群:

二、springboot上操作redis

首先得在pom文件中添加依赖:

(1)单机版

spring-data-redis提供了一种代码配置(需要利用@Configuration注解创建一个配置类)的方式可获取RedisTemplate

配置之后就可用直接用@Autowired注解注入进行使用。

也可通过配置文件(application.properties)配置redis信息进行连接

通过配置文件可以直接在代码中通过注解注入的方式使用

@Autowired
  StringRedisTemplate stringRedisTemplate;

  //自定义初始化之后执行的方法
  @PostConstruct
  public void run() throws Exception {
    ValueOperations<String, String> stringStringValueOperations = redisTemplate.opsForValue();
    stringStringValueOperations.set("k1","v1");
    System.out.println(stringStringValueOperations.get("k1"));
  }

(2)集群连接方式

配置文件

#数据库
spring.redis.database=0
spring.redis.password=123456
#设置为0可以让master挂机后,直接切换到slave
spring.redis.cluster.max-redirects=0
spring.redis.cluster.nodes=192.168.197.100:7001,192.168.197.110:7001,192.168.197.120:7001,192.168.197.100:7002,192.168.197.110:7002,192.168.197.120:7002
spring.redis.jedis.pool.max-wait=3600
spring.redis.jedis.pool.max-active=1
spring.redis.jedis.pool.max-idle=1
spring.redis.jedis.pool.min-idle=1

配置类:

package com.liusy.zuul.com;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Configuration
public class redisConfig {

    //获取配置文件里的值
    @Value("${spring.redis.password}")
    String password;
    @Value("${spring.redis.cluster.nodes}")
    String nodes;
    @Value("${spring.redis.cluster.max-redirects}")
    String redirects;
    @Value("${spring.redis.jedis.pool.max-wait}")
    String maxWritTime;
    @Value("${spring.redis.jedis.pool.max-active}")
    String maxActive;
    @Value("${spring.redis.jedis.pool.max-idle}")
    String maxIdle;
    @Value("${spring.redis.jedis.pool.min-idle}")
    String minIdle;


    @Bean
    public RedisTemplate redisTemplate() {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(getConnectionFactory());
        return redisTemplate;
    }

    @Bean
    public RedisConnectionFactory getConnectionFactory() {
        List<String> nodelist = new ArrayList<>();
        nodelist = Arrays.asList(nodes.split(","));
        RedisClusterConfiguration config = new RedisClusterConfiguration(nodelist);
        config.setPassword(RedisPassword.of(password));
        config.setMaxRedirects(Integer.parseInt(redirects));
        JedisConnectionFactory connectionFactory  = new JedisConnectionFactory(config);
        connectionFactory.afterPropertiesSet();
        return connectionFactory;
    }

    @Bean
    public JedisPoolConfig jedisPoolConfig(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(Integer.valueOf(maxActive));
        jedisPoolConfig.setMaxWaitMillis(Integer.valueOf(maxWritTime));
        jedisPoolConfig.setMaxIdle(Integer.valueOf(maxIdle));
        jedisPoolConfig.setMinIdle(Integer.valueOf(minIdle));
        // 是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
        jedisPoolConfig.setTestOnBorrow(true);
        // 在空闲时检查有效性, 默认false
        jedisPoolConfig.setTestWhileIdle(false);
        return jedisPoolConfig;
    }
}

springboot启动之后直接用@Autowired注解注入RedisTemplate使用就可以了

以上就是redis的使用,全文比较粗糙,展开就会很长。下篇将聊一下Redis底层数据结构的实现。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档