Redis基本数据结构类型及方法

2022-10-31 16:04:15 浏览数 (1)

Redis基本数据结构类型

  • string
  • hash
  • list
  • set
  • zset
Demo代码
代码语言:javascript复制
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.ListPosition;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * @Author: www.itze.cn
 * @Email: 814565718@qq.com
 */
public class RedisDemo {
    /**
     * Jedis连接池连接
     */
    public static Jedis getJedisByPool() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //设置最大连接数
        jedisPoolConfig.setMaxTotal(30);
        //设置最大空闲数
        jedisPoolConfig.setMaxIdle(10);
        //获取连接池
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "192.168.06.37", 6379);
        return jedisPool.getResource();
    }

    /**
     * Redis数据结构-String
     */
    public static void redisStringType() {
        Jedis jedis = RedisDemo.getJedisByPool();
        jedis.set("test", "123");//设置字符串类型key,value
        jedis.get("test");//获取字符串类型value
        /**
         * 以下有关增减的只对value数字类的有用
         */
        jedis.incr("test");//将key值为:test的value值加1
        jedis.decr("test");//将key值为:test的value值减1
        jedis.incrBy("test", 10);//将key值为:test的value值加10
        jedis.decrBy("test", 5);//将key值为:test的value值加5
        jedis.append("test", "hello");//在key值为:test的value值后面拼接:hello
        jedis.exists("test");//判断test的key值是否
    }

    /**
     * Redis数据结构-Hash
     * 存储形式为:key value,其中value为键值对形式
     */
    public static void redisHashType() {
        Jedis jedis = RedisDemo.getJedisByPool();
        Map<String, String> map = new ConcurrentHashMap<>();
        map.put("name", "xiaoming");
        map.put("sex", "男");
        jedis.hset("user", map);//可以直接存入map
        jedis.hset("user", "age", "18");
        jedis.hget("user", "name");//获取user中name键值对
        jedis.hgetAll("user");//获取user中所有的键值对信息
        jedis.hincrBy("user", "age", 2);//将age加2
        jedis.hkeys("user");//查看user中所有的key值,name/sex/age
        jedis.hvals("user");//查看user中所有的value值,xiaoming...
        jedis.hlen("user");//获取user中键值对的个数
        jedis.hdel("user", "age");//删除age键值对
        jedis.hexists("user", "age");//判断user中是否存在key值为age的键值对
    }

    /**
     * Redis数据结构-List
     * 双向链表结构,从链表的两头插入、删除元素会比较高效
     */
    public static void redisListType() {
        Jedis jedis = RedisDemo.getJedisByPool();
        jedis.lpush("list1", "a", "b", "c");//将a/b/c从左侧(链表的前)压入list1中
        jedis.rpush("list2", "a", "b", "c");//将a/b/c从右侧(链表的后)压入list2中
        jedis.lset("list1", 1, "123");//将下标1的b更改为123
        jedis.lrange("list", 0, -1);//查看list中元素,-1代表最后一个
        jedis.linsert("list", ListPosition.BEFORE, "a", "x");//在元素a的前面插入x
        /**
         * lrem
         * key:list
         * count:2,代表从前向后遍历删除前两个a元素
         * count:0,代表删除list中所有a元素
         * count:-1,代表从后往前遍历删除,从后往前数,第一个a元素
         */
        jedis.lrem("list1", 2, "a");
        jedis.llen("list1");//查看list中元素个数
        jedis.lpop("list1");//将第一个元素弹出来,弹出之后list1中将不存在该元素
        jedis.lpushx("list1", "w");//仅当list1存在时在头部插入w
        jedis.rpoplpush("lsit1", "list2");//将lsit1的尾部最后一个元素弹出,并压入list2的头部第一个位置
    }

    /**
     * Redis数据结构-Set
     * 不允许元素重复
     */
    public static void redisSetType() {
        Jedis jedis = RedisDemo.getJedisByPool();
        jedis.sadd("set1", "123", "b", "b", "a");//添加一个set集合
        jedis.sadd("set2", "12", "x", "b", "a");//添加一个set集合
        jedis.srem("set1", "123");//删除set1集合中的123元素
        jedis.sismember("set1", "123");//判断set1集合中123元素是否存在
        /**
         * 差集运算
         * 比较两个集合中的差集,和kyes放置的顺序有关系
         * set1:1,2,3/set2:2,3,4,5
         * eg:jesit.sdiff("set1","set2")
         * 结果:1
         * 会返回set1中哪些元素是set2集合中没有的
         */
        jedis.sdiff("set1", "set2");//差集运算
        jedis.sdiffstore("set3", "set1", "set2");//将set1集合和set2集合,差集存到set3集合中
        jedis.sinter("set1", "set2");//交集运算,返回两集合中共有的元素
        jedis.sinterstore("set4", "set1", "set2");//将set1和set2共有的元素存入set4集合中
        jedis.sunion("set1", "set2");//并集运算,返回两个集合所有的元素,set集合会自动去重
        jedis.sunionstore("set5", "set1", "set2");//将set1和set2集合中所有元素,存入set5集合
        jedis.smembers("set1");//查看set1集合中有哪些元素
        jedis.scard("set1");//返回set1集合中元素数量
        jedis.srandmember("set1");//随机返回set1集合中的一个元素
    }

    /**
     * Redis数据结构 sorted-Set
     * 不允许元素重复
     * 每个元素都有一个分数值
     */
    public static void sortedSetType() {
        Jedis jedis = RedisDemo.getJedisByPool();
        Map<String, Double> map = new HashMap<>();
        map.put("ls", 100.0);
        map.put("ww", 99.0);
        map.put("w2", 50.0);
        map.put("w1", 69.0);
        map.put("w3", 64.0);
        jedis.zadd("sortedSet1", 80, "zs");//添加元素,返回新添加元素的个数,注意是新添加成功的
        jedis.zadd("sortedSet1", 100, "zs");//如果再次添加zs的分值数将会更新成100
        jedis.zadd("sortedSet1", map);//添加元素,支持map键值对形式
        jedis.zscore("sortedSet1", "zs");//获取sortedSet1集合中zs的分数,返回结果100
        jedis.zcard("sortedSet1");//获取sortedSet1集合成员的数量
        jedis.zrem("sortedSet1", "zs");//删除sortedSet1集合中zs元素
        jedis.zrange("sortedSet1",0,1);//查询范围,返回下标0-1也就是前2个元素
        /**
         * 查询范围并按照分数值从小到大排列,
         * 返回结果Set<Tuple>,
         * 遍历得到Tuple类型,
         * getScore:分数值,
         * getElement:元素名
         */
        jedis.zrangeWithScores("sortedSet1",0,-1);//-1即最后一个元素,按照分数值从小大到
        jedis.zrevrangeWithScores("sortedSet1",0,-1);//按照分数值从大到小
        jedis.zrangeByScore("sortedSet1",60.0,99.0);//按照分数值范围查找元素名,eg:60.0最小值,99.0最大值,包含边界
        jedis.zremrangeByRank("sortedSet1",0,1);//按照范围删除,即删除下标0-1的前两个
        jedis.zremrangeByScore("sortedSet1",0,60);//按照分数值范围删除,即删除大于等于0小于等于60的元素
        /**
         * zrangeByScoreWithScores
         * 按照分数值从小到大排序
         * 按照分数值范围20.0-90.0
         * 并且限制只要0,3 前3个元素,就如SQL中的limit效果一样
         * zrevrangeByScoreWithScores
         * 按照分数值从大到小排序
         * *********************************************************************
         * 注意:zrangeByScoreWithScores,从小到大的排列
         * key值sortedSet1后面第一个是最小分数值,第二个是最大分数值
         * zrevrangeByScoreWithScores,从大到小的排列
         * key值sortedSet1后面第一个是最大分数值,第二个是最小分数值
         */
        jedis.zrangeByScoreWithScores("sortedSet1",20.0,90.0,0,3);//从小到大
        jedis.zrevrangeByScoreWithScores("sortedSet1",90.0,20.0,0,3);//从大到小
        jedis.zincrby("sortedSet1",30.0,"w3");//增加指定元素分数值,eg:w3分数值在原有基础增加30
        jedis.zcount("sortedSet1",60.0,100.0);//获取指定分数值范围元素的个数,eg:大于等于60小于等于100的元素个数
    }
}

0 人点赞