-
介绍:
- redis 中没有使用 C 语言的字符串表示,而是自定义一个数据结构叫 SDS(simple dynamic string) 即简单动态字符串
- C 语言对字符串的存储是使用字符数组,遇到 '\0' 字符认为字符串结束,redis 的字符串可以存储任何类型的数据,因为任何类型数据都可以表示成二进制,sds 结构中的 charbuf[] 就是存储了二进制数据
- 二进制安全:存入什么数据取出的还是什么数据
- redis 中的 sbs 不像 C 语言处理字符串那样遇到 '\0' 字符认为结束,sbs 不会对存储的二进制数据进行处理,存入什么数据取出还是什么数据
- redis 中没有使用 C 语言的字符串表示,而是自定义一个数据结构叫 SDS(simple dynamic string) 即简单动态字符串
-
命令:
- 赋值与取值:
set key value get key #当键不存在时返回空结果 例: set name zhangsan get name
- 向尾部追加:
- append 的作用是向键值的末尾追加 value,如果键不存在则将该键的的值设置为 value,即相当于 set key value
- 返回的是追加后字符串的总长度
- 获取字符串长度
- strlen key:命令返回键值的长度,如果键不存在则返回 0
- 同时设置多个键值
mset key1 value1 key2 value2 … #获取多个 key mget key1 key2 key3…
- 应用:
package com.qcby.config.test; import com.qcby.config.RedisUtil; import org.junit.Test; import redis.clients.jedis.Jedis; public class StringTest { /** * string字符串 */ //应用1 @Test public void Hello(){ Jedis jedis = RedisUtil.getJedis(); try { //插入值 jedis.set("name","minxr"); System.out.println("插入数据" + jedis.get("name")); //追加数据 jedis.append("name","jintao"); System.out.println("追加后的数据:" + jedis.get("name")); //覆盖原来的数据 jedis.set("name","jintao"); System.out.println("被覆盖后的数据:" + jedis.get("name")); //删除数据 jedis.del("name"); System.out.println("被删除后的key:" + jedis.get("name")); //设置多个 key value jedis.mset("name","zhansan","sex","男"); System.out.println("获取多个key:" + jedis.mget("name","sex")); }catch (Exception e){ e.printStackTrace(); }finally { RedisUtil.closeJedis(jedis); } } //应用场景2 --- 清空数据库 @Test public void testKey(){ Jedis jedis = RedisUtil.getJedis(); //清空数据 System.out.println("是否清除成功:" + jedis.flushDB()); System.out.println(jedis.echo("foo")); //判断是否有当前 key System.out.println("是否有当前 key :" + jedis.exists("foo")); jedis.set("key","values"); System.out.println("设置的key:" + jedis.get("key")); //关闭资源 RedisUtil.closeJedis(jedis); } //场景3 @Test public void testString(){ Jedis jedis = RedisUtil.getJedis(); try { jedis.set("key","HelloWorld"); System.out.println("获取 key:" + jedis.get("key")); //清空数据 System.out.println("是否清除成功:" + jedis.flushDB()); //存储数据 jedis.set("foo","bar"); System.out.println("获取 foo:" + jedis.get("foo")); //若当前 key 不存在则存储值 jedis.setnx("foo","foo not exits"); System.out.println("获取 foo:" + jedis.get("foo")); //覆盖数据 jedis.set("foo","foo update"); System.out.println("获取覆盖的 foo:" + jedis.get("foo")); //追加数据 jedis.append("foo","Hello World"); System.out.println("追加后的 foo:" + jedis.get("foo")); //设置 key 的有效期,并存储数据 jedis.setex("foo",2,"foo not exits"); System.out.println("设置有效期的 foo:" + jedis.get("foo")); try { Thread.sleep(3000); }catch (Exception e){ } System.out.println(jedis.get("foo")); //获取并修改数据 jedis.set("name","name update"); System.out.println("获取并修改的 name:" + jedis.getSet("name","helllo")); //截取 value 值 System.out.println(jedis.getrange("foo",1,3)); System.out.println(jedis.mset("mset1","mvalue1","mset2","mvalue2","mset3","mvalue3","mset4","mvalue4")); System.out.println("获取多个 key:" + jedis.mset("mset1","mset2","mset3","mset4")); }catch (Exception e){ e.printStackTrace(); }finally { RedisUtil.closeJedis(jedis); } } }
- strlen key:命令返回键值的长度,如果键不存在则返回 0
- 赋值与取值: