Redis的基本数据类型详解,和用java进行连接Redis的操作,把对象序列化到Redis中

Posted SmallCuteMonkey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis的基本数据类型详解,和用java进行连接Redis的操作,把对象序列化到Redis中相关的知识,希望对你有一定的参考价值。

Redis入门的操作:

**Nosql(Not only sql)😗*非结构化的数据库:

  1. 键值对
  2. 列存储
  3. 文档型
  4. 图形化的存储
    Redis通过键值对进行我们的存储,redis底层使用键值对的方式,Memecached和Redis都是内存行的存储方式,他的数据存储在内存中,定时会把数据存储到文件中

Redis使用:
5. 在windows中限制为版本3.2的redis,需要ruby的支持
6. Linux中可以使用其他的版本的的redis
Linux中去安装的redis:需要把你的redis的启动看成守护线程,把Redis的redis.conf,里面的deamonsize 修改成yes,当成线程启用。

Redis的数据类型:
string
是redis的最基本的类型,你可以理解为和Memcached的一模一样类型,一个key,对应一个value.
String类型是二进制安全的。意思是redis的string类型可以包含任何数据,比如jpg图片或者序列化的对象(也就是student,user这些对象但是一定要实现Serializable),string类型是Redis最基本的数据类型,一个键最大存储512MB.
我们开始使用的时候,可以使用客户端进行基体的操作:
到你的redis目录下;redis-cli

127.0.0.1:6379> set a "b"
OK
127.0.0.1:6379> get a
"b"
127.0.0.1:6379> 

Hash
Redis hash 是一个string类型的filed和value的映射表,hash特别适合用于存储对象。
1.hset key value(key value) :向Hash中存入值。
2.hget key value(key):取出Hash中key的值。

Hmset 设值
Hgetall取值


127.0.0.1:6379> hset people name houzhicong
(integer) 1
127.0.0.1:6379> hget people name

List
Redis列表是最简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部或者尾部。可以重复
Lpush 插入
Lrange 查看

127.0.0.1:6379> lpush list java
(integer) 6
127.0.0.1:6379> lpush list javaweb
(integer) 7
127.0.0.1:6379> lpush list smallhzc
(integer) 8
127.0.0.1:6379> lpush list java
(integer) 9
127.0.0.1:6379> lrange list 0 10
1) "java"
2) "smallhzc"
3) "javaweb"
4) "java"
5) "oracle"
6) "mysql"
7) "spring"
8) "jsp"
9) "java"

Set
Set是一个无序的集合(存储不可以进行重复,如果你是重复数据,他只会存储一份)
集合是通过哈希表实现的,所以添加,删除,查找的复杂度是O(1).
sadd命令
添加一个string元素,key对应的set集合中,成功返回1,否则为0
Sadd插入数据
smembers查询,可以看到不可以进行重复的添加

127.0.0.1:6379> sadd set redis
(integer) 1
127.0.0.1:6379> sadd set oracle
(integer) 1
127.0.0.1:6379> sadd set oracle
(integer) 0
127.0.0.1:6379> sadd set houzhicong
(integer) 1
127.0.0.1:6379> smembers set
1) "houzhicong"
2) "oracle"
3) "redis"

Zset(sorted set)是string类型的集合。
zset和set一样不可以有重复的成员。
不同的是每个元素会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从大到小的排序。
zset的成员是唯一的,但分数可以重复。
zadd命令 添加元素到集合
zrangebyscore查看


127.0.0.1:6379> zadd score 1 80
(integer) 1
127.0.0.1:6379> zadd score 2 77
(integer) 1
127.0.0.1:6379> zadd score 3 66
(integer) 1
127.0.0.1:6379> zrange score 0 10
1) "80"
2) "77"
3) "66"

需要用一个double类型的数字进行绑定

java 代码连接Redis

需要导入相关的jar包:

  <!-- 引入redis客户端依赖 -->
   <dependency>
       <groupId>redis.clients</groupId>
       <artifactId>jedis</artifactId>
       <version>2.4.2</version>
   </dependency>
package com.hzc;

import redis.clients.jedis.Jedis;

import java.util.*;

public class TestRedisConection {
    static Jedis jedis = new Jedis("192.168.48.5");

    public static void main(String[] args) {

        System.out.println("开始Redis的服务----------");


        System.out.println("服务连接成功---------------"+jedis.ping());

//        setString();

//          hash();
//          redisSet();

//          redisList();
            set();




    }


    public static void setString() {
        System.out.println("存储数据到时String数据中去");


        jedis.set("username", "iloveyouhouandmyparents12");
//        jedis.del("username");
        System.out.println(jedis.get("username"));


    }

