脱离字符集编码 谈这个问题没什么实际意义
我不知道你讲的Java 中汉字是几个字节具体是什么意思
Java 中 Character 采用的是 utf-16 编码,那么就是两个字节(0----65535),所以,字符类型只能表示一部分汉字而已,因为,二个字节最多只可以表示 65536 种可能。
讨论汉字占用几个字节,要建立在字符集与其对应的编码格式上。
gb2312(字符集/编码方式) 中,汉字占二个字节。
而在 Unicode 字符集中,出现了不同的编码方式(不再同 ASCII gbk 那种一一对应字符集的实现),UTF-8 utf-16 utf-32 都是 Unicode 字符集具体编码实现方式。在 utf-8 中,汉字可能占用 3 或者 4 个字节。在 utf-16 中,汉字可能占用 2 或者 4 个字节。在 utf -32 中,汉字占用 4 个字节。
简单理解,字符集定义好接口,编码方式即具体接口实现。到 Unicode 之后,出现了一对多的接口实现方式。
Redis 具体不太清楚。
关于字符集与编码知识,推荐看 @笨笨阿林 专栏。