首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

java储存GBK编码数据到redis

2013-09-05 
java存储GBK编码数据到redis???? 项目中需要将oracle中的数据同步到redis中进行缓存,redis默认是UTF-8格式

java存储GBK编码数据到redis

?

??? 项目中需要将oracle中的数据同步到redis中进行缓存,redis默认是UTF-8格式缓存数据,同步工作是java工程来开发的,使用缓存的工程是C++写的,C++中使用缓存是直接将业务数据与缓存数据进行对比,然后处理。由于C++中业务数据是GBK,所以要求redis中必须以GBK格式来存储数据,原因是如果将redis的数据换成UTF-8,C++中就必须每次对数据进行转换,业务数据量大的话,对性能有影响。

??? 由于redis中存储多种数据,不可能因为一个业务将格式更改。所以只能是在存入数据时进行处理,由于数据是从oracle中获取,oracle是UTF-8编码,所以需要转码。

??? 解决方案如下:

//oracle查询ps = conn.prepareStatement(syncSql);rs = ps.executeQuery();//设置要处理的编码格式                Charset cs=Charset.forName("GBK");//通过数组处理        Map<byte[],byte[]> map =  new   HashMap<byte[],byte[]>();while (rs.next()) {try {                        //获得UTF-8编码字符串        String str = rs.getString("CODE");                           //使用Charset 处理                            CharBuffer cb = CharBuffer.wrap(str);                ByteBuffer bbf = cs.encode(cb);                        //去掉多余的数组长度                byte[] valueByte = new byte[bbf.limit()];                System.arraycopy(bbf.array(), 0, valueByte, 0, bbf.limit());                        //存储数据                        jedis.set(rs.getString("KEY").getBytes(), valueByte);                         

?

??? 这里有几点要注意:

????? 1. redis存储过程需要使用byte[],如果用字符串直接处理会导致1个GBK中文变成6个字节。

????? 2. byte[]数组在操作时处理长度要通过limit()方法来去掉多余字节。

?

热点排行