搜索
首页数据库Redisredis有哪些api

redis有哪些api

Jun 25, 2019 am 11:27 AM
apiredis

redis有哪些api

一、Redis Client介绍

1.1、简介

Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对各类API进行封装调用。

Jedis源码工程地址:https://github.com/xetorthio/jedis

1.2、使用

Redis Client最好选用与服务端对应的版本,本例中使用Redis 2.8.19客户端使用jedis -2.6.3,Maven工程添加如下引用即可。

<dependency>
         <groupId>redis.clients</groupId>
         <artifactId>jedis</artifactId>
         <version>2.6.3</version>
         <type>jar</type>
         <scope>compile</scope>
   </dependency>

1.3、注意事项

Redis Client拥有众多对接版本,本项目目前使用Jedis为官方推荐Java对接客户端,是基于其对Redis良好的版本支持和API对接,另外编码中尽量避免使用废弃接口。

Redis目前正在新版过渡期,3.0版本暂未稳定,但是由于3.0版本提供了最新的集群功能,可能在日后稳定版发布以后升级到3.0,目前使用的Jedis支持3.0的目前版本API。

二、Redis Client常用API

2.1、环境要求

语言:Java

JDK:1.7

Redis : 2.8.19(稳定版)

2.2、系统使用

2.2.1、建立连接

普通连接

Jedis jedis = new Jedis("localhost");
       jedis.set("foo", "bar");
       String value = jedis.get("foo");
       System.out.println(value);

设置连接池配置

该方法用于得到redis连接池连接使用的连接池配置,该连接池配置也可以通过spring注入的方式来进行相对应的配置,连接池采用的是平时比较常用的org.apache.commons.pool2.impl.GenericObjectPoolConfig来进行的连接池管理

配置文件如下

#redis服务器ip #   
    redis.ip=172.30.5.117 
   
    #redis服务器端口号# 
    redis.port=6379 
     
    ###jedis##pool##config### 
    #jedis的最大分配对象# 
    jedis.pool.maxActive=1024 
   
    #jedis最大保存idel状态对象数 # 
    jedis.pool.maxIdle=200 
   
    #jedis池没有对象返回时,最大等待时间 # 
    jedis.pool.maxWait=1000 
   
    #jedis调用borrowObject方法时,是否进行有效检查# 
    jedis.pool.testOnBorrow=true 
   
    #jedis调用returnObject方法时,是否进行有效检查 # 
    jedis.pool.testOnReturn=true

连接池配置实例化代码(也可通过spring注入进行配置):

   /**
    * 获取化连接池配置
    * @return JedisPoolConfig
    * */
   private JedisPoolConfig getPoolConfig(){
      if(config == null){
         config = new JedisPoolConfig();
         //最大连接数
config.setMaxTotal(Integer.valueOf(getResourceBundle().getString("redis.pool.maxTotal")));
         //最大空闲连接数
config.setMaxIdle(Integer.valueOf(getResourceBundle().getString("redis.pool.maxIdle")));
         //获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
config.setMaxWaitMillis(Long.valueOf(getResourceBundle().getString("redis.pool.maxWaitMillis")));
         //在获取连接的时候检查有效性, 默认false
config.setTestOnBorrow(Boolean.valueOf(getResourceBundle().getString("redis.pool.testOnBorrow")));
         //在获取返回结果的时候检查有效性, 默认false
config.setTestOnReturn(Boolean.valueOf(getResourceBundle().getString("redis.pool.testOnReturn")));
      }
      return config;
   }

普通连接池连接

  这里展示的是普通的连接池方式链接redis的方案,跟普通的数据库连接池的操作方式类似;
/**
        * 初始化JedisPool
        * */
   private void initJedisPool(){
      if(pool == null){
         //获取服务器IP地址
         String ipStr = getResourceBundle().getString("redis.ip");
         //获取服务器端口
         int portStr = Integer.valueOf(getResourceBundle()
.getString("redis.port"));
         //初始化连接池
         pool = new JedisPool(getPoolConfig(), ipStr,portStr);
      }
   }

Sentinel连接池连接

