java中redis的使用(包含单个redis和分布式多个redis)以及redis的几种数据类型介绍

小编 2026-07-08 阅读:644 评论:0
redis:非关系型数据库,以key-value的形式存储数据,功能之一是做缓存功能。 首先是单个redis在java中的使用。 //redis连接池配置对象 JedisPoolC...

redis:非关系型数据库,以key-value的形式存储数据,功能之一是做缓存功能。

首先是单个redis在java中的使用

  //redis连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //在指定时刻通过pool能够获取到的最大的连接的jedis个数,默认8
        config.setMaxTotal(8);
        // 最大能够保持idle的数量,控制一个pool最多有多少个状态为idle的jedis实例,默认8
        config.setMaxIdle(8);
        // 在容器中的最小的闲置连接数,默认0
        config.setMinIdle(0);
        // 当连接池内的连接耗尽时,getBlockWhenExhausted为true时,连接会阻塞,
        // 超过了阻塞的时间(设定的maxWaitMillis,单位毫秒)时会报错
        //默认-1
        config.setMaxWaitMillis(1000);
        //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;默认是false
        config.setTestOnBorrow(true);
        //testWhileIdle:如果为true,表示有一个idle object evitor线程对idle object进行扫描,
        // 如果validate失败,此object会被从pool中drop掉;
        // 这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;默认是false
        config.setTestWhileIdle(false);
        //timeBetweenEvictionRunsMillis:表示idle object evitor两次扫描之间要sleep的毫秒数,逐出扫描的时间间隔(毫秒),
        // 如果为负数,则不运行逐出线程,默认为-1
        config.setTimeBetweenEvictionRunsMillis(-1);
        //通过连接池获取redis对象,并设置ip 端口 过期时间 密码 默认库的实例
        JedisPool jdpool = new JedisPool(config, \"127.0.0.1\", 6379, 10000, null, 0);
        Jedis jedis = jdpool.getResource();
        //向redis中写入数据
        jedis.set(\"test\", \"test1\");
        //关闭连接
        jedis.close();

代码很短,通过连接池获取redis对象,然后操作redis数据库。

但是想在很多分布式项目需要部署在多台机器上。这时候一个redis服务就不够了。所以需要用到ShardeJedis对象。

redis分布式。

        //两个JedisShardInfo对象,分别填入两个redis服务的连接信息,然后放入一个list中
        JedisShardInfo jedisShardInfo1 = new JedisShardInfo(\"127.0.0.1\", 6379, 5000);
        jedisShardInfo1.setPassword(\"123\");
        JedisShardInfo jedisShardInfo2 = new JedisShardInfo(\"127.0.0.2\", 6379, 5000);
        jedisShardInfo2.setPassword(\"456\");
        List<JedisShardInfo> infos = Arrays.asList(jedisShardInfo1, jedisShardInfo2);
        //连接池配置信息
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(600);
        config.setMaxIdle(300);
        config.setMaxWaitMillis(1000);
        config.setTestOnBorrow(true);
        //从连接池获取redis对象
        ShardedJedisPool shardedJedisPool = new ShardedJedisPool(config, infos);
        ShardedJedis shardedJedis = shardedJedisPool.getResource();
        //操作redis数据库
        shardedJedis.set(\"test\", \"aaaa\");

这里我们在连接池中放入了两个JedisShardInfo,所以当你把数据存入缓存的时候数据会进入两个redis中的其中一个。至于会进入哪一个,它会根据key来进行判定,你也可以在初始化pool的时候用参数keyTagPattern来指定。redis自带一个pattern

DEFAULT_KEY_TAG_PATTERN = Pattern.compile(\"\\\\{(.+?)\\\\}\");

注意:

jedis和shardedJedis都是redis对象,可以对redis进行操作,但是shardedJedis不支持对多个key进行操作。例如如果想要在所有key中进行模糊搜索就不行。

 

redis语法

redis是以key-value的形式存储数据的,其中value的类型分为string,hash,list,set(集合),sorted set(有序集合)

1.string

set key value(设置指定 key 的值)

get key(获取指定 key 的值)

mget key1 key2 key3(所有(一个或多个)给定 key 的值,如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil )

append key value(如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾)

2.hash(Redis hash (java中的map),是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis中每个 hash 可以存储 232 - 1 键值对(40多亿))

hget key field(查看哈希表 key 中,指定的字段是否存在)

hset key field value(将哈希表 key 中的字段 field 的值设为 value)

hgetall(获取在哈希表中指定 key 的所有字段和值)

3.list(Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素))

llen key(获取列表长度)

lpush key value1 value2(将一个或多个值插入到列表头部)

rpush key value1 value2(将一个或多个值插入到列表尾部)

lrange key start stop(获取列表指定范围内的元素start,stop可以为正数和负数,正数代表第几个元素,负数代表倒数第几个元素)

4.set(Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员))

sadd key member1 member2(向集合添加一个或多个成员)

scard key (获取集合的成员数)

srem key member1 member2(移除集合中一个或多个成员)

5.sorted set(Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员))

zadd key score1 member1 score2 member2(向有序集合添加一个或多个成员,或者更新已存在成员的分数)

zcared key(获取有序集合的成员数)

zrem key member1 member2(移除有序集合中的一个或多个成员)

以上5中类型的存储方式,我们常用到的是前三种,对于这三种数据的使用场景,我的理解是

当需要记录的数据不需要进行增减并且不会修改的时候可以转为byte用string存储

当需要存储数据集合并且集合的数量会增减但是集合里单个元素不会修改的时候可以用list或set

当需要储存对象并且对象的属性需要修改,可以用hash

在上面列出的语法是比较常用的几个,其实还有很多语法没有写出来,大家可以自己去了解,推荐一下我经常浏览的网站http://www.runoob.com/redis/redis-keys.html

之所以要看这些语法,是因为在java中使用redis的方法名和redis的语法完全一样

例如:

redis.set()

redis.get()

redis.lpush()

redis.rpush()

最后,在文章一开始贴出的示例代码,其实可以进行封装工具类,或者通过spring bean的形式注入,所有的配置信息参数在properties文件中灵活配置。方法很多,就不详细说明了。

 

 

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表