redis使用实例分析-亚博电竞手机版

redis使用实例分析

这篇文章主要介绍“redis使用实例分析”,在日常操作中,相信很多人在redis使用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”redis使用实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

第一part:原生jedis连接redis

首先我们为要先了解,我们在原先使用mysql的时候,用jdbc连接数据库。同理这里我们连接redis,就要使用jedis。

第一步:新建java项目,导包

新建java项目,导包

redis.clientsjedis3.3.0com.alibabafastjson1.2.73

第二步:打开redis服务,写方法

打开redis服务

新建一个测试类,写一个方法

publicclassping{publicstaticvoidmain(string[]args){jedisjedis=newjedis("127.0.0.1",6379);system.out.println("连接成功");//查看服务是否运行system.out.println("服务正在运行:" jedis.ping());}}

证明连同了

第三步:简单操作

这里写一些简单的jedis对各种类型的操作

基本操作api

publicclasstestpassword{publicstaticvoidmain(string[]args){jedisjedis=newjedis("127.0.0.1",6379);//验证密码,如果没有设置密码这段代码省略//jedis.auth("password");jedis.connect();//连接jedis.disconnect();//断开连接jedis.flushall();//清空所有的key}}

对于key操作的命令

publicclasstestkey{publicstaticvoidmain(string[]args){jedisjedis=newjedis("127.0.0.1",6379);system.out.println("清空数据:" jedis.flushdb());system.out.println("判断某个键是否在:" jedis.exists("username"));system.out.println("新增<'username','kuangshen'>的键值对:" jedis.set("username","kuangshen"));system.out.println("新增<'password','password'>的键值对:" jedis.set("password","password"));system.out.print("系统中所有的键如下:");setkeys=jedis.keys("*");system.out.println(keys);system.out.println("删除键password:" jedis.del("password"));system.out.println("判断键password是否存在:" jedis.exists("password"));system.out.println("查看键username所存储的值的类型:" jedis.type("username"));system.out.println("随机返回key空间的一个:" jedis.randomkey());system.out.println("重命名key:" jedis.rename("username","name"));system.out.println("取出改后的name:" jedis.get("name"));system.out.println("按索引查询:" jedis.select(0));system.out.println("删除当前选择数据库中的所key:" jedis.flushdb());system.out.println("返回当前数据库中key的数目:" jedis.dbsize());system.out.println("删除所有数据库中的所有key:" jedis.flushall());}}

对string操作的命令

publicclassteststring{publicstaticvoidmain(string[]args){jedisjedis=newjedis("127.0.0.1",6379);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("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"));try{timeunit.seconds.sleep(3);}catch(interruptedexceptione){e.printstacktrace();}system.out.println(jedis.get("key3"));system.out.println("===========获取原值,更新为新值==========");system.out.println(jedis.getset("key2","key2getset"));system.out.println(jedis.get("key2"));system.out.println("获得key2的值的字串:" jedis.getrange("key2",2,4));}}

事务操作

publicclasstestmulti{publicstaticvoidmain(string[]args){//创建客户端连接服务端,redis服务端需要被开启jedisjedis=newjedis("127.0.0.1",6379);jedis.flushdb();jsonobjectjsonobject=newjsonobject();jsonobject.put("hello","world");jsonobject.put("name","java");//开启事务transactionmulti=jedis.multi();stringresult=jsonobject.tojsonstring();try{//向redis存入一条数据multi.set("json",result);//再存入一条数据multi.set("json2",result);//这里引发了异常,用0作为被除数inti=100/0;//如果没有引发异常,执行进入队列的命令multi.exec();}catch(exceptione){e.printstacktrace();//如果出现异常,回滚multi.discard();}finally{system.out.println(jedis.get("json"));system.out.println(jedis.get("json2"));//最终关闭客户端jedis.close();}}}

第二part:springboot整合redis

在springboot中一般使用redistemplate提供的方法来操作redis。
源码分析

@bean@conditionalonmissingbean(name={"redistemplate"})//我们可以自己定一个redistemplate来替换这个默认的!publicredistemplateredistemplate(redisconnectionfactoryredisconnectionfactory)throwsunknownhostexception{//默认的redistemplate没有过多的设置,redis对象都是需要序列化的//两个泛型都是object,object类型的,我们后续使用需要强制转换成redistemplatetemplate=newredistemplate();template.setconnectionfactory(redisconnectionfactory);returntemplate;}@bean@conditionalonmissingbeanpublicstringredistemplatestringredistemplate(redisconnectionfactoryredisconnectionfactory)throwsunknownhostexception{stringredistemplatetemplate=newstringredistemplate();template.setconnectionfactory(redisconnectionfactory);returntemplate;}

第一步:导入依赖

导入依赖

org.springframework.bootspring-boot-starter-data-redis

第二步:yml文件配置

yml文件配置

spring.redis.host=127.0.0.1spring.redis.port=6379

第三步:测试

测试

@springboottestclassredis02springbootapplicationtests{@autowiredprivateredistemplateredistemplate;@testvoidcontextloads(){redistemplate.opsforvalue().set("mykey","我是大帅哥");system.out.println(redistemplate.opsforvalue().get("mykey"));}}

第四步:自定义redistemplate

通过开头的源码可以看出,springboot自动帮我们在容器中生成了一个redistemplate和一个stringredistemplate。但是,这个redistemplate的泛型是,写代码不方便,需要写好多类型转换的代码;我们需要一个泛型为形式redistemplate。并且,这个redistemplate没有设置数据存在redis时,key及value的序列化方式。看到这个@conditionalonmissingbean注解后,就知道如果spring容器中有了redistemplate对象了,这个自动配置的redistemplate不会实例化。因此我们可以直接自己写个配置类,配置redistemplate。
自定义redistemplate

@configurationpublicclassredisconfig{@beanpublicredistemplateredistemplate(redisconnectionfactoryredisconnectionfactory)throwsunknownhostexception{redistemplatetemplate=newredistemplate();template.setconnectionfactory(redisconnectionfactory);//序列化配置jackson2jsonredisserializer

网站地图