该连接池用于应对Redis的Sentinel的主从切换机制,能够正确在服务器宕机导致服务器切换时得到正确的服务器连接,当服务器采用该部署策略的时候推荐使用该连接池进行操作;

 private void initJedisSentinelPool(){
      if(sentinelpool == null){
         //监听器列表
         Set<String> sentinels = new HashSet<String>();
         //监听器1
         sentinels.add(new HostAndPort("192.168.50.236",
26379).toString());
         //监听器2
         sentinels.add(new HostAndPort("192.168.50.237",
26379).toString());
//实际使用的时候在properties里配置即可:redis.sentinel.hostandports
=192.168.50.236:26379,192.168.50.237:26379
getResourceBundle().getString("redis.sentinel.hostandports")
//mastername是服务器上的master的名字,在master服务器的sentinel.conf中配置:
                     //[sentinel monitor server-1M  192.168.50.236 6379 2]
                     //中间的server-1M即为这里的masterName
         String masterName = getResourceBundle()
.getString("redis.sentinel.masterName");
         //初始化连接池
         sentinelpool = new JedisSentinelPool(masterName,
sentinels, getPoolConfig());
      }
   }

ShardedJedisPool连接池分片连接

   /**
        * 初始化ShardedJedisPool
        * Redis在容灾处理方面可以通过服务器端配置Master-Slave模式来实现。
        * 而在分布式集群方面目前只能通过客户端工具来实现一致性哈希分布存储,即key分片存储。
        * Redis可能会在3.0版本支持服务器端的分布存储
        * */
   private void initShardedJedisPool() {
      if (shardPool == null) {
         // 创建多个redis共享服务
         String redis1Ip = getResourceBundle().getString("redis1.ip");
         int redis1Port = Integer.valueOf(bundle.getString("redis.port"));
         JedisShardInfo jedisShardInfo1 = new JedisShardInfo(redis1Ip, redis1Port);
         String redis2Ip = getResourceBundle().getString("redis2.ip");
         int redis2Port = Integer.valueOf(bundle.getString("redis.port"));
         JedisShardInfo jedisShardInfo2 = new JedisShardInfo(redis2Ip, redis2Port);
 
         List<JedisShardInfo> serverlist = new LinkedList<JedisShardInfo>();
         serverlist.add(jedisShardInfo1);
         serverlist.add(jedisShardInfo2);
         // 初始化连接池
         shardPool = new ShardedJedisPool(getPoolConfig(),serverlist);
      }
   }

读写删除操作

// 从池中获取一个Jedis对象
      Jedis jedis = sentinelpool.getSentinelpoolResource();
      String keys = "name";
   // 删除key-value对象,如果key不存在则忽略此操作
      jedis.del(keys);
   // 存数据
      jedis.set(keys, "snowolf");
// 判断key是否存在,不存在返回false存在返回true
      jedis.exists(keys);
   // 取数据
      String value = jedis.get(keys);
   // 释放对象池(3.0将抛弃该方法)
      sentinelpool.returnSentinelpoolResource(jedis);

三、示例代码

1.     String的简单追加

// 从池中获取一个Jedis对象
   JedisUtil.getInstance().STRINGS.append(key, value);

2.     价格时间排序(前提是已经存储了价格,时间的SortSet)

//执行2级排序操作()

String stPriceSet = “stPriceSet”;//stPriceSet价格的sortset列表名
String stTimeSet = “stTimeSet”; // stTimeSet时间的sortset列表名
   Set<Tuple> sumSet = JedisUtilEx.getInstance()
.getSortSetByPirceUpAndTimeDown(stPriceSet, stTimeSet);
//排序以后可以重复获取上次排序结果(缓存时间10分钟)
Set<Tuple> sumSet = JedisUtilEx.getInstance()
getLastPirceUpAndTimeDownSet();

3.  价格时间排序(前提是已经存储了价格,时间的SortSet)

//执行2级排序操作
String stPriceSet = “stPriceSet”;//stPriceSet价格的sortset列表名
String stTimeSet = “stTimeSet”; // stTimeSet时间的sortset列表名
   Set<Tuple> sumSet = JedisUtilEx.getInstance()
