Jedis による redis の操作の詳細な説明
redisこのコラムでは主に、redis 上での Jedis の 5 つの主要な操作 (文字列、リスト、ハッシュ、セット、順序付きセット) について説明します。
推奨: redis チュートリアル (無料)
##JedisUtil
テスト ケースはこちらjunit4 を実行し、次のようにコードを準備します。
private static final String ipAddr = "10.10.195.112"; private static final int port = 6379; private static Jedis jedis= null; @BeforeClass public static void init() { jedis = JedisUtil.getInstance().getJedis(ipAddr, port); } @AfterClass public static void close() { JedisUtil.getInstance().closeJedis(jedis,ipAddr, port); }
このうち、JedisUtil は jedis を単純にカプセル化したもので、コードは次のとおりです。
import org.apache.log4j.Logger; import java.util.HashMap; import java.util.Map; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisUtil { private Logger logger = Logger.getLogger(this.getClass().getName()); private JedisUtil(){} private static class RedisUtilHolder{ private static final JedisUtil instance = new JedisUtil(); } public static JedisUtil getInstance(){ return RedisUtilHolder.instance; } private static Map<String,JedisPool> maps = new HashMap<String,JedisPool>(); private static JedisPool getPool(String ip, int port){ String key = ip+":"+port; JedisPool pool = null; if(!maps.containsKey(key)) { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxActive(RedisConfig.MAX_ACTIVE); config.setMaxIdle(RedisConfig.MAX_IDLE); config.setMaxWait(RedisConfig.MAX_WAIT); config.setTestOnBorrow(true); config.setTestOnReturn(true); pool = new JedisPool(config,ip,port,RedisConfig.TIMEOUT); maps.put(key, pool); } else { pool = maps.get(key); } return pool; } public Jedis getJedis(String ip, int port) { Jedis jedis = null; int count = 0; do { try { jedis = getPool(ip,port).getResource(); } catch (Exception e) { logger.error("get redis master1 failed!",e); getPool(ip,port).returnBrokenResource(jedis); } } while(jedis == null && count<RedisConfig.RETRY_NUM); return jedis; } public void closeJedis(Jedis jedis, String ip, int port){ if(jedis != null) { getPool(ip,port).returnResource(jedis); } } } public class RedisConfig { //可用连接实例的最大数目,默认值为8; //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 public static int MAX_ACTIVE = 1024; //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。 public static int MAX_IDLE = 200; //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException; public static int MAX_WAIT = 10000; public static int TIMEOUT = 10000; public static int RETRY_NUM = 5; }
##キー操作
@Test public void testKey() throws InterruptedException { System.out.println("清空数据:"+jedis.flushDB()); System.out.println("判断某个键是否存在:"+jedis.exists("username")); System.out.println("新增<'username','zzh'>的键值对:"+jedis.set("username", "zzh")); System.out.println(jedis.exists("name")); System.out.println("新增<'password','password'>的键值对:"+jedis.set("password", "password")); System.out.print("系统中所有的键如下:"); Set<String> keys = jedis.keys("*"); System.out.println(keys); System.out.println("删除键password:"+jedis.del("password")); System.out.println("判断键password是否存在:"+jedis.exists("password")); System.out.println("设置键username的过期时间为5s:"+jedis.expire("username", 5)); TimeUnit.SECONDS.sleep(2); System.out.println("查看键username的剩余生存时间:"+jedis.ttl("username")); System.out.println("移除键username的生存时间:"+jedis.persist("username")); System.out.println("查看键username的剩余生存时间:"+jedis.ttl("username")); System.out.println("查看键username所存储的值的类型:"+jedis.type("username")); }
出力結果:
清空数据:OK 判断某个键是否存在:false 新增<'username','zzh'>的键值对:OK false 新增<'password','password'>的键值对:OK 系统中所有的键如下:[username, password] 删除键password:1 判断键password是否存在:false 设置键username的过期时间为5s:1 查看键username的剩余生存时间:3 移除键username的生存时间:1 查看键username的剩余生存时间:-1 查看键username所存储的值的类型:string
##文字列操作
Redis では、文字列には次の 3 種類の値を格納できます:
- バイト文字列(バイト文字列)
- Integer
- 浮動小数点数
バイト文字列
@Test public void testString() throws InterruptedException { jedis.flushDB(); System.out.println("===========增加数据==========="); System.out.println(jedis.set("key1","value1")); System.out.println(jedis.set("key2","value2")); System.out.println(jedis.set("key3", "value3")); System.out.println("删除键key2:"+jedis.del("key2")); System.out.println("获取键key2:"+jedis.get("key2")); System.out.println("修改key1:"+jedis.set("key1", "value1Changed")); System.out.println("获取key1的值:"+jedis.get("key1")); System.out.println("在key3后面加入值:"+jedis.append("key3", "End")); System.out.println("key3的值:"+jedis.get("key3")); System.out.println("增加多个键值对:"+jedis.mset("key01","value01","key02","value02","key03","value03")); System.out.println("获取多个键值对:"+jedis.mget("key01","key02","key03")); System.out.println("获取多个键值对:"+jedis.mget("key01","key02","key03","key04")); System.out.println("删除多个键值对:"+jedis.del(new String[]{"key01","key02"})); System.out.println("获取多个键值对:"+jedis.mget("key01","key02","key03")); jedis.flushDB(); System.out.println("===========新增键值对防止覆盖原先值=============="); System.out.println(jedis.setnx("key1", "value1")); System.out.println(jedis.setnx("key2", "value2")); System.out.println(jedis.setnx("key2", "value2-new")); System.out.println(jedis.get("key1")); System.out.println(jedis.get("key2")); System.out.println("===========新增键值对并设置有效时间============="); System.out.println(jedis.setex("key3", 2, "value3")); System.out.println(jedis.get("key3")); TimeUnit.SECONDS.sleep(3); System.out.println(jedis.get("key3")); System.out.println("===========获取原值,更新为新值==========");//GETSET is an atomic set this value and return the old value command. System.out.println(jedis.getSet("key2", "key2GetSet")); System.out.println(jedis.get("key2")); System.out.println("获得key2的值的字串:"+jedis.getrange("key2", 2, 4)); }
memcached と redis にも追加操作がありますが、memcached には prepend 操作があり、これは redis では使用できません。===========增加数据=========== OK OK OK 删除键key2:1 获取键key2:null 修改key1:OK 获取key1的值:value1Changed 在key3后面加入值:9 key3的值:value3End 增加多个键值对:OK 获取多个键值对:[value01, value02, value03] 获取多个键值对:[value01, value02, value03, null] 删除多个键值对:2 获取多个键值对:[null, null, value03] ===========新增键值对防止覆盖原先值============== 1 1 0 value1 value2 ===========新增键值对并设置有效时间============= OK value3 null ===========获取原值,更新为新值========== value2 key2GetSet 获得key2的值的字串:y2Gログイン後にコピー
整数と浮動小数点数
@Test public void testNumber() { jedis.flushDB(); jedis.set("key1", "1"); jedis.set("key2", "2"); jedis.set("key3", "2.3"); System.out.println("key1的值:"+jedis.get("key1")); System.out.println("key2的值:"+jedis.get("key2")); System.out.println("key1的值加1:"+jedis.incr("key1")); System.out.println("获取key1的值:"+jedis.get("key1")); System.out.println("key2的值减1:"+jedis.decr("key2")); System.out.println("获取key2的值:"+jedis.get("key2")); System.out.println("将key1的值加上整数5:"+jedis.incrBy("key1", 5)); System.out.println("获取key1的值:"+jedis.get("key1")); System.out.println("将key2的值减去整数5:"+jedis.decrBy("key2", 5)); System.out.println("获取key2的值:"+jedis.get("key2")); }
出力結果:redis2.6以降このコマンドは incrbyfloat で、キーに格納されている値に浮動小数点量を加算します。この操作は jedis-2.1.0 ではサポートされていません。key1的值:1 key2的值:2 key1的值加1:2 获取key1的值:2 key2的值减1:1 获取key2的值:1 将key1的值加上整数5:7 获取key1的值:7 将key2的值减去整数5:-4 获取key2的值:-4ログイン後にコピー
##List @Test public void testList()
{
jedis.flushDB(); System.out.println("=リストを追加
#=");
jedis.lpush("collections", "ArrayList" , "Vector", "Stack", "HashMap", "WeakHashMap", "LinkedHashMap");
jedis.lpush("コレクション", "HashSet");
jedis.lpush("コレクション", " TreeSet");
jedis.lpush("コレクション", "ツリーマップ");
System.out.println("コレクションの内容:" jedis.lrange("コレクション", 0, -1)); //-1 は最後から 2 番目の要素を表し、-2 は最後から 2 番目の要素を表します。 System.out.println("Elements in collections range 0-3:" jedis.lrange("collections",0,3) ); System.out.println("=
##");
// リストで指定された値を削除します。2 番目のパラメーターは、削除された項目の数です (重複がある場合)。スタックからポップするのと同様に、後で追加された値が最初に削除されます。
System.out.println("指定された数の要素を削除します:" jedis.lrem("collections", 2, "HashMap"));
System.out.println("コレクションの内容:" jedis . lrange("collections", 0, -1));
System.out.println("次の表の 0 ~ 3 の範囲外の要素を削除します:" jedis.ltrim("collections", 0, 3) );
System.out.println("コレクションの内容:" jedis.lrange("コレクション", 0, -1));
System.out.println("スタックからポップされたコレクション リスト (左) end):" jedis .lpop(“コレクション”));
System.out.println(“コレクションの内容:” jedis.lrange(“コレクション”, 0, -1));
System.out .println("collections lpush に対応する要素をリストの右端から追加します:" jedis.rpush("collections", "EnumMap"));
System.out.println("コレクションの内容:" jedis.lrange("コレクション", 0, -1));
System.out.println("コレクションリストポップ(右端):" jedis.rpop("コレクション"));
System.out .println("コレクションの内容: ” jedis.lrange(“collections”, 0, -1));
System.out.println(“指定された添字 1 のコレクションの内容を変更します:” jedis.lset(“collections” ”, 1, “LinkedArrayList”) );
System.out.println("コレクションの内容:" jedis.lrange("コレクション", 0, -1)); System.out.println(" #=");
System.out.println( "コレクションの長さ:" jedis.llen("collections"));
System.out.println("コレクション インデックス 2 の要素を取得します:" jedis.lindex("collections", 2));
System.out.println("=================================);
jedis.lpush("sortedList", "3", "6", "2", "0", "7", "4");
System.out.println("ソート前のsortedList:" jedis .lrange("sortedList" , 0, -1));
System.out.println(jedis.sort("sortedList"));
System.out.println("sortedList のソート後:" jedis .lrange("sortedList", 0, -1));
}
出力結果:
===========添加一个list=========== collections的内容:[TreeMap, TreeSet, HashSet, LinkedHashMap, WeakHashMap, HashMap, Stack, Vector, ArrayList] collections区间0-3的元素:[TreeMap, TreeSet, HashSet, LinkedHashMap] =============================== 删除指定元素个数:1 collections的内容:[TreeMap, TreeSet, HashSet, LinkedHashMap, WeakHashMap, Stack, Vector, ArrayList] 删除下表0-3区间之外的元素:OK collections的内容:[TreeMap, TreeSet, HashSet, LinkedHashMap] collections列表出栈(左端):TreeMap collections的内容:[TreeSet, HashSet, LinkedHashMap] collections添加元素,从列表右端,与lpush相对应:4 collections的内容:[TreeSet, HashSet, LinkedHashMap, EnumMap] collections列表出栈(右端):EnumMap collections的内容:[TreeSet, HashSet, LinkedHashMap] 修改collections指定下标1的内容:OK collections的内容:[TreeSet, LinkedArrayList, LinkedHashMap] =============================== collections的长度:3 获取collections下标为2的元素:LinkedHashMap =============================== sortedList排序前:[4, 7, 0, 2, 6, 3] [0, 2, 3, 4, 6, 7] sortedList排序后:[4, 7, 0, 2, 6, 3]
Redis には、ブロッキング リストのポップ コマンドとリスト間で要素を移動するためのコマンドもあります: blpop 、brpop、rpoplpush、brpoplpushなど。
##Set
@Test public void testSet() { jedis.flushDB(); System.out.println("============向集合中添加元素============"); System.out.println(jedis.sadd("eleSet", "e1","e2","e4","e3","e0","e8","e7","e5")); System.out.println(jedis.sadd("eleSet", "e6")); System.out.println(jedis.sadd("eleSet", "e6")); System.out.println("eleSet的所有元素为:"+jedis.smembers("eleSet")); System.out.println("删除一个元素e0:"+jedis.srem("eleSet", "e0")); System.out.println("eleSet的所有元素为:"+jedis.smembers("eleSet")); System.out.println("删除两个元素e7和e6:"+jedis.srem("eleSet", "e7","e6")); System.out.println("eleSet的所有元素为:"+jedis.smembers("eleSet")); System.out.println("随机的移除集合中的一个元素:"+jedis.spop("eleSet")); System.out.println("随机的移除集合中的一个元素:"+jedis.spop("eleSet")); System.out.println("eleSet的所有元素为:"+jedis.smembers("eleSet")); System.out.println("eleSet中包含元素的个数:"+jedis.scard("eleSet")); System.out.println("e3是否在eleSet中:"+jedis.sismember("eleSet", "e3")); System.out.println("e1是否在eleSet中:"+jedis.sismember("eleSet", "e1")); System.out.println("e1是否在eleSet中:"+jedis.sismember("eleSet", "e5")); System.out.println("================================="); System.out.println(jedis.sadd("eleSet1", "e1","e2","e4","e3","e0","e8","e7","e5")); System.out.println(jedis.sadd("eleSet2", "e1","e2","e4","e3","e0","e8")); System.out.println("将eleSet1中删除e1并存入eleSet3中:"+jedis.smove("eleSet1", "eleSet3", "e1")); System.out.println("将eleSet1中删除e2并存入eleSet3中:"+jedis.smove("eleSet1", "eleSet3", "e2")); System.out.println("eleSet1中的元素:"+jedis.smembers("eleSet1")); System.out.println("eleSet3中的元素:"+jedis.smembers("eleSet3")); System.out.println("============集合运算================="); System.out.println("eleSet1中的元素:"+jedis.smembers("eleSet1")); System.out.println("eleSet2中的元素:"+jedis.smembers("eleSet2")); System.out.println("eleSet1和eleSet2的交集:"+jedis.sinter("eleSet1","eleSet2")); System.out.println("eleSet1和eleSet2的并集:"+jedis.sunion("eleSet1","eleSet2")); System.out.println("eleSet1和eleSet2的差集:"+jedis.sdiff("eleSet1","eleSet2"));//eleSet1中有,eleSet2中没有 }
出力結果:
============向集合中添加元素============ 8 1 0 eleSet的所有元素为:[e3, e4, e1, e2, e0, e8, e7, e6, e5] 删除一个元素e0:1 eleSet的所有元素为:[e3, e4, e1, e2, e8, e7, e6, e5] 删除两个元素e7和e6:2 eleSet的所有元素为:[e3, e4, e1, e2, e8, e5] 随机的移除集合中的一个元素:e5 随机的移除集合中的一个元素:e2 eleSet的所有元素为:[e3, e4, e1, e8] eleSet中包含元素的个数:4 e3是否在eleSet中:true e1是否在eleSet中:true e1是否在eleSet中:false ================================= 8 6 将eleSet1中删除e1并存入eleSet3中:1 将eleSet1中删除e2并存入eleSet3中:1 eleSet1中的元素:[e3, e4, e0, e8, e7, e5] eleSet3中的元素:[e1, e2] ============集合运算================= eleSet1中的元素:[e3, e4, e0, e8, e7, e5] eleSet2中的元素:[e3, e4, e1, e2, e0, e8] eleSet1和eleSet2的交集:[e3, e4, e0, e8] eleSet1和eleSet2的并集:[e3, e4, e1, e2, e0, e8, e7, e5] eleSet1和eleSet2的差集:[e7, e5]
Set に関するコマンドは他にもいくつかあります: srandmember、sdiffstore、sinterstore、sunionstore wait。
##ハッシュ
@Test public void testHash() { jedis.flushDB(); Map<String,String> map = new HashMap<>(); map.put("key1","value1"); map.put("key2","value2"); map.put("key3","value3"); map.put("key4","value4"); jedis.hmset("hash",map); jedis.hset("hash", "key5", "value5"); System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash"));//return Map<String,String> System.out.println("散列hash的所有键为:"+jedis.hkeys("hash"));//return Set<String> System.out.println("散列hash的所有值为:"+jedis.hvals("hash"));//return List<String> System.out.println("将key6保存的值加上一个整数,如果key6不存在则添加key6:"+jedis.hincrBy("hash", "key6", 6)); System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash")); System.out.println("将key6保存的值加上一个整数,如果key6不存在则添加key6:"+jedis.hincrBy("hash", "key6", 3)); System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash")); System.out.println("删除一个或者多个键值对:"+jedis.hdel("hash", "key2")); System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash")); System.out.println("散列hash中键值对的个数:"+jedis.hlen("hash")); System.out.println("判断hash中是否存在key2:"+jedis.hexists("hash","key2")); System.out.println("判断hash中是否存在key3:"+jedis.hexists("hash","key3")); System.out.println("获取hash中的值:"+jedis.hmget("hash","key3")); System.out.println("获取hash中的值:"+jedis.hmget("hash","key3","key4")); }
出力結果:
散列hash的所有键值对为:{key4=value4, key3=value3, key5=value5, key2=value2, key1=value1} 散列hash的所有键为:[key4, key3, key5, key2, key1] 散列hash的所有值为:[value4, value3, value1, value2, value5] 将key6保存的值加上一个整数,如果key6不存在则添加key6:6 散列hash的所有键值对为:{key4=value4, key3=value3, key6=6, key5=value5, key2=value2, key1=value1} 将key6保存的值加上一个整数,如果key6不存在则添加key6:9 散列hash的所有键值对为:{key4=value4, key3=value3, key6=9, key5=value5, key2=value2, key1=value1} 删除一个或者多个键值对:1 散列hash的所有键值对为:{key4=value4, key3=value3, key6=9, key5=value5, key1=value1} 散列hash中键值对的个数:5 判断hash中是否存在key2:false 判断hash中是否存在key3:true 获取hash中的值:[value3] 获取hash中的值:[value3, value4]
##順序付けられたセット
@Test public void testSortedSet() { jedis.flushDB(); Map<Double,String> map = new HashMap<>(); map.put(1.2,"key2"); map.put(4.0, "key3"); map.put(5.0,"key4"); map.put(0.2,"key5"); System.out.println(jedis.zadd("zset", 3,"key1")); System.out.println(jedis.zadd("zset",map)); System.out.println("zset中的所有元素:"+jedis.zrange("zset", 0, -1)); System.out.println("zset中的所有元素:"+jedis.zrangeWithScores("zset", 0, -1)); System.out.println("zset中的所有元素:"+jedis.zrangeByScore("zset", 0,100)); System.out.println("zset中的所有元素:"+jedis.zrangeByScoreWithScores("zset", 0,100)); System.out.println("zset中key2的分值:"+jedis.zscore("zset", "key2")); System.out.println("zset中key2的排名:"+jedis.zrank("zset", "key2")); System.out.println("删除zset中的元素key3:"+jedis.zrem("zset", "key3")); System.out.println("zset中的所有元素:"+jedis.zrange("zset", 0, -1)); System.out.println("zset中元素的个数:"+jedis.zcard("zset")); System.out.println("zset中分值在1-4之间的元素的个数:"+jedis.zcount("zset", 1, 4)); System.out.println("key2的分值加上5:"+jedis.zincrby("zset", 5, "key2")); System.out.println("key3的分值加上4:"+jedis.zincrby("zset", 4, "key3")); System.out.println("zset中的所有元素:"+jedis.zrange("zset", 0, -1)); }
出力結果:
1 4 zset中的所有元素:[key5, key2, key1, key3, key4] zset中的所有元素:[[[107, 101, 121, 53],0.2], [[107, 101, 121, 50],1.2], [[107, 101, 121, 49],3.0], [[107, 101, 121, 51],4.0], [[107, 101, 121, 52],5.0]] zset中的所有元素:[key5, key2, key1, key3, key4] zset中的所有元素:[[[107, 101, 121, 53],0.2], [[107, 101, 121, 50],1.2], [[107, 101, 121, 49],3.0], [[107, 101, 121, 51],4.0], [[107, 101, 121, 52],5.0]] zset中key2的分值:1.2 zset中key2的排名:1 删除zset中的元素key3:1 zset中的所有元素:[key5, key2, key1, key4] zset中元素的个数:4 zset中分值在1-4之间的元素的个数:2 key2的分值加上5:6.2 key3的分值加上4:4.0 zset中的所有元素:[key5, key1, key3, key4, key2]
順序付きセットには、zinterstore、zunionstore、zremrangebyscore、zremrangebyrank、zrevrank、zrevrange、zrangebyscore などのコマンドもあります。
##ソート sort
@Test public void testSort() { jedis.flushDB(); jedis.lpush("collections", "ArrayList", "Vector", "Stack", "HashMap", "WeakHashMap", "LinkedHashMap"); System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1)); SortingParams sortingParameters = new SortingParams(); System.out.println(jedis.sort("collections",sortingParameters.alpha())); System.out.println("==============================="); jedis.lpush("sortedList", "3","6","2","0","7","4"); System.out.println("sortedList排序前:"+jedis.lrange("sortedList", 0, -1)); System.out.println("升序:"+jedis.sort("sortedList", sortingParameters.asc())); System.out.println("升序:"+jedis.sort("sortedList", sortingParameters.desc())); System.out.println("==============================="); jedis.lpush("userlist", "33"); jedis.lpush("userlist", "22"); jedis.lpush("userlist", "55"); jedis.lpush("userlist", "11"); jedis.hset("user:66", "name", "66"); jedis.hset("user:55", "name", "55"); jedis.hset("user:33", "name", "33"); jedis.hset("user:22", "name", "79"); jedis.hset("user:11", "name", "24"); jedis.hset("user:11", "add", "beijing"); jedis.hset("user:22", "add", "shanghai"); jedis.hset("user:33", "add", "guangzhou"); jedis.hset("user:55", "add", "chongqing"); jedis.hset("user:66", "add", "xi'an"); sortingParameters = new SortingParams(); sortingParameters.get("user:*->name"); sortingParameters.get("user:*->add"); System.out.println(jedis.sort("userlist",sortingParameters)); }
出力結果:
collections的内容:[LinkedHashMap, WeakHashMap, HashMap, Stack, Vector, ArrayList] [ArrayList, HashMap, LinkedHashMap, Stack, Vector, WeakHashMap] =============================== sortedList排序前:[4, 7, 0, 2, 6, 3] 升序:[0, 2, 3, 4, 6, 7] 升序:[7, 6, 4, 3, 2, 0] =============================== [24, beijing, 79, shanghai, 33, guangzhou, 55, chongqing]
以上がJedis による redis の操作の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Redisデータをクリアする方法:Flushallコマンドを使用して、すべての重要な値をクリアします。 FlushDBコマンドを使用して、現在選択されているデータベースのキー値をクリアします。 [選択]を使用してデータベースを切り替え、FlushDBを使用して複数のデータベースをクリアします。 DELコマンドを使用して、特定のキーを削除します。 Redis-CLIツールを使用してデータをクリアします。

