首頁 資料庫 Redis redis有哪些api

redis有哪些api

Jun 25, 2019 am 11:27 AM
api redis

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);
登入後複製
##  ##
//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);
登入後複製
#1111.的合成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

熱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 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

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 08:45 PM

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

redis怎麼啟動服務器 redis怎麼啟動服務器 Apr 10, 2025 pm 08:12 PM

啟動 Redis 服務器的步驟包括:根據操作系統安裝 Redis。通過 redis-server(Linux/macOS)或 redis-server.exe(Windows)啟動 Redis 服務。使用 redis-cli ping(Linux/macOS)或 redis-cli.exe ping(Windows)命令檢查服務狀態。使用 Redis 客戶端,如 redis-cli、Python 或 Node.js,訪問服務器。

redis底層怎麼實現 redis底層怎麼實現 Apr 10, 2025 pm 07:21 PM

Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

redis怎麼使用鎖 redis怎麼使用鎖 Apr 10, 2025 pm 08:39 PM

使用Redis進行鎖操作需要通過SETNX命令獲取鎖,然後使用EXPIRE命令設置過期時間。具體步驟為:(1) 使用SETNX命令嘗試設置一個鍵值對;(2) 使用EXPIRE命令為鎖設置過期時間;(3) 當不再需要鎖時,使用DEL命令刪除該鎖。

redis怎麼讀取隊列 redis怎麼讀取隊列 Apr 10, 2025 pm 10:12 PM

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

redis怎麼查看所有的key redis怎麼查看所有的key Apr 10, 2025 pm 07:15 PM

要查看 Redis 中的所有鍵,共有三種方法:使用 KEYS 命令返回所有匹配指定模式的鍵;使用 SCAN 命令迭代鍵並返回一組鍵;使用 INFO 命令獲取鍵的總數。

redis怎麼讀源碼 redis怎麼讀源碼 Apr 10, 2025 pm 08:27 PM

理解 Redis 源碼的最佳方法是逐步進行:熟悉 Redis 基礎知識。選擇一個特定的模塊或功能作為起點。從模塊或功能的入口點開始,逐行查看代碼。通過函數調用鏈查看代碼。熟悉 Redis 使用的底層數據結構。識別 Redis 使用的算法。

See all articles