. getSortSetByPirceDownAndTimeDown (stPriceSet, stTimeSet);
   //排序以后可以重复获取上次排序结果(缓存时间10分钟)
Set<Tuple> sumSet = JedisUtilEx.getInstance()
getLastPirceDownAndTimeDownSet ();

4.     保存JavaBean到hash表中

// bean继承至RedisBean
JedisUtilEx.getInstance().setBeanToHash(bean);

5.     从hash表中读取JavaBean

//uuid为业务制定的唯一标识符规则(相当于主键)
String uuid = “1”; //该ID是我们提前就知道的
//T继承至RedisBean;
JedisUtilEx.getInstance().getBeanFromHash (uuid,Class<T> cls);

6.     将JavaBean列表装入hash中

//list中的bean继承至RedisBean
List<T> beanList = …;
JedisUtilEx.getInstance().setBeanListToHash(beanList);
//异步版本的存储列表到hash
JedisUtilEx.getInstance().setBeanListToHashSyn(beanList);

7.     普通的操作流程示例

//获取jedis引用
Jedis jedis = JedisUtil.getInstance().getJedis();
//执行业务以及调用jedis提供的接口功能
…
jedis.hset(…);
…
//执行完成以后务必释放资源
JedisUtil.getInstance().returnJedis(jedis);
//若以后不会使用JEDIS,需要关闭所有链接池
   RedisConnetcion.destroyAllPools();

8.     事务执行流程

//获取连接资源
   Jedis jd = JedisUtil.getInstance().getJedis();
//开启事务
Transaction ts = jd.multi();
//执行业务以及调用jedis提供的接口功能
…
jedis.hset(…);
…
//执行事务
   List<Object> list = ts.exec();
//释放资源
JedisUtil.getInstance().returnJedis(jd);

9.     异步执行

//获取连接资源
   Jedis jedis = JedisUtil.getInstance().getJedis();
   //获取管道
Pipeline pipeline = jedis.pipelined();
//执行业务以及调用jedis提供的接口功能
…
jedis.hset(…);
…
//提交并释放管道
pipeline.syncAndReturnAll();
//释放资源
JedisUtil.getInstance().returnJedis(jedis);

10.  如何获取Jedis命名规则的合成KEY

//获取类的唯一键值key,例如:User:1(User为class,1为uuid)其中user继承于Reidsbean
JedisUtilEx.getInstance().getBeanKey(user);
//另一种获取类的唯一键值key的方法
JedisUtilEx.getInstance().getBeanKey(String uuid,Class<T> cls);
//获取bean对应的KEY(对应列的唯一键值key)
JedisUtilEx.getInstance().getBeanKey(String uuid,Class<T> cls,String... fileds);
//获取bean对应的KEY(集群key)
JedisUtilEx.getInstance().getBeanKey(Class<T> cls,String... fileds);

四、jedis操作命令:

1.对value操作的命令

 exists(key):确认一个key是否存在
     del(key):删除一个key
     type(key):返回值的类型
     keys(pattern):返回满足给定pattern的所有key
     randomkey:随机返回key空间的一个key
     rename(oldname, newname):将key由oldname重命名为newname,若newname存在则删除newname表示的key
     dbsize:返回当前数据库中key的数目
     expire:设定一个key的活动时间(s)
     ttl:获得一个key的活动时间
     select(index):按索引查询
     move(key, dbindex):将当前数据库中的key转移到有dbindex索引的数据库
     flushdb:删除当前选择数据库中的所有key
     flushall:删除所有数据库中的所有key

