博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将乱码后的中文作为key放入redis后,取值时找不到key该怎么弄
阅读量:6619 次
发布时间:2019-06-25

本文共 4028 字,大约阅读时间需要 13 分钟。

hot3.png

package com.redis.keynotfound;

import java.io.UnsupportedEncodingException;

import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;

import redis.clients.jedis.Builder;

import redis.clients.jedis.Client;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Response;
import redis.clients.jedis.Tuple;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.exceptions.JedisException;
import redis.clients.util.SafeEncoder;

public class TestKeyNotFound {

    private static Jedis jedis;

    private static Client client = null;

    protected static Pipeline pipeline = null;

    public static void initJedis() {

        jedis = new Jedis("127.0.0.1", 6379, 20000);
        client = jedis.getClient();
    }

    public Pipeline pipelined() {

        pipeline = new Pipeline();
        pipeline.setClient(client);
        return pipeline;
    }

    public static void main(String[] args) throws UnsupportedEncodingException {

        initJedis();

        jedis.select(2);

        // method1();

        method2();

    }

    /**

     * 将乱码后的中文放入redis-key中,该怎么取值
     *
     * UnsupportedEncodingException
     */
    private static void method1() throws UnsupportedEncodingException {
        addKeyToHash();
        // 根据key取出
        // 转为乱码格式的字符串
        String s = "天津";
        byte[] n2 = s.getBytes("gb2312");
        String gn2 = new String(n2, "utf-8");
        // 应该用对应的乱码去取
        Set<Tuple> res = jedis.zrangeWithScores("hot_projects_" + gn2, 0, -1);
        Iterator<Tuple> it = res.iterator();
        while (it.hasNext()) {
            Tuple t = it.next();

            System.out.println("element:" + t.getElement().toString() + ",score:" + t.getScore());

        }
    }

    private static void addKeyToHash() throws UnsupportedEncodingException {

        String name = "天津";
        // 插入一条
        byte[] n1 = name.getBytes("gb2312");
        String gn = new String(n1, "utf-8");
        System.out.println(gn);
        Map<String, Double> scoreMembers = new HashMap<String, Double>();
        scoreMembers.put("怡景花园", Double.valueOf(5000));
        scoreMembers.put("新福家园", Double.valueOf(500010));
        jedis.del("hot_projects_" + gn);
        jedis.zadd("hot_projects_" + gn, scoreMembers);
    }

    public static void method2() {

        String s = "hot_projects_" + "天津";
        byte[] ss = encode(s, "gb2312");
        s = SafeEncoder.encode(ss);
        Set<Tuple> res = zrangeWithScores(SafeEncoder.encode(s), 0, -1);
        for (Tuple t : res) {
            System.out.println("element:" + t.getElement().toString() + ",score:" + t.getScore());
        }
    }

    private static byte[] encode(final String str, String encodeType) {

        try {
            if (str == null) {
                throw new JedisDataException("value sent to redis cannot be null");
            }
            return str.getBytes(encodeType);
        } catch (UnsupportedEncodingException e) {
            throw new JedisException(e);
        }
    }

    private static Set<Tuple> zrangeWithScores(final byte[] key, final long start, final long end) {

        client.zrangeWithScores(key, start, end);
        return getTupledSet();
    }

    private static Set<Tuple> getTupledSet() {

        List<String> membersWithScores = client.getMultiBulkReply();
        if (membersWithScores == null) {
            return null;
        }
        if (membersWithScores.isEmpty()) {
            return Collections.emptySet();
        }
        Set<Tuple> set = new LinkedHashSet<Tuple>(membersWithScores.size() / 2, 1.0f);
        Iterator<String> iterator = membersWithScores.iterator();
        while (iterator.hasNext()) {
            set.add(new Tuple(iterator.next(), Double.valueOf(iterator.next())));
        }
        return set;
    }

    public class Queable {

        private Queue<Response<?>> pipelinedResponses = new LinkedList<Response<?>>();

        protected void clean() {

            pipelinedResponses.clear();
        }

        protected Response<?> generateResponse(Object data) {

            Response<?> response = pipelinedResponses.poll();
            if (response != null) {
                response.set(data);
            }
            return response;
        }

        protected <T> Response<T> getResponse(Builder<T> builder) {

            Response<T> lr = new Response<T>(builder);
            pipelinedResponses.add(lr);
            return lr;
        }

        protected boolean hasPipelinedResponse() {

            return !pipelinedResponses.isEmpty();
        }

        protected int getPipelinedResponseLength() {

            return pipelinedResponses.size();
        }
    }
}

 

转载于:https://my.oschina.net/iioschina/blog/857580

你可能感兴趣的文章
Spring常用配置解析
查看>>
React 应用的性能优化之路
查看>>
为什么云安全离不开“可视性即服务”
查看>>
创新就要像小孩一样思考
查看>>
Memcached+MySQL笔记
查看>>
Android UI 组件 TextView 及其子类
查看>>
解决SQL SERVER 2008数据库表中修改字段后不能保存
查看>>
PHP学习笔记【4】--apache服务器配置--配置虚拟目录和配置虚拟主机
查看>>
Linux性能优化 第一章 性能追踪建议
查看>>
mybatis 中oracle 批量新增三种方法
查看>>
SwipeListview拦截ViewPager滑动事件
查看>>
React学习日记
查看>>
Horizon 6.0 和 Virtual SAN:VMware 中的一组完美搭配
查看>>
Git常用命令
查看>>
jQuery属性选择器,选择带[]的属性
查看>>
javascript操作cookie函数写法
查看>>
扫描pdf转换成excel软件
查看>>
一看你就懂,超详细java中的ClassLoader详解
查看>>
一个21点游戏的设计与实现
查看>>
DICOM医学图像处理:深入剖析Orthanc的SQLite,了解WADO & RESTful API
查看>>