Redis学习 第3课 Redis的数据类型

时间:2020-03-24 10:59 作者:kristenlee1218 阅读数:42

1、Redis的五大数据类型

(1)、String(字符串)

string是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value、string类型是二进制安全的。意思是Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。

string类型是Redis最基本的数据类型, 一个Redis中String的value最多可以是512M


(2)、Hash(哈希、类似于Map)

Hash(哈希)

Redis hash 是一个键值对集合

Redis hash是一个到string类型的field和value叫映射表,hash特别适合用于存储对象,

类似Java里面的Map<String,Object>


(3)、List(列表)

List (列表)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

它的底层实际是个链表


(4)、Set(集合)

Set (集合)

Redis的Set是string类型的无序集合。它是通过HashTable实现的


(5)、Zset(sorted set:有序集合)

zset(sorted set ,有序集合)

Redis zset和set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。

redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score) 却可以重复


2、哪里去获得redis常见数据类型操作命令

http://redisdc.com/


3、Redis的Key(键)

(1)、keys * 

查看所有的keys


jedis操作:

jedis.keys("*");


(2)、exists key的名字、判断某个key是否存在

如果写java代码、返回1则是存在、返回0则是不存在

image.png


jedis操作:

jedis.exists("k1");


(3)、move key db

将某个key移动到其他的库中、当前库就没有了、就被移除了

image.png


jedis操作:

jedis.move("k3", 1);


(4)、expire key 秒钟

为给定的key设置过期时间、终结了之后key就要被移除内存系统

image.png


jedis操作:

jedis.expireAt("k2", 5);


(5)、ttl key

查看还有多少秒过期、-1表示永远不会过期、-2表示已经过期了

image.png


jedis操作:

jedis.ttl("k2");


(6)、type key

查看key的类型

image.png


jedis操作:

jedis.type("k1");


(7)、在库中重复插入值

会被覆盖而不是出错

image.png


jedis操作:

jedis.set("k2", "2");

jedis.get("k2");


4、Redis的string

单值单value

(1)、set/get/del/append/strlen

append与strlen

image.png


jedis操作:

jedis.append("k1", "AppendK1Test");


(2)、incr/decr/incrby/decrby

incr:单步递增

image.png


jedis操作:

jedis.incr("k2");


decr:单步递减

image.png


jedis操作:

jedis.decr("k2");


incrby:多步递增

image.png


jedis操作:

jedis.incrBy("k2", 2);


decrby:多步递减

image.png


jedis操作:

jedis.decrBy("k2", 2);


(3)、getrange/setrange

getrange:获取指定区间的值

image.png


jedis操作:

jedis.getrange("k1", 1, 3);

jedis.getrange("k1", 0, -1);


setrange:设置指定区间的值

image.png


jedis操作:


(4)、setex(set with expire)键秒值/setnx(set if no exist)

setex:设置过期时间

image.png


jedis操作:

jedis.setex("k4", 5, "v4");

jedis.ttl("k4");


setnx:如果key不存在才起效(避免了覆盖问题)

k1已经存在、k1没有被覆盖

image.png


jedis操作:

jedis.setnx("k5", "v5");


(5)、mset/mget/msetnx

mset/mget:m=more

(注意:mset的顺序是键、值)

image.png


jedis操作:

jedis.mset("k6","v6","k7","v7","k8","v8");

jedis.mget("k1","k2","k3");


msetnx:必须全不存在才能成功

image.png


jedis操作:

jedis.msetnx("k9","v9","k10","v10","k11","v11");


都不存在的k4、k5可以成功

image.png


(6)、getset(先get后set)

Redis Getset 命令用于设置指定 key 的值,并返回 key 的旧值

image.png


jedis操作:

jedis.getSet("k1", "hfjskdhfkjsdh");


5、Redis的List(列表)

单值多value

(1)、lpush/rpush/lrange/lindex

lpush与lrange:

左边是正进反出

image.png


jedis操作:

jedis.lpush("list01","test1");

jedis.lpush("list01","test2");

jedis.lpush("list01","test3");

jedis.lrange("list01", 0, -1);


rpush与lrange:

左边是正进正出

image.png


jedis操作:

jedis.rpush("list02","test1");

jedis.rpush("list02","test2");

jedis.rpush("list02","test3");

jedis.lrange("list02", 0, -1);


lrange:

lrange list01 0 -1(0到-1参数是表示显示全部)

image.png


jedis操作:

jedis.lrange("list01", 0, -1);

jedis.lrange("list02", 0, -1);


lindex:

先查询list01、list02的全部元素

image.png


lindex就是寻找下标的值

image.png


jedis操作:

jedis.lindex("list01", 1);


(2)、lpop/rpop

image.png


jedis操作:

jedis.lpop("list01");

jedis.lpop("list02");


(3)、llen

查询长度

image.png


jedis操作:

jedis.llen("list01");

jedis.llen("list01");


(4)、lrem key 删除n个value

image.png


jedis操作:

jedis.lrem("list03", 4, "1");

jedis.lrange("list03", 0, -1);


(5)、ltrim key 开始index 结束index

截取指定范围的值后再赋值给key

image.png


jedis操作:

jedis.ltrim("list01", 0, 1);

jedis.lrange("list01", 0, -1);


(6)、rpoplpush 源列表 目的列表

