免费网站空间10g,电子商务之网站建设,系统开发师,wordpress自动生产在前面的学习中#xff0c;只是学习了各种redis的操作#xff0c;都是在redis命令行客户端操作的#xff0c;手动执行的#xff0c;更多的时候就是使用redis的api#xff08;#xff09;#xff0c;进一步操作redis程序。
在java中实现的redis客户端有很多#xff0c;…在前面的学习中只是学习了各种redis的操作都是在redis命令行客户端操作的手动执行的更多的时候就是使用redis的api进一步操作redis程序。
在java中实现的redis客户端有很多接下来我们将使用jedis在maven仓库下载jedis。 在depency这里引入依赖。并且需要修改外网ip连接到云服务器并且开启6379端口。 不能开放6379端口因为容易被黑客入侵所以我们需要配置ssh端口转发把云服务器的redis端口映射到本地主机。
ssh端口转发的配置
相当于通过ssh的22来传递其他端口的数据比如本身想要访问6379我们就构造一个ssh的数据报就要把访问redis请求放在数据报中通过比较安全的22端口交给云服务器服务器的程序就能解析该数据报然后交给6379端口。 但是这时候我们会在本地创建一个端口比如8888映射6379这个端口类似于在本地设立一个办事处我们访问8888也就是访问Linux的6379访问本地就是访问远程窗口。
话不多说我们进行一个简单的配置就可以把本地端口当成远程用。 打开属性点击添加在redis中进行如下配置最后点击连接。 最后在cmd中输入netstat -ano | findstr 8888查看是否连接好了。 接下来通过我们自己的127.0.0.1:8888就能操作redis了。
通过下列代码连接redis。
JedisPool jedisPoolnew JedisPool(tcp://127.0.0.1:8888);
接着再从池子中获取连接连接用完之后要记得关闭close此处的释放是把redis的连接放回池子中。
try(Jedis jedisjedisPool.getResource()){//接下来的命令就对应到redis的客户端操作了System.out.println(jedis.ping());} 在这里我们之前配置好了redis.conf的配置项。 get和set方法
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.params.SetParams;public class RedisDemo {public static void test(Jedis jedis){jedis.flushAll();jedis.set(key,111);jedis.set(key1,222);SetParams setParamsnew SetParams();setParams.ex(10);setParams.nx();jedis.set(key3,333,setParams);String key3 jedis.get(key3);System.out.println(key3);}public static void main(String[] args) {//连接redis服务器上面redis连接池。JedisPool jedisPoolnew JedisPool(tcp://127.0.0.1:8888);try(Jedis jedisjedisPool.getResource()){//接下来的命令就对应到redis的客户端操作了/*System.out.println(jedis.ping());*/test(jedis);}}
}在这个test方法中通过set和get方法创建和使用key并且我们还可以给key设定setParams可以设置其超时时间等。
exist和del
public static void test2(Jedis jedis){jedis.flushAll();jedis.set(key,111);jedis.set(key2,222);boolean result jedis.exists(key);System.out.println(result result);long delnum jedis.del(key2);System.out.println(delnum);}public static void main(String[] args) {//连接redis服务器上面redis连接池。JedisPool jedisPoolnew JedisPool(tcp://127.0.0.1:8888);try(Jedis jedisjedisPool.getResource()){//接下来的命令就对应到redis的客户端操作了/*System.out.println(jedis.ping());*//*test1(jedis);*/test2(jedis);}}
通过test2调用来获取key数据书否存在以及删除元素的操作来删除以及存在的元素返回的结果是删除的个数。 keys方法
public static void test3(Jedis jedis){jedis.set(key,111);jedis.set(key1,111);jedis.set(key2,111);jedis.set(key3,111);SetString keys jedis.keys(*);System.out.println(keys);}public static void main(String[] args) {//连接redis服务器上面redis连接池。JedisPool jedisPoolnew JedisPool(tcp://127.0.0.1:8888);try(Jedis jedisjedisPool.getResource()){//接下来的命令就对应到redis的客户端操作了/*System.out.println(jedis.ping());*//*test1(jedis);*//*test2(jedis);*/test3(jedis);}}
在这里通过接受并且打印set的方式在控制台打印set并且这里的key没有顺序。 expire和ttl
public static void test4(Jedis jedis){jedis.flushAll();jedis.set(key,111);jedis.expire(key,10);try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}long time jedis.ttl(key);System.out.println(time);}public static void main(String[] args) {//连接redis服务器上面redis连接池。JedisPool jedisPoolnew JedisPool(tcp://127.0.0.1:8888);try(Jedis jedisjedisPool.getResource()){//接下来的命令就对应到redis的客户端操作了/*System.out.println(jedis.ping());*//*test1(jedis);*//*test2(jedis);*/
// test3(jedis);test4(jedis);}}
通过expire设置过期时间以及通过ttl查看过期时间还剩下多少。
type
public static void test5(Jedis jedis){jedis.flushAll();jedis.set(key,111);String type jedis.type(key);System.out.println(type);}
通过如上方法打印type的类型到控制台由于没有过多设置这里默认是String类型。 mset和mget方法
public static void test(Jedis jedis){jedis.flushAll();jedis.mset(key,000,key1,111,key2,222,key3,333);ListString list jedis.mget(key, key1, key2);System.out.println(list);} 如果在mgetde过程中查询了一个不存在的key就会出现null的情况。 setrange和getrange方法
public static void test1(Jedis jedis){jedis.flushAll();jedis.set(key,asdfghjkl);String string jedis.getrange(key, 2, 5);System.out.println(string);jedis.setrange(key,2,asasa);String string1 jedis.get(key);System.out.println(string1);}
getrange获取指定区间的元素setrange从指定位置开始修改元素。 append
对key进行字符串拼接。
public static void test2(Jedis jedis){jedis.flushAll();jedis.set(key,111);jedis.append(key,asdfghjkl);String key jedis.get(key);System.out.println(key);} incr和decr
public static void test3(Jedis jedis){jedis.flushAll();jedis.set(key,100);long key jedis.incr(key);System.out.println(key);long key1 jedis.decr(key);System.out.println(key1);} 通过incr和decr来对指定的key中的数字加减。
list相关lpush,lrange等操作
public static void test(Jedis jedis){jedis.flushAll();jedis.lpush(key,111,222,333);ListString list jedis.lrange(key, 0, -1);System.out.println(list);}
头插法进行对头部插入。 集合类型sadd和smembers
public static void test(Jedis jedis){jedis.flushAll();jedis.sadd(key,111,222,333,444,555);SetString set jedis.smembers(key);System.out.println(set);boolean result jedis.sismember(key, 111);System.out.println(result);} 哈希类型的使用
public static void test1(Jedis jedis){jedis.flushAll();MapString,String fieldnew HashMap();field.put(f1,111);field.put(f2,222);jedis.hset(key,field);String hget jedis.hget(key, f1);System.out.println(hget);}
先构造一个哈希类型的field并且通过jedis来放置field。
Zset有序集合
public static void test(Jedis jedis){jedis.flushAll();jedis.zadd(key,10,lisi);MapString,Double mapnew HashMap();map.put(zhangsan,20.0);map.put(lisi,15.0);jedis.zadd(key,map);ListTuple key jedis.zrangeWithScores(key, 0, -1);System.out.println(key);System.out.println(key.get(0).getScore());System.out.println(key.get(0).getElement());} 在spring中配置redis
首先要在yml文件中配置以下配置。
spring:data:redis:port: 8888host: 127.0.0.1接着在xml文件中导入操作redis的依赖。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency
在controller中注入 StringRedisTemplate在java中我们是直接使用jedis来操作redis但是在spring中使用StringRedisTemplate是专门处理文本数据的。 AutowiredStringRedisTemplate stringRedisTemplate;
在StringRedisTemplate中做了进一步的封装可以得到专门操作某个数据结构的对象比如获得专门操作哈希的对象。
StringSpring版本 通过ops的方法来操作相应的对象。 Resourceprivate StringRedisTemplate stringRedisTemplate;RequestMapping(/test)public String test(){stringRedisTemplate.getConnectionFactory().getConnection().flushAll();stringRedisTemplate.opsForValue().set(key1,111);stringRedisTemplate.opsForValue().set(key2,222);stringRedisTemplate.opsForValue().set(key3,333);String string stringRedisTemplate.opsForValue().get(key1);System.out.println(string);return ok;}
执行redis原生命令excute redis留了一个后手能让我们随时执行redis原生命令。
stringRedisTemplate.execute((RedisConnection connection)-{connection.flushAll();return null;});
通过execute方法和lambda表达式来构建connection方法来调用flush方法就能够做到类似于在控制台上面操作程序。
ListSpring版本
public String testList(){stringRedisTemplate.execute((RedisConnection connection)-{connection.flushAll();return null;});stringRedisTemplate.opsForList().leftPush(key,111);String string stringRedisTemplate.opsForList().rightPop(key);System.out.println(string);return ok;}
SetSpring版本
public String testSet(){stringRedisTemplate.execute((RedisConnection connection)-{connection.flushAll();return null;});stringRedisTemplate.opsForSet().add(key,111,222,333);SetString key stringRedisTemplate.opsForSet().members(key);System.out.println(key);Boolean isexiststringRedisTemplate.opsForSet().isMember(key,111);System.out.println(isexist);return ok;}
Set操作和前面的List和String操作也很相似。这里我们就快速学习一下。 HashSpring版本
public String testHash(){stringRedisTemplate.execute((RedisConnection connection)-{connection.flushAll();return null;});stringRedisTemplate.opsForHash().put(key,f1,111);stringRedisTemplate.opsForHash().put(key,f2,222);stringRedisTemplate.opsForHash().put(key,f3,333);String value (String) stringRedisTemplate.opsForHash().get(key, f1);System.out.println(value);Boolean exist stringRedisTemplate.opsForHash().hasKey(key, f1);Long l stringRedisTemplate.opsForHash().size(key);System.out.println(l);return ok;} public String testZSet(){stringRedisTemplate.execute((RedisConnection connection)-{connection.flushAll();return null;});stringRedisTemplate.opsForZSet().add(key,zhangsan,10);stringRedisTemplate.opsForZSet().add(key,lisi,20);stringRedisTemplate.opsForZSet().add(key,wangwu,30);SetString key stringRedisTemplate.opsForZSet().range(key, 0, -1);System.out.println(key);SetZSetOperations.TypedTupleString key1 stringRedisTemplate.opsForZSet().rangeWithScores(key, 0, -1);System.out.println(key1);return ok;}