2.对String操作的命令

  set(key, value):给数据库中名称为key的string赋予值value
     get(key):返回数据库中名称为key的string的value
     getset(key, value):给名称为key的string赋予上一次的value
     mget(key1, key2,…, key N):返回库中多个string(它们的名称为key1,key2…)的value
     setnx(key, value):如果不存在名称为key的string,则向库中添加string,名称为key,值为value
     setex(key, time, value):向库中添加string(名称为key,值为value)同时,设定过期时间time
     mset(key1, value1, key2, value2,…key N, value N):同时给多个string赋值,名称为key i的string赋值value i
     msetnx(key1, value1, key2, value2,…key N, value N):如果所有名称为key i的string都不存在,则向库中添加string,名称key i赋值为value i
     incr(key):名称为key的string增1操作
     incrby(key, integer):名称为key的string增加integer
     decr(key):名称为key的string减1操作
     decrby(key, integer):名称为key的string减少integer
     append(key, value):名称为key的string的值附加value
     substr(key, start, end):返回名称为key的string的value的子串

3.对List操作的命令

 rpush(key, value):在名称为key的list尾添加一个值为value的元素
     lpush(key, value):在名称为key的list头添加一个值为value的 元素
     llen(key):返回名称为key的list的长度
     lrange(key, start, end):返回名称为key的list中start至end之间的元素(下标从0开始,下同)
     ltrim(key, start, end):截取名称为key的list,保留start至end之间的元素
     lindex(key, index):返回名称为key的list中index位置的元素
     lset(key, index, value):给名称为key的list中index位置的元素赋值为value
     lrem(key, count, value):删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0      从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素。
     lpop(key):返回并删除名称为key的list中的首元素
     rpop(key):返回并删除名称为key的list中的尾元素
     blpop(key1, key2,… key N, timeout):lpop 命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果 timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对key i+1开始的list执行pop操作。
     brpop(key1, key2,… key N, timeout):rpop的block版本。参考上一命令。
     rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部

4.对Set操作的命令

  sadd(key, member):向名称为key的set中添加元素member
     srem(key, member) :删除名称为key的set中的元素member
     spop(key) :随机返回并删除名称为key的set中一个元素
     smove(srckey, dstkey, member) :将member元素从名称为srckey的集合移到名称为dstkey的集合
     scard(key) :返回名称为key的set的基数
     sismember(key, member) :测试member是否是名称为key的set的元素
     sinter(key1, key2,…key N) :求交集
     sinterstore(dstkey, key1, key2,…key N) :求交集并将交集保存到dstkey的集合
     sunion(key1, key2,…key N) :求并集
     sunionstore(dstkey, key1, key2,…key N) :求并集并将并集保存到dstkey的集合
     sdiff(key1, key2,…key N) :求差集
     sdiffstore(dstkey, key1, key2,…key N) :求差集并将差集保存到dstkey的集合
     smembers(key) :返回名称为key的set的所有元素
     srandmember(key) :随机返回名称为key的set的一个元素

5.对zset(sorted set)操作的命令

   zadd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。
     zrem(key, member) :删除名称为key的zset中的元素member
     zincrby(key, increment, member) :如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
     zrank(key, member) :返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
     zrevrank(key, member) :返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
     zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
     zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素
     zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素
     zcard(key):返回名称为key的zset的基数
     zscore(key, element):返回名称为key的zset中元素element的score
     zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素
     zremrangebyscore(key, min, max) :删除名称为key的zset中score >= min且score <= max的所有元素
     zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行 SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。

6.对Hash操作的命令

   hset(key, field, value):向名称为key的hash中添加元素field<—>value
     hget(key, field):返回名称为key的hash中field对应的value
     hmget(key, field1, …,field N):返回名称为key的hash中field i对应的value
     hmset(key, field1, value1,…,field N, value N):向名称为key的hash中添加元素field i<—>value i
     hincrby(key, field, integer):将名称为key的hash中field的value增加integer
     hexists(key, field):名称为key的hash中是否存在键为field的域
     hdel(key, field):删除名称为key的hash中键为field的域
     hlen(key):返回名称为key的hash中元素个数
     hkeys(key):返回名称为key的hash中所有键
     hvals(key):返回名称为key的hash中所有键对应的value
     hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value

五、Redis命名规则

由于Redis所有数据为键值对,即所有数据均只能通过键值(Key)来进行管理,故需

要规范命名规则,jedis客户端包装了有专门的命名规则生产函数,调用即可!代码参考实例代码:

 

六、参考资料

API:http://www.php.cn/dic/54.html

