Apakah bahasa yang disokong oleh redis (lihat tapak web rasmi redis)
(1) Tambah pergantungan jedis
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <!--只能在测试类中使用--> <scope>test</scope> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency>
(2) Ujian kod
public class TestJedis { @Test public void test01(){ //连接redis--必须保证你的redis服务运行远程连接 //该对象把每个redis命令封装成对应的方法 //注意端口号 //xshell中的redis要运行起来,注意防火墙释放端口号,注意配置文件的修改 Jedis jedis=new Jedis("192.168.1.16",6379); //对于字符串操作的命令 String set = jedis.set("k1", "v1"); System.out.println(set); String set1 = jedis.set("k2", "v2"); System.out.println(set1); String set2 = jedis.set("k3", "v3"); System.out.println(set2); //对于hash的操作 jedis.hset("k4","name","小花"); Long hset = jedis.hset("k4", "age", "18"); System.out.println(hset); Map<String ,String> map=new HashMap<>(); map.put("name","小明"); map.put("age","20"); Long k = jedis.hset("k5", map); System.out.println(k); jedis.close(); } }
@Test public void test02(){ //创建连接池的配置类 JedisPoolConfig jedisPoolConfig=new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(20); jedisPoolConfig.setMinIdle(5); jedisPoolConfig.setMaxWait(Duration.ofMillis(3000)); JedisPool jedisPool=new JedisPool(jedisPoolConfig,"192.168.1.16",6379); long start = System.currentTimeMillis(); for (int i = 0; i < 1000; i++) { //从jedis连接池获取资源 Jedis jedis=jedisPool.getResource(); String ping = jedis.ping(); jedis.close();//是否关闭池子 } long end=System.currentTimeMillis(); //是为了比较使用池子还是不使用快,结论是使用池子快 System.out.println("总耗时:"+(end-start)); }
Apabila menyambung ke kluster, pastikan tiada nilai yang disimpan dalam kluster Jika terdapat nilai yang disimpan, anda perlukan untuk memadam fail yang dijana sebelum ini (pastikan anda memadamnya dengan bersih)
Perkara lain ialah melepaskan port yang sepadan: 6001, 6002, 6003, 6004, 6005, 6006 , kerana port yang dikeluarkan sebelum ini sebenarnya 10000. Perhatikan dua perkara di atas sebelum anda boleh menggunakan idea untuk menciptanya dengan jayanya.
@Test public void test03(){ Set<HostAndPort> nodes=new HashSet<>(); nodes.add(new HostAndPort("192.168.227.175",6001)); nodes.add(new HostAndPort("192.168.227.175",6002)); nodes.add(new HostAndPort("192.168.227.175",6003)); nodes.add(new HostAndPort("192.168.227.175",6004)); nodes.add(new HostAndPort("192.168.227.175",6005)); nodes.add(new HostAndPort("192.168.227.175",6006)); JedisCluster jedisCluster=new JedisCluster(nodes); jedisCluster.set("k6", "小老虎和小兔子"); jedisCluster.close(); }
operasi redis springboot merangkum dua kelas StringRedisTemplate dan RedisTemplate ialah subkelas StringRedisTemplate, dan StringRedisTemplate sahaja. jenis boleh disimpan, jenis objek tidak boleh disimpan. Jika anda ingin menggunakan StringRedisTemplate untuk menyimpan objek, anda mesti menukar objek menjadi rentetan json.
Apabila springboot menyepadukan redis, ia menyediakan dua kelas alat templat, StringRedisTemplate dan RedisTemplate.
(1) Memperkenalkan kebergantungan yang berkaitan
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
(2) Inject StringRedisTemplate objek kelas ini
@Autowired private StringRedisTemplate redisTemplate;
(3) Gunakan StringRedisTemplate
Kelas ini mengelak kelas dalaman yang sepadan secara berasingan untuk operasi pada setiap jenis data.
Tidak akan ada aksara yang bercelaru di sini kerana kaedah pensirilan dan penyahsirian telah ditukar kepada jenis Rentetan.
@Autowired private StringRedisTemplate stringRedisTemplate; @Test public void test01(){ //对hash类型的操作 HashOperations<String, Object, Object> forHash = stringRedisTemplate.opsForHash(); forHash.put("k1","name","张三"); forHash.put("k1","age","15"); Map<String,String> map=new HashMap<>(); map.put("name","李四"); map.put("age","25"); forHash.putAll("k36",map); Object o = forHash.get("k1", "name"); System.out.println(o); Set<Object> k1 = forHash.keys("k1"); System.out.println(k1); List<Object> k11 = forHash.values("k1"); System.out.println(k11); //获取k1对于的所有的field和value Map<Object, Object> k12 = forHash.entries("k1"); System.out.println(k12); } @Test void contextLoads() { //删除指定的key // stringRedisTemplate.delete("k"); //查看所有的key //stringRedisTemplate.keys("k"); //是否存在指定的key //stringRedisTemplate.hasKey("k"); //对字符串数据类型的操作ValueOperations ValueOperations<String, String> forValue = stringRedisTemplate.opsForValue(); //存储字符串类型--key value long uint setex() forValue.set("k1","张三",30, TimeUnit.SECONDS); //等价于setnx 存入成功返回true ,失败返回false Boolean absent = forValue.setIfAbsent("k11", "李四", 30, TimeUnit.SECONDS); System.out.println(absent); //append拼接 Integer append = forValue.append("k11", "真好看"); String k11 = forValue.get("k11"); System.out.println(k11); }
Akan ada aksara yang bercelaru di sini kerana kaedah pensirilan dan penyahserikannya lalai kepada JDK.
@SpringBootTest class SbredisApplicationTests02 { //当你存储的value类型为对象类型使用redisTemplate //存储的value类型为字符串。StringRedisTemplate 验证码 @Autowired private RedisTemplate redisTemplate; @Test public void test01(){ //必须认为指定序列化方式 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class)); //对String类型操作类 ValueOperations forValue = redisTemplate.opsForValue(); //redis中key和value都变成了乱码 //key和value都没有指定序列化方式,默认采用jdk的序列化方式 forValue.set("k1","张三"); //value默认采用jdk,类必须实现序列化接口 forValue.set("k44",new User(1,"haha",12)); } }
RedisTemplate di atas perlu menentukan nilai kunci dan kaedah pesirisian medan setiap kali Bolehkah anda membuat kelas konfigurasi yang telah menetapkan pesirilan untuk RedisTemplate? Tidak perlu nyatakan jika digunakan kemudian.
rreeeeAtas ialah kandungan terperinci Bagaimana Java dan SpringBoot menggunakan redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!