前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis基本数据结构类型及方法

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

作者头像
itze
发布2022-10-31 16:04:15
2930
发布2022-10-31 16:04:15
举报
文章被收录于专栏:IT者

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的元素个数
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年12月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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