更多功能可以参考该文档去调用

更多Redis相关技术文章,请访问Redis教程栏目进行学习!

以上是redis有哪些api的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
了解NOSQL:Redis的关键特征了解NOSQL:Redis的关键特征Apr 13, 2025 am 12:17 AM

Redis的关键特性包括速度、灵活性和丰富的数据结构支持。1)速度:Redis作为内存数据库,读写操作几乎瞬时,适用于缓存和会话管理。2)灵活性:支持多种数据结构,如字符串、列表、集合等,适用于复杂数据处理。3)数据结构支持:提供字符串、列表、集合、哈希表等,适合不同业务需求。

REDIS:确定其主要功能REDIS:确定其主要功能Apr 12, 2025 am 12:01 AM

Redis的核心功能是高性能的内存数据存储和处理系统。1)高速数据访问:Redis将数据存储在内存中,提供微秒级别的读写速度。2)丰富的数据结构:支持字符串、列表、集合等,适应多种应用场景。3)持久化:通过RDB和AOF方式将数据持久化到磁盘。4)发布订阅:可用于消息队列或实时通信系统。

REDIS:流行数据结构指南REDIS:流行数据结构指南Apr 11, 2025 am 12:04 AM

Redis支持多种数据结构,具体包括:1.字符串(String),适合存储单一值数据;2.列表(List),适用于队列和栈;3.集合(Set),用于存储不重复数据;4.有序集合(SortedSet),适用于排行榜和优先级队列;5.哈希表(Hash),适合存储对象或结构化数据。

redis计数器怎么实现redis计数器怎么实现Apr 10, 2025 pm 10:21 PM

Redis计数器是一种使用Redis键值对存储来实现计数操作的机制,包含以下步骤:创建计数器键、增加计数、减少计数、重置计数和获取计数。Redis计数器的优势包括速度快、高并发、持久性和简单易用。它可用于用户访问计数、实时指标跟踪、游戏分数和排名以及订单处理计数等场景。

redis命令行怎么用redis命令行怎么用Apr 10, 2025 pm 10:18 PM

使用 Redis 命令行工具 (redis-cli) 可通过以下步骤管理和操作 Redis:连接到服务器,指定地址和端口。使用命令名称和参数向服务器发送命令。使用 HELP 命令查看特定命令的帮助信息。使用 QUIT 命令退出命令行工具。

redis集群模式怎么搭建redis集群模式怎么搭建Apr 10, 2025 pm 10:15 PM

Redis集群模式通过分片将Redis实例部署到多个服务器,提高可扩展性和可用性。搭建步骤如下:创建奇数个Redis实例,端口不同;创建3个sentinel实例,监控Redis实例并进行故障转移;配置sentinel配置文件,添加监控Redis实例信息和故障转移设置;配置Redis实例配置文件,启用集群模式并指定集群信息文件路径;创建nodes.conf文件,包含各Redis实例的信息;启动集群,执行create命令创建集群并指定副本数量;登录集群执行CLUSTER INFO命令验证集群状态;使

redis怎么读取队列redis怎么读取队列Apr 10, 2025 pm 10:12 PM

要从 Redis 读取队列,需要获取队列名称、使用 LPOP 命令读取元素,并处理空队列。具体步骤如下:获取队列名称:以 "queue:" 前缀命名,如 "queue:my-queue"。使用 LPOP 命令:从队列头部弹出元素并返回其值,如 LPOP queue:my-queue。处理空队列:如果队列为空,LPOP 返回 nil,可先检查队列是否存在再读取元素。

redis集群zset怎么使用redis集群zset怎么使用Apr 10, 2025 pm 10:09 PM

Redis 集群中使用 zset:zset 是一种有序集合,将元素与评分关联。分片策略: a. 哈希分片:根据 zset 键的哈希值分布。 b. 范围分片:根据元素评分划分为范围,并将每个范围分配给不同的节点。读写操作: a. 读操作:如果 zset 键属于当前节点的分片,则在本地处理;否则,路由到相应的分片。 b. 写入操作:始终路由到持有 zset 键的分片。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具