首页 文章 精选 留言 我的

精选列表

搜索[列存储],共10000篇文章
优秀的个人博客,低调大师

redis是如何存储对象和集合的

在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术。前者主要是为了减轻数据库压力,大幅度提升性能。后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异步),并且像ribbmitmq等消息队列有重试机制等功能。 这里主要讲redis如何把对象,集合存入,并且取出. 1.在启动类上加入如下代码 private Jedis jedis; private JedisPoolConfig config; private JedisShardInfo sharInfo; @Bean public Jedis jedis(){ //连接redis服务器,192.168.0.100:6379 // jedis = new Jedis("192.168.0.100", 6379); // //权限认证 // jedis.auth("123456"); // 操作单独的文本串 config = new JedisPoolConfig(); config.setMaxIdle(1000);//最大空闲时间 config.setMaxWaitMillis(1000); //最大等待时间 config.setMaxTotal(500); //redis池中最大对象个数 sharInfo = new JedisShardInfo("192.168.0.100", 6379); sharInfo.setPassword("123456"); sharInfo.setConnectionTimeout(5000);//链接超时时间 jedis = new Jedis(sharInfo); return jedis; } 2.在application.yml当中加入redis配置 spring: redis: database: 0 host: 101.132.191.77 port: 6379 password: 123456 pool: max-idle: 8 #连接池最大连接数(使用负值表示没有限制) min-idle: 0 # 连接池中的最小空闲连接 max-active: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1 # 连接池中的最大空闲连接 timeout: 5000 # 连接超时时间(毫秒) 3..新建SerializeUtil类,这个类主要是为了将对象序列化redis当中 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; /** * @author Administrator * */ public class SerializeUtil { public static byte[] serialize(Object object) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { // 序列化 baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); byte[] bytes = baos.toByteArray(); return bytes; } catch (Exception e) { } return null; } public static Object unserialize( byte[] bytes) { ByteArrayInputStream bais = null; try { // 反序列化 bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); } catch (Exception e) { } return null; } } 4.我封装了一个RedisServiceImpl类,主要是用对redis设值和取值 redisServiceImpl.set主要是传object,setStr主要设置string import com.ys.util.redis.SerializeUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import redis.clients.jedis.Jedis; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @Service public class RedisServiceImpl { @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private Jedis jedis; public void setStr(String key, String value) { setStr(key, value, null); } public void setStr(String key, Object value, Long time) { if(value == null){ return; } if(value instanceof String){ String obj = (String) value; stringRedisTemplate.opsForValue().set(key, obj); }else if(value instanceof List){ List obj = (List) value; stringRedisTemplate.opsForList().leftPushAll(key,obj); }else if(value instanceof Map){ Map obj = (Map) value; stringRedisTemplate.opsForHash().putAll(key,obj); } if (time != null) stringRedisTemplate.expire(key, time, TimeUnit.SECONDS); } public Object getKey(String key) { return stringRedisTemplate.opsForValue().get(key); } public void delKey(String key) { stringRedisTemplate.delete(key); } /**set Object*/ public String set(String key,Object object) { return jedis.set(key.getBytes(), SerializeUtil.serialize(object)); } /**get Object*/ public Object get(String key) { byte[] value = jedis.get(key.getBytes()); return SerializeUtil. unserialize(value); } /**delete a key**/ public boolean del(String key) { return jedis.del(key.getBytes())>0; } } 5.测试redis是否ok,编写redisController类 import com.ys.service.impl.RedisServiceImpl; import com.ys.vo.IqProduct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.Date; import java.util.List; @RestController public class RedisServiceController { @Autowired private RedisServiceImpl redisService; @RequestMapping(value = "/setredis") public String setredis(String keyredis){ redisService.setStr(keyredis,"2018年1月26日"); return "保存成功,请访问getredis查询redis"; } @RequestMapping(value = "/setObj") public String setObj(String keyredis){ IqProduct iqProduct = new IqProduct(); iqProduct.setSort(1); iqProduct.setTimestamp(new Date().getTime()); iqProduct.setProductName("productname"); // list.add(iqProduct); redisService.set(keyredis, iqProduct); return "保存成功,请访问getredis查询redis"; } @RequestMapping(value = "/getObj") public Object getObj(String keyredis){ Object object = redisService.get(keyredis); if(object !=null){ IqProduct iqProduct = (IqProduct) object; System. out.println(iqProduct.getProductName()); System. out.println(iqProduct.getId()); System. out.println(iqProduct.getTimestamp()); } return object; } @RequestMapping(value = "/delObj") public boolean delObj(String keyredis){ boolean del = redisService.del(keyredis); return del; } @RequestMapping(value = "/getredis") public String getredis(String keyredis){ String getredis = (String) redisService.getKey(keyredis); return "redis的key是===>"+getredis; } @RequestMapping(value = "/delredis") public String delredis(String keyredis){ redisService.delKey(keyredis); return "删除成功,请通过getredis进行查询"; } @RequestMapping(value = "/setList") public String setList(String keyredis){ List list = new ArrayList(); for (int i = 0;i<10;i++){ IqProduct iqProduct = new IqProduct(); iqProduct.setSort(1); iqProduct.setTimestamp(new Date().getTime()); iqProduct.setProductName("productname"); list.add(iqProduct); } redisService.set(keyredis, list); return "保存成功,请访问getredis查询redis"; } @RequestMapping(value = "/getList") public Object getList(String keyredis){ Object object = redisService.get(keyredis); if(object !=null){ List<IqProduct> iqProducts = (List<IqProduct>) object; for (int i = 0;i<iqProducts.size();i++){ IqProduct iqProduct = iqProducts.get(i); System. out.println(iqProduct.getProductName()); System. out.println(iqProduct.getId()); System. out.println(iqProduct.getTimestamp()); } } return object; } @RequestMapping(value = "/delList") public boolean delList(String keyredis){ boolean del = redisService.del(keyredis); return del; } } 6.测试结果 image.png 7.参考文章 Springboot+Redis 配置和使用 关注编程软文,回复领取资源.免费获得大礼包.提供一个平台,让志同道合的人可以走在一起,让我们一起进步。

优秀的个人博客,低调大师

Linux系统挂载USB存储只读改成读写

1、mount: 用于查看哪个模块输入只读,一般显示为: [root@localhost ~]# mount /dev/cciss/c0d0p2 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/cciss/c0d0p7 on /home type ext3 (rw) /dev/cciss/c0d0p6 on /var type ext3 (rw) /dev/cciss/c0d0p3 on /usr type ext3 (rw) /dev/cciss/c0d0p1 on /boot type ext3 (rw) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/dm-0 on /home/book/upload/BookFile1 type ext3 (rw) /dev/dm-1 on /home/book/upload/BookFile2 type ext3 (rw) /dev/dm-2 on /backup type ext3 (rw) /dev/dm-3 on /home/book/upload/BookFile3 type ext3 (ro) 2、如果发现有ro,就重新mount,或者umount以后再remount 3、umount /dev/dm-3 如果发现有提示“device is busy”,找到是什么进程使得他busy fuser -m /mnt/data 将会显示使用这个模块的pid fuser -mk /mnt/data 将会直接kill那个pid 然后重新mount即可。 4、还有一种方法是直接remount,命令为 mount -o rw,remount /mnt/data。 当系统出现故障进入单用户模式时,通常/分区(根分区)会以只读方式mount,这时候如果只是对其他磁盘执行fsck当然没有问题,但是如果想要修改文件,会发现所有文件都是只读状态,无法修改。好在Linux下的mount命令支持一个remount选项,只需要执行如下命令: mount / -o rw,remount 就可以将根分区重新mount为读写状态,从而可以完成必要的系统配置修改。

优秀的个人博客,低调大师

python+ueditor+七牛云存储整合

开发环境:python pyramid。 參考网址:http://developer.qiniu.com/docs/v6/sdk/python-sdk.html,http://my.oschina.net/duoduo3369/blog/174655 项目中要将ueditor集成到站点,可是图片上传有问题。于是採取client(终端用户) => 七牛 => 业务server的方式来处理图片。具体的流程这篇文章写的非常清楚:http://my.oschina.net/duoduo3369/blog/174655,只是是java的,并且也没做图片显示的处理。 整个流程例如以下: 下面是几个关键步骤: 签名生成token 配置项目服务端请求路径:/ueditor/uptoken用来生成uptoken。 @view_defaults(route_name='ueditor') class UeditorView(object): def __init__(self, request): self.request = request self.db = request.db qiniu.conf.ACCESS_KEY = "your access_key" qiniu.conf.SECRET_KEY = "your secret_key" self.bucket_name="你的七牛空间名" @view_config(renderer='jsonp', match_param=('action=uptoken')) def uptoken(self): policy = qiniu.rs.PutPolicy(self.bucket_name) token= policy.token() return dict(token=token) @view_config(renderer='jsonp', match_param=('action=imgmanage')) def imgmanage(self): pass 另一个/ueditor/imgmanage用来图片管理的,这个临时没做。使用前先用easy_install安装qiniu的包并import一下。 配置ueditor上传请求 我用的版本号是ueditor1_2_6_1-jsp-utf8版本号。要修改的是dialogs/image/image.html文件: 在body里面加入一个表单,用来向七牛server上传token: <input id="qiniu_token" type="hidden" name="token" /> 在javascript标签中增加下面代码用来向项目server获取uptoken: $(function(){ $.get("/ueditor/uptoken", function(data) { $("#qiniu_token").val(data["token"]); }); }); 然后在上传button点击事件$G("upload").onclick中加入token參数: var postParams = { "dir":baidu.g("savePath").value, "token":$("#qiniu_token").val()//for qiniu yun token }; 还须要改ueditor下的ueditor.config.js文件,在window.UEDITOR_CONFIG配置中改动图片上传配置: window.UEDITOR_CONFIG = { //为编辑器实例加入一个路径。这个不能被凝视 UEDITOR_HOME_URL : URL //图片上传配置区 ,imageUrl:"http://up.qiniu.com/" //图片上传提交地址 ,imagePath:"http://shikeim.qiniudn.com/" //图片修正地址。这是七牛云应用空间的地址 ,imageFieldName:"file"//七牛结合须要改成file这样图片就能够正常上传到七牛云server了。 在ueditor中显示图片 调试了好久,发现image.html以下有个回调函数对象callbacks。这是上传成功的回调函数: // 单个文件上传完毕的回调 uploadCompleteCallback: function(data){ try{ var info = eval("(" + data.hash + ")"); info && imageUrls.push(info); selectedImageCount--; }catch(e){ console.log("excetion!up load failed..."); } }, 但其实七牛云图片上传成功了,响应的却是uploadErrorCallback上传失败回调函数。于是将原来的uploadErrorCallback凝视掉,自己又一次写了个: //qiniu yun 上传... uploadErrorCallback: function(data){ try{ var info = eval("(" + data.info + ")"); imgurl={normal:info['hash'],small:info['hash']+'-small'}; imageUrls.push(imgurl); // console.log(imageUrls); selectedImageCount--; }catch(e){ console.log("excetion!up load failed..."); } },imgurl就是七牛云返回的server端图片文件名称。我在七牛云上做了配置上传的图片有原版normal。还有缩略图版small。这两个都返回了。便于编辑器处理。 改完之后发现图片能插入了,可是无法正确显示,审查元素发现是图片名undefined。于是又看image.js的源代码,发现插入图片的是insertBatch函数,于是就该了下: /** * 插入多张图片 */ function insertBatch() { if (imageUrls.length < 1) return; var imgObjs = [], align = findFocus("localFloat", "name"); for (var i = 0, ci; ci = imageUrls[i++];) { var tmpObj = {}; console.log(ci); tmpObj.title = ci.title; tmpObj.floatStyle = align; //修正显示时候的地址数据,假设后台返回的是图片的绝对地址,那么此处无需修正 tmpObj._src = tmpObj.src = editor.options.imagePath + ci.small;//这里使用缩略图 imgObjs.push(tmpObj); } insertImage(imgObjs); hideFlash(); }至此图片上传成功集成。只是另一些小细节须要完好。 总结 有问题先网上查。查的目的不是找答案,而是找思路。明确思路后看文档,答案都在源代码中。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5096223.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android笔记:存储相关,getExternalCacheDir, getExternalFilesDir,getExternalSto...

1 2 3 4 5 6 7 8 9 10 11 12 13 FilecacheDir=mContext.getExternalCacheDir(); if ( null !=cacheDir){ mCacheDirPath=cacheDir.getAbsolutePath()+ "/images/" ; } if (TextUtils.isEmpty(mCacheDirPath)){ if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){ mCacheDirPath=Environment.getExternalStorageDirectory().getPath()+ "/Android/data/com.meiyaapp.meiya/cache/images/" ; } else { Toast.makeText(mContext, "SD卡状态错误,请调整后重试哦。" ,Toast.LENGTH_SHORT).show(); } } 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1699245,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册