首页 > 数据库 >Redis的常用数据类型与操作

Redis的常用数据类型与操作

时间:2024-03-03 15:23:23浏览次数:27  
标签:常用 redis 数据类型 Redis println key 集合 redisTemplate

Redis简介
Redis是一个基于内存的 key-value 结构数据库(内存存储)(键值对)
Mysql是将数据,是通过数据文件的方式存放在磁盘上(磁盘存储)(二维表)
Redis特点
抢购秒杀,或者新闻热点,大量的用户去访问的数据,就适合存放在Redis中,是对mysql的补充,往往项目中是和mysql共存的状态
redis进行cmd命令记得tab进行自动扩展……server ……conf启动然后再打开窗口……cli直接连接服务端  keys *检测是否正常查询
exit结束连接   特殊情况客户端连接服务器: ……cli -h localhost -p 6379  
这里-h -p可以指定连接哪个端口的redis服务  默认redis不设置密码
编辑redis.windows.conf搜索pass把requirespass前面的#去掉,不作为注释foobared修改为密码
客户端连接服务端 -a 123456带密码连接服务端
在使用图形化界面时记得连接服务端
5种常用数据类型介绍
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
字符串 string
哈希 hash
列表 list    类似java的LinkedList  按照插入顺序排序
集合 set     无序集合
有序集合 sorted set/zset    各种排行榜,有序,升序无重复
Redis常用命令
字符串操作命令
哈希操作命令
列表操作命令
集合操作命令
有序集合操作命令
通用命令
字符串操作命令
Redis 字符串类型常用命令:
SET key value                          设置指定key的值
GET key                                获取指定key的值
SETEX key seconds value                设置指定key的值,并将 key 的过期时间设为 seconds 秒
SETNX key value                        只有在 key不存在时设置 key 的值

这里set可以作为插入来使用,插入数据

关于Hash哈希操作
-整个value就是哈希表
-key就是key而field对应哈希的key,value对应哈希的value
哈希操作命令
Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象,常用命令
HSET key field value                      将哈希表 key 中的字段 field 的值设为 value
HGET key field                            获取存储在哈希表中指定字段的值
HDEL key field                            删除存储在哈希表中的指定字段  (这里个人理解为删除全部)
HKEYS key                                 获取哈希表中所有字段
HVALS key                                 获取哈希表中所有值
列表操作命令
Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令
LPUSH key value1 [value2]      将一个或多个值插入到列表头部          lpush mylist a b c这是头插法
LRANGE key start stop          获取列表指定范围内的元素              索引下标0 或-1
RPOP key                       移除并获取列表最后一个元素            队尾元素
LLEN key                       获取列表长度

集合操作命令
Redis set 是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:
SADD key member1[member2]          向集合添加一个或多个成员
SMEMBERS key                       返回集合中的所有成员
SCARD key                          获取集合的成员数
SINTER key1 [key2]                 返回给定所有集合的交集
SUNION key1 [key2]                 返回所有给定集合的并集
SREM key member1 [member2]         删除集合中一个或多个成员

有序集合操作命令
Redis有序集合是string类型元素的集合,且不允许重复成员。    这里的key可以理解为表名
每个元素都会关联一个double类型的分数。常用命令,
ZADD key score1 member1 [score2 member2]                向有序集合添加一个或多个成员
ZRANGE key start stop [WITHSCORES]                      通过索引区间返回有序集合中指定区间内的成员    返回集合  [分数]
ZINCRBY key increment member                            有序集合中对指定成member 的分数加上增量 increment      
ZREM key member [member ...]                            移除有序集合中的一个或多个成员
有序集合是根据score根据分数排序

通用命令
Redis的通用命令是不分数据类型的,都可以使用的命令
KEYS pattern                           查找所有符合给定模式( pattern)的 key    比如说就是查找redis数据库中所有的key  这里模式很灵活跟搜索框一样,比如set  set开头的key
EXISTS key                             检查给定 key 是否存在
TYPE key                               返回 key 所储存的值的类型
DEL key1 [key2]                        该命令用于在 key 存在是删除 key  这里也可以一次性删除多个key