用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。

image.png


jedis操作:

jedis.rpoplpush("list01", "list02");

jedis.lrange("list02", 0, -1);


(7)、lset key index value

在指定位置插入值

image.png


jedis操作:

jedis.lset("list03", 2, "x");

jedis.lrange("list03", 0, -1);


(8)、linsert key before/after value1 value2

image.png


jedis操作:

jedis.linsert("list03", LIST_POSITION.BEFORE, "3", "test");

jedis.lrange("list03", 0, -1);


(9)、性能总结

它是一个字符串链表,left、right都可以插入添加

如果键不存在,创建新的链表

如果键己存在,新增内容

如果值全移除,对应的键也就消失了。

链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了


6、Redis的Set(集合)

单值多value


(1)、sadd/smembers/sismember

sadd/smembers:

集合是不重复的

image.png


jedis操作:

jedis.sadd("set01", "1", "2", "3");

jedis.smembers("set01");


sismember:

查看set中是否有这个元素

image.png


jedis操作:

jedis.sismember("set01", "1");


(2)、scard

获取集合里面的元素个数

image.png


jedis操作:

jedis.scard("set01");


(3)、srem key value

删除集合中元素

image.png


jedis操作:

jedis.srem("set01", "1");

jedis.sismember("set01", "1");



(4)、srandmember set key

某个整数(随机出几个数)

image.png


jedis操作:

jedis.srandmember("set01");


(5)、spop key

随机找出

image.png


jedis操作:

jedis.spop("set01");


(6)、smove key1 key2

将key1里面的某个值赋给key2

image.png


jedis操作:

jedis.smove("set01", "set02", "6");


(7)、数学集合

a、差集sdiff set1 set2

谁在前边谁是参照

image.png


jedis操作:

jedis.sdiff("set02", "set01");


b、交集sinter set1 set2

image.png


jedis操作:

jedis.sinter("set01", "set02");


c、并集sunion set1 set2

image.png


jedis操作:

jedis.sunion("set01", "set02");


7、Redis的Hash(哈希、类似于Map)

KV模式不改变、但V是一个键值对

(1)、hset/hget/hmset/hmget/hgetall/hdel

hset/hget:

image.png


jedis操作:

jedis.hset("user", "id", "1");

jedis.hget("user", "id");


hmset/hmget/hgetall/

image.png


jedis操作:

Map student = new HashMap();

student.put("id", "1214104020");

student.put("name", "1214104020");

student.put("age", "20");

jedis.hmset("student", student);  

jedis.hmget("student", "id","name","age");

jedis.hgetAll("student");


hdel

image.png


jedis操作:

jedis.hdel("student", "age");


(2)、hlen

image.png


jedis操作:

jedis.hlen("student");


(3)、hexists key

在key里面的某个值的key

image.png


jedis操作:

jedis.hexists("student", "id");


(4)、hkeys/hvals

hkeys:获取全部键

image.png


jedis操作:

jedis.hkeys("student");


hvals:获取全部值

image.png


jedis操作:

jedis.hvals("student");


(5)、hincrby/hincrbyfloat

hincrby:

image.png


jedis操作:

jedis.hincrBy("student", "age", 3);


hincrbyfloat:

以浮点型增加

image.png


(6)、hsetnx

image.png


jedis操作:

jedis.hsetnx("student", "age", "20");

jedis.hsetnx("student", "gender", "female");


8、Redis的Zset(有序集合)

在set基础上加一个score值

之前set是kl vl v2 v3

现在zset是kl scorel vl score2 v2


(1)、zadd/zrange

image.png


jedis操作:

Map scoreMembers = new HashMap();

scoreMembers.put(60.0, "v1");

scoreMembers.put(70.0, "v2");

scoreMembers.put(80.0, "v3");

scoreMembers.put(90.0, "v4");

jedis.zadd("zset01", scoreMembers);

jedis.zrange("zset01", 0, -1);




withscores

image.png


jedis操作:

jedis.zrangeWithScores("zset01", 0, -1);


(2)、zrangebyscore key 开始score 结束score

image.png


jedis操作:

jedis.zrangeByScore("zset01", 60.0, 90.0);


(表示不包含

image.png


jedis操作:


limit 开始下标步数 多少步

image.png


jedis操作:

jedis.zrangeByScore("zset01", 60, 90, 2, 2);


(3)、zrem key 某score下对应的value值,作用是删除元素

image.png


jedis操作:

jedis.zrem("zset01", "v4");


(4)、zcard/zcount key score区间/zrank key values值,作用是获得下标值/zscore key对应值,获得分

zcard:

image.png


jedis操作:

jedis.zcard("zset01");


zcount:

image.png


jedis操作:

jedis.zcard("zset01");


zscore:

image.png


jedis操作:

jedis.zscore("zset01", "v3")


(5)、zrevrank key values值,作用是逆序获得下标值

image.png


jedis操作:

jedis.zrevrank("zset01","v3");


(6)、zrevrange

image.png


jedis操作:

jedis.zrevrange("zset01", 0, -1);


(7)、zrevrangebyscore key 结束score 开始score

image.png


jedis操作:

jedis.zrevrangeByScore("zset01", 60, 70);



评论列表




注册用户登录后才能发表评论,请登录注册,访问 博客首页