    public static void hash() {
//        存储数据到hash里边

        String mset = jedis.mset("name", "hou", "age", "22", "address", "hunan");

//        由于key相同所以后面的这个会覆盖掉前面的
        String mset1 = jedis.mset("name", "jiejie", "age", "25", "address", "hunan");

        System.out.println(mset);


//       获取你的redis中的数据

        List<String> list = jedis.mget("name", "age", "address");
        for (String string :
                list) {
            System.out.println(string);
        }


    }

    public static void redisSet() {

//        放入值到你的list中

        jedis.hset("list1", "name", "list11");
        jedis.hset("list1", "age", "23");
//        23也会被覆盖掉
        jedis.hset("list1", "age", "53");
        jedis.hset("list1", "address", "美国");
//       set里面的值不可以进行重复
        jedis.hset("list1", "address", "美国");


        String name = jedis.hget("list1", "name");
        System.out.println(name);

//        获取list1中的所有的内容
        System.out.println("-----------------hset中的所有的内容");

        Map<String, String> map = jedis.hgetAll("list1");
        Set<String> set = map.keySet();
        for (String string :
                set) {
            System.out.println(string);


        }

        Collection<String> values = map.values();
        for (String value :
                values) {
            System.out.println(value);


        }


    }


    public static void redisList() {
//        通过这个方式存储数据到list
        jedis.lpush("student", "zhangsan");
        jedis.lpush("student", "lisi");
        jedis.lpush("student", "王五");

        Long lo = jedis.lpush("student", "小狗");
        System.out.println(lo);
//这个地方就是取出数据,第一个数据的名字,第二个开始的位置,第三个结束的位置进

        List<String> list = jedis.lrange("student", 0, jedis.llen("student"));

        for (String string : list) {
            System.out.println(string);
        }



//        通过这个方法可以看到key为student里边一共存储了多少个数据;
   System.out.println(jedis.llen("student"));


        System.out.println("弹出一个元素:"+jedis.lpop("student"));
        System.out.println("弹出一个元素:"+jedis.lpop("student"));
        System.out.println("弹出一个元素"+jedis.lpop("student"));
        System.out.println("弹出一个元素"+jedis.lpop("student"));


        System.out.println(jedis.llen("student"));


    }





    public static void set(){


//        这个进行数据的存储
        jedis.sadd("set001","houzhicong");
        jedis.sadd("set001","don't fear anything");
        jedis.sadd("set001","roothouzhicong");
        jedis.sadd("set001","whatever you through,it's the best arrangement");


//        获取他里边的数据

        Set<String> set = jedis.smembers("set001");


        for (String string:set
             ) {

            System.out.println(string);


        }

//        也可以用迭代器进行取出值来
        Iterator<String> iterator = set.iterator();

        while (iterator.hasNext()){

            System.out.println(iterator.next());


        }


    }





}

建立一个Pojo类Person:

package com.hzc.po;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
//这个类是进行序列化接口-----可以标识你的这个类对象可以转换为二进制
public class Person implements Serializable {
    int id;
    String name;
    String address;
    int age;





}

RedisObject:

package com.hzc.po;

import redis.clients.jedis.Jedis;

public class RedisObject {
    static Jedis jedis=new Jedis("192.168.48.5");

    public static void main(String[] args) {

        //        测试连接的效果
        System.out.println(jedis.ping());

        //进行反序列化的操作
        Person person2 = get();
        System.out.println(person2);


    }
    //        创建一个person对象存储到Redis中
    public static  void save(){
        //        通过二进制进行相关的插入的操作,但是插入的是一个二进制文件,还需要反序列化
        Person person=new Person(1001,"smallcuteMonkey","hunan",20);
        jedis.set("person".getBytes(),SerializeUtil.serialize(person));

        Person person1=new Person(1002,"iloveyoumyself","hunan",23);
        jedis.set("person1".getBytes(),SerializeUtil.serialize(person1));

    }
    //从redis中读取数据到java中
    public static Person get(){

        byte[] personBytes = jedis.get("person".getBytes());


        return (Person) SerializeUtil.unserialize(personBytes);


    }






}

以上是关于Redis的基本数据类型详解,和用java进行连接Redis的操作,把对象序列化到Redis中的主要内容,如果未能解决你的问题,请参考以下文章

Redis五个基本数据类型详解

#yyds干货盘点# Redis扩展数据类型详解

Redis学习--- 安装基本命令及常见五大数据类型详解

Java操作Redis之Jedis用法详解

Redis数据类型详解(5基本+3特殊)

Redis数据类型详解(5基本+3特殊)