在java中操作Redis
Redis 的 Java 客户端很多,常用的几种
Jedis
Lettuce                
Spring Data Redis      对以上两种的封装

Spring Data Redis使用方式
操作步骤:
  -导入Spring Data Redis 的maven坐标
  -配置Redis数据源
  -编写配置类,创建RedisTemplate对象
  -通过RedisTemplate对象操作Redis
第一步导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

第二步配置数据源
首先是yml的redis配置是写在spring下

  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0               // 这里会指定redis的具体数据库是哪个,不配置,默认为0号数据库

因为不建议数据源直接放在yml配置项中,所以还是放在-dev.yml
个人理解dev.yml用法,取名sky:然后下面分级  继而在yml中进行引用dev.yml第三步编写配置类,创建RedisTemplate对象
在Config包下创建类RedisConfig配置类创建方法redisTemplate  传进redis连接工厂参数,返回值为RedisTemplate
记得配置类都要有注解Configuration
序列化器的作用,个人理解,为了图形化界面,也就是ide更直观的展示key不至于错乱, 就需要写序列化器


@Configuration
@Slf4j
public class RedisConfig {
    @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
个人发现这里调用插入方法都没有返回值,比如查询比如get才可以

在调用redis字符串对象的方法set时,四个参数是设置有效期方法

 redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);     // 3而后是单位,分钟
  redisTemplate.opsForValue().setIfAbsent("lock","2");                   //  如果存在则设置失败,

想要在客户端不乱码,在配置RedisTemplate时,给Value也加个String类型的序列化操作就好了
Redis的Java端基本操作代码
取容器中的redisTemplate


@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;


    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);

        ValueOperations valueOperations =redisTemplate.opsForValue();//操作字符串类型的对象
        HashOperations hashOperations = redisTemplate.opsForHash();
        ListOperations listOperations = redisTemplate.opsForList();
        SetOperations setOperations = redisTemplate.opsForSet();
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();


    }
    //操作字符串类型
    @Test
    public void testString(){
        //set 向redis当中插入
        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");    //如果存在key就不会被执行
     }


     //操作哈希类型
    @Test
    public void testHash(){
        //hset  hget    hkeys   hvals
        //hset
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("100","name","tom");
        hashOperations.put("100","age","20");

        //hget
        String name =  (String)hashOperations.get("100","name");//获取name字段对应的val
        System.out.println(name);


        //hkeys
        //这是通过指定表名100查询所有的key字段,应该是没val的
        Set keys = hashOperations.keys("100");
        System.out.println(keys);

        //hvals
        List values = hashOperations.values("100");
        System.out.println(values);

        //hdel
        hashOperations.delete("100","age");


    }
    @Test
    public void testList(){

        //lpush      lrange     rpop    llen

        //lpush
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPushAll("mylist","a,b,c");
        listOperations.leftPush("mylist","d");

        //lrange
        List mylist = listOperations.range("mylist",0,-1);
        System.out.println(mylist);

        //rpop  队尾元素
        listOperations.rightPop("mylist");

        //llen
        Long size = listOperations.size("mylist");
        System.out.println(size);


    }

    //操作集合类数据
    public void testSet(){
        //sadd      smembers        scard       sinter      suntion     srem
        SetOperations setOperations = redisTemplate.opsForSet();
        //sadd
        setOperations.add("set1","a","b","c","d");
        setOperations.add("set2","a","b","x","y");
        //smembers
        Set members = setOperations.members("set1");
        System.out.println(members);

        //scord
        Long size = setOperations.size("set1");
        System.out.println(size);
        //sinter        返回集合交集
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);

        //suntion   返回集合丙级
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);

        //srem
        Long set1 = setOperations.remove("set1","a","b");


    }

    //操作有序集合类型
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //zadd      zrange      zincrby     zrem

        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",11);
        zSetOperations.add("zet1","c",9);

        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);

        //zincrby       为某个集合的元素加上多少分score
        zSetOperations.incrementScore("zset1","c",10);

        //zrem
        zSetOperations.remove("zset1","a","b");

    }
    @Test
    public void testCommon(){
        //这里就不像上面似的还要opsFor类型了
        //因为是通用命令,所以不用指定类型
        //keys  exits   type    del
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);

        //exits检查某个key是否存在
        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.hasKey("set1");

        //type查询一下某个key所对应的value什么类型的
        //这里key循环遍历所有的keys键
        for (Object key : keys){
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
            //这里返回具体他们都是什么类型的
        }

        //del       删除指定的key
        redisTemplate.delete("mylist");


    }

}