Redis指令を使用するには、次の手順が必要です。Redisクライアントを開きます。コマンド(動詞キー値)を入力します。必要なパラメーターを提供します(指示ごとに異なります)。 Enterを押してコマンドを実行します。 Redisは、操作の結果を示す応答を返します(通常はOKまたは-ERR)。

Redisを使用して操作をロックするには、setnxコマンドを介してロックを取得し、有効期限を設定するために有効期限コマンドを使用する必要があります。特定の手順は次のとおりです。(1)SETNXコマンドを使用して、キー価値ペアを設定しようとします。 (2)expireコマンドを使用して、ロックの有効期限を設定します。 (3)Delコマンドを使用して、ロックが不要になったときにロックを削除します。

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

Redisはハッシュテーブルを使用してデータを保存し、文字列、リスト、ハッシュテーブル、コレクション、注文コレクションなどのデータ構造をサポートします。 Redisは、スナップショット(RDB)を介してデータを維持し、書き込み専用(AOF)メカニズムを追加します。 Redisは、マスタースレーブレプリケーションを使用して、データの可用性を向上させます。 Redisは、シングルスレッドイベントループを使用して接続とコマンドを処理して、データの原子性と一貫性を確保します。 Redisは、キーの有効期限を設定し、怠zyな削除メカニズムを使用して有効期限キーを削除します。

Redisソースコードを理解する最良の方法は、段階的に進むことです。Redisの基本に精通してください。開始点として特定のモジュールまたは機能を選択します。モジュールまたは機能のエントリポイントから始めて、行ごとにコードを表示します。関数コールチェーンを介してコードを表示します。 Redisが使用する基礎となるデータ構造に精通してください。 Redisが使用するアルゴリズムを特定します。

Redisは、メッセージミドルウェアとして、生産消費モデルをサポートし、メッセージを持続し、信頼できる配信を確保できます。メッセージミドルウェアとしてRedisを使用すると、低遅延、信頼性の高いスケーラブルなメッセージングが可能になります。
