redis关于string的常用命令
【补】对于json数据的存储对于hyperloglog的应用 pfadd user mango (integer) 1 pfadd user zhangsan (integer) 1 pfadd user lisi (integer) 1 pfadd user mango #重复则不计数 (integer) 0 pfcount user (integer) 3 pfadd paper mango (integer) 1 pfadd paper zhangsan (integer) 1 pfmerge pv user paper #合并 OK pfcount pv (integer) 3 3.keys 表达式例如* 的应用用于查看所有数据类型的key不关注value但是如果key信息过多将会造成长期阻塞4.scan 0[match 表达式例如*] [count num单次建议获取元素数量仅是建议返回数量可能多或少]的应用为了解决keys的阻塞问题产生了 scan 指令即根据下标分片查询每次查询会返回客户端一个下标和查询结果然后客户端根据下标重复查询直到返回结果的下标是0这代表遍历了一遍但是并不会保证其中的原子性即中间发生增删会导致整个查询结果的key数据漏查或者重复因此仅适用于弱一致性的场景。1、对String类型的操作1.1、get、set、del获取key的值、设置key的值、删除key的值操作如下Java代码示例如下1 import redis.clients.jedis.Jedis; 2 3 /** 4 * redis中对于字符串类型的: get、set、del 操作示例 5 */ 6 public class String_get_set_del_operation { 7 8 public static void main(String[] args) { 9 Jedis jedis new Jedis(127.0.0.1,6379); 10 /** 11 * 示例1 相当于执行 set k1 v1 12 */ 13 String set jedis.set(k1, 1); 14 System.out.println(set set); 15 System.out.println(); 16 17 /** 18 * 示例2 相当于执行 get k1 19 */ 20 String k1 jedis.get(k1); 21 System.out.println(k1 k1); 22 System.out.println(); 23 24 /** 25 * 示例3相当于执行 del k1 26 */ 27 Long delk1 jedis.del(k1); 28 System.out.println(delk1 delk1); 29 } 30 }1.2、incr、decr递增和递减整数值格式是incr key值操作如下Java代码示例如下1 /** 2 * redis中对于字符串类型的: incr、decr 操作示例 3 */ 4 public class String_incr_decr_operation { 5 6 public static void main(String[] args) { 7 Jedis jedis new Jedis(127.0.0.1,6379); 8 /** 9 * 示例1 相当于执行 incr k1 10 */ 11 Long incrk1 jedis.incr(k1); 12 System.out.println(incr k1 incrk1); 13 14 System.out.println(); 15 16 /** 17 * 示例2 相当于执行 decr k1 18 */ 19 Long decrk1 jedis.decr(k1); 20 System.out.println(decr k1 decrk1); 21 } 22 }1.3、incrby、decrby递增和递减整数值可指定增减的数值格式是incrby key值 正负数操作如下Java代码示例如下1 /** 2 * redis中对于字符串类型的: incrby、decrby 操作示例 3 */ 4 public class String_incrby_decrby_operation { 5 public static void main(String[] args) { 6 Jedis jedis new Jedis(127.0.0.1,6379); 7 /** 8 * 示例1 相当于执行 incrBy k1 v1 9 */ 10 Long incrBy jedis.incrBy(k1,4); 11 System.out.println(incrBy incrBy); 12 13 System.out.println(); 14 15 /** 16 * 示例2 相当于执行 decrBy k1 v1 17 */ 18 Long decrBy jedis.decrBy(k1,2); 19 System.out.println(decrBy decrBy); 20 } 21 }1.4、incrbyfloat递增和递减浮点数格式是incrbyfloat key值 正负数值操作如下Java代码示例如下1 import redis.clients.jedis.Jedis; 2 3 /** 4 * redis中对于字符串类型的: incrbyfloat操作示例 5 */ 6 public class String_incrbyfloat_operation { 7 public static void main(String[] args) { 8 Jedis jedis new Jedis(127.0.0.1,6379); 9 /** 10 * 示例1 相当于执行 incrbyfloat k1 v1 11 */ 12 Double incrByFloat1 jedis.incrByFloat(k1, 4.2); 13 System.out.println(incrByFloat1 incrByFloat1); 14 15 16 Double incrByFloat2 jedis.incrByFloat(k1, -2.2); 17 System.out.println(incrByFloat2 incrByFloat2); 18 19 } 20 }1.5、append在尾部追加值格式是append key值 追加的值操作如下Java代码示例如下1 /** 2 * redis中对于字符串类型的: append操作示例 3 */ 4 public class String_append_operation { 5 6 public static void main(String[] args) { 7 Jedis jedis new Jedis(127.0.0.1,6379); 8 /** 9 * 示例1 相当于执行 append k1 v1 10 */ 11 Long append jedis.append(k1, 1); 12 System.out.println(append append); 13 } 14 }1.6、getrange格式getrange key startOffset endOffset功能获取指定索引范围内的值Java代码示例如下1 import redis.clients.jedis.Jedis; 2 3 /** 4 * redis中对于字符串类型的: getrange操作示例 5 */ 6 public class String_getrange_operation { 7 public static void main(String[] args) { 8 Jedis jedis new Jedis(127.0.0.1,6379); 9 /** 10 * 示例1 相当于执行 getrange k1 start end 11 */ 12 String k1 jedis.getrange(k1, 0, -1); 13 System.out.println(k1 k1); 14 15 String k11 jedis.getrange(k1, 1, 5); 16 System.out.println(k11 k11); 17 18 } 19 }setrange格式setrange key offset replaceWord功能用新字符串覆盖原字符串的指定偏移量以及后面部分的字符先设置一个键值对 SET key1 Hello World 从偏移量 6即第7个字符原字符串中的 W开始用 Redis 覆盖原字符串的对应部分 SETRANGE key1 6 Redis 修改后的值 Hello Redis1.7、strlen返回键值的长度格式是strlen key值操作如下Java代码示例如下1 import redis.clients.jedis.Jedis; 2 3 /** 4 * redis中对于字符串类型的: strlen操作示例 5 */ 6 public class String_strlen_operation { 7 public static void main(String[] args) { 8 Jedis jedis new Jedis(127.0.0.1,6379); 9 /** 10 * 示例1 相当于执行 strlen k1 11 */ 12 Long k1 jedis.strlen(k1); 13 System.out.println(k1 k1); 14 } 15 }1.8、mget、mset同时获取多个键的值、同时设置多个键的值格式为mget 多个key值、mset key值 value(key和value可以是多对)操作如下Java代码示例如下1 import redis.clients.jedis.Jedis; 2 3 import java.util.List; 4 5 /** 6 * redis中对于字符串类型的: mget mset 操作示例 7 */ 8 public class String_mget_mset_operation { 9 public static void main(String[] args) { 10 Jedis jedis new Jedis(127.0.0.1,6379); 11 /** 12 * 示例1 相当于执行 mget k1 k2 k3 k4 13 */ 14 ListString mget jedis.mget(k1, k2, k3, k4); 15 mget.stream().forEach(System.out::println); 16 17 String mset jedis.mset(k1, 1, k2,2,k3,3); 18 System.out.println(mset mset); 19 20 mget jedis.mget(k1, k2, k3, k4); 21 mget.stream().forEach(System.out::println); 22 } 23 }1.9、bitcount获取范围内为1的二进制个数格式是bitcount key [start end] (获取字符串第start索引位 - 第end索引位的字符串中为1的二进制个数)操作如下# 设置一个多字节字符串 AB SET mykey AB # A 0x41 01000001 (2个1) # B 0x42 01000010 (2个1) # 整个字符串共 4 个 1 # 只统计第 1 - 第 1 个字节字符 A BITCOUNT mykey 0 0 # 只统计倒数第 1 - 倒数第 1 个字节字符 B BITCOUNT mykey -1 -1 # 只统计倒数第 2 - 倒数第 1 个字节字符 AB BITCOUNT mykey -2 -1Java代码示例如下1 import redis.clients.jedis.Jedis; 2 3 /** 4 * redis中对于字符串类型的: bitcount 操作示例 5 */ 6 public class String_bitcount_operation { 7 8 public static void main(String[] args) { 9 /** 10 * 获取字母a对应的二进制 11 */ 12 byte[] bytes a.getBytes(); 13 String s Integer.toBinaryString(bytes[0]); 14 System.out.println(s s); 15 16 Jedis jedis new Jedis(127.0.0.1,6379); 17 /** 18 * 示例1 相当于执行 bitcount k1[start end] 19 */ 20 String set jedis.set(k1, a); 21 Long bitcount jedis.bitcount(k1); 22 System.out.println(bitcount bitcount); 23 24 /** 25 * 因为 k1对应的value是a只有一个长度 26 */ 27 Long bitcount2 jedis.bitcount(k1, 0, 2); 28 System.out.println(bitcount2 bitcount2); 29 30 } 31 }1.10、getbit、setbit获取指定位置的二进制位的值、设置指定位置的二进制位的值格式是getbit key值 offset索引、setbit key值 offset索引 值操作如下getbit key值 offset索引字母a对于的二进制位01100001setbit key值 offset索引 值因为字母b的二进制位01100010,我们只要把字母a的二进制的第7位设置为0、第六位设置为1就可以等到一个字母b了。Java代码示例如下1 import redis.clients.jedis.Jedis; 2 3 /** 4 * redis中对于字符串类型的: getbit、setbit 操作示例 5 */ 6 public class String_getbit_setbit_operation { 7 public static void main(String[] args) { 8 /** 9 * 获取字母a对应的二进制 10 */ 11 byte[] bytes a.getBytes(); 12 String s Integer.toBinaryString(bytes[0]); 13 System.out.println(s s); 14 15 Jedis jedis new Jedis(127.0.0.1,6379); 16 /** 17 * 示例1 相当于执行 getbit k1 1 18 */ 19 String set jedis.set(k1, a); 20 Boolean getbit jedis.getbit(k1, 1); 21 System.out.println(getbit getbit); 22 23 /** 24 * 示例2相当于执行 setbit k1 7 0 / setbit k1 6 1 25 */ 26 jedis.setbit(k1,7l,0); 27 jedis.setbit(k1,6l,1); 28 String k1 jedis.get(k1); 29 System.out.println(k1 k1); 30 } 31 }1.11、bitop对多个二进制位进行位操作格式是bitop 操作 目的key key值1 key值2操作有and、or、xor、not。 key值可以有多个value的编码是ascii编码中的字符集数值也是字符集操作如下a --- 01100001b --- 011000100 --- 00110000并非000000001.14、bitcount统计指定字符串二进制中1的个数格式是bitcount key [startOffset] [count]# 设置一个包含 AASCII 码 65二进制 01000001的键 SET mykey ABCDA # 统计整个字符串中比特为 1 的数量 BITCOUNT mykey# 设置一个多字节字符串 AB SET mykey AB # A 0x41 01000001 (2个1) # B 0x42 01000010 (2个1) # 整个字符串共 4 个 1 # 只统计第 1 个字节字符 A BITCOUNT mykey 0 0 # 只统计倒数第 1 个字节字符 B BITCOUNT mykey -1 -1操作如下1.13、getset原子的设置key的值并返回key的旧值格式是getset key value操作如下Java代码示例如下1 import redis.clients.jedis.Jedis; 2 3 /** 4 * redis中对于字符串类型的: getset 操作示例 5 */ 6 public class String_getset_operation { 7 public static void main(String[] args) { 8 Jedis jedis new Jedis(127.0.0.1,6379); 9 /** 10 * 示例1 相当于执行 getSet k1 v1 11 */ 12 String getSet jedis.getSet(k1, 111); 13 System.out.println(getSet getSet); 14 15 System.out.println(); 16 } 17