​

标签:常用,redis,数据类型,Redis,println,key,集合,redisTemplate
From: https://www.cnblogs.com/launch/p/18032859

相关文章

  • redis和memcached的区别
    观点一:1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value交换到磁......
  • 5-Redis十大关系之集合Set
    redis十大关系之集合Set(value不重复)添加元素:SADDkeymember[member...]遍历集合中所有元素:SMEMBERSkey判断元素是否在集合中:SISMEMBERkeymember删除元素:SREMkeymember[member...]获取集合里面元素的个数:SCARDkey从集合中随机展现设置的数字个数元素,元素不删除......
  • Redis HashTag
    hashTag用于redis集群中。其实现方式为在key中加个{},例如test{1}。使用hashtag后客户端在计算key的crc16时,只计算{}中数据。如果没使用hashtag,客户端会对整个key进行crc16计算。下面演示下hashtag使用。127.0.0.1:6380>clusterkeyslotuser:case(integer)9491127.0.0.1:63......
  • Blazor常用事件
    一、Input事件:<h1>BindEventExample</h1><p><label>InputValue:<input@bind="InputValue"@bind:event="oninput"/></label></p><p><code>InputValue</cod......
  • redis 工具类
    一、Redis工具类一、RedisUtil​直接用RedisTemplate操作Redis,需要很多行代码,因此直接封装好一个RedisUtils,这样写代码更方便点。这个RedisUtils交给Spring容器实例化,使用时直接注解注入。packagecom.jin.util;importjava.util.List;importjava.util.Map;importjava.......
  • ulimit.conf中soft和hard区别及常用配置
    在Linux中,ulimit命令用于限制用户对shell资源的访问,包括进程数、文件打开数等。这些限制可以分为软限制(softlimit)和硬限制(hardlimit)。软限制(softlimit)是当前系统生效的设置值,可以理解为一种警告的设定。当资源使用超过这个限制时,系统并不会立即阻止,而是会发出警告信息,提示用户......
  • 一次线上redis慢的排查过程,发现redis根本不慢
    缓存应用场景:对话系统中,用redis来存储用户对话的上下文,用户每次说话将用户对话的上下文带给大模型进行推理,然后返回给用户回答该对话系统用在电话场景,对响应速度要求较高。代码中自己对redis的耗时进行了记录超过50毫秒报警start_time=time.time()dialogueSession=dial......
  • day 05-2 数据类型(字符串)
    3.字符串字符串,我们平时会用他来表示文本信息。例如:姓名、地址、自我介绍等。3.1定义v1="包治百病"v2='包治百病'v3='"包"治百病'v4="包'治百病'"V5="""吵架都是我的错,因为大家打不过。"""#三个引号,可以支持多行/换行表示一个字符串,其他的都只能在一行中表......
  • Redis快速入门
    1、什么是Redis远程字典服务器:一个开源的基于内存的数据库,常用作键值存储,缓存和消息队列等Redis通常将全部数据存储在内存中,也可以不时的将数据写入硬盘实现持久化,但仅用于重新启动后将数据加载回内存(内存的速度比硬盘快一个数量级)基于key-value键值对的非关系型数据库......
  • Git 使用以及常用命令
    1.Git常用命令192:Desktopfutantan$gitconfig--globaluser.namedandan_claire192:[email protected]:Downloadsfutantan$cdgit-demo/gitadd文件名(到暂存区)192:git-demofutantan$gitinit###初始化......