您当前的位置: 首页 >  数据结构

java持续实践

暂无认证

  • 2浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Redis五种数据结构演示

java持续实践 发布时间:2020-09-20 11:48:06 ,浏览量:2

文章目录
      • String
      • hash
      • list
      • set
      • sortedset

String

setex key 过期时间(单位秒) 值 例如上图 setex c 100 c 设置key为c的值为c , 过期时间为100s

psetex key 过期时间(单位毫秒) 值 psetex d 10000 d 10000毫秒为10s

ttl为查询还有多久时间过期, 单位为秒 获取字符串的范围getrange getset 重要!!! 设置值的时候, 能获取旧的值. 例如下面设置key为a的值为aa . 获得了旧的值为a mset mget 一次性设置和获取多个key setnx 是有这个key的话,无法设置成功, 无这个key , 才会返回1, 代表设置成功了. 可用于分布式锁. strlen 字符串长度

msetnx 具有原子性 , 即批量设置一些key value ,要么全部成功(返回1 ) , 要么全部失败(返回0 ). 如下图, 一开始设置q q w w , 设置成功了. 再次设置q q uuu uuu , 返回0 ,失败了. 因为上面的操作已经有key为q的了. 同时也获取不到uuu的值. 在这里插入图片描述 数字累加操作与自定义步长 例如如下, 定义了一个key 为 score 值为10的键值对. 使用incr score (key) 每次可以加一 使用incrby key 增加的多少 即可以指定步长是多少 ,例如下图是指定了100的步长 减少可以使用decr 来进行减少的操作 . 默认使用decr是减一 decrby key value 是指定某个key减去多少的值. 字符串追加命令: append 把某个字符串追加到指定key的后面. 如下图, 把mysql这个字符串进行追加 在这里插入图片描述 set key value [EX seconds| PX milliseconds] [NX| XX] 可以用于分布式锁. 解决了setnx语句无法设置过期时间的问题 具体可看此篇文章 https://javaweixin6.blog.csdn.net/article/details/108693123

hash

hash这种结构, 可以设置一个大key和一个小key 如下图, 可以设置大key为map , 小key为name , 值为jim keys * 可以看到key只有map一个 type key 可以看到类型为map. hexists 判断是否有这个值. hget 大key 小key 来获取值.

  • hgetall 是获取所有的键值对 如下 获得了大key为map的所有的键值对. name 为小key jim为值 age 为小key 20为值

  • hkeys 获取所有的小key 例如获得了name age

  • hvals map(key) 是获取所有的值 hlen map 获取所有的小key的数量 hmget 批量获取值 hmset 批量设置值 删除key的操作 hsetnx 只有当hash中的key如果存在设置失败, 如果不存在 , 设置成功.

list

list集合特点是取出的数据与存入的数据相反. 切换存储空间 使用lpush往list中放值 1 2 3 4 5 6 7 8 9 10 llen 为获取list中元素的个数. lrange list 0 2 获取list中位置为0 到2 的元素, 可以看到得到的是 10 9 8 . 与放入的顺序相反, 说明存储元素的时候, 是放入list的头部的 . 在这里插入图片描述 设置第 0个元素的值为100 即lset list 0 100 可以看到执行之后, 第0个元素的值为100 . lindex 获取指定索引的元素的值, 例如index为0 获取第一个元素, index为9 获取最后一个元素. lpop 移除list中第一个元素 rpop 移除list中最后一个元素

set

set为无序的集合, 并且去重. set是通过hash实现的, 添加删除查找的时间复杂度都是O(1)

sadd set a b c d 给set中添加元素 a b c d 再次执行sadd set a 可以看到返回为0 , 即重复的值无法添加进去. scard set 获取set中的元素的 个数. rename set 给set集合重命名. sdiff set集合1 set集合2 求集合1 相较于集合2 的差集 . 集合1 和集合2 共有 a b 例如如下图, 集合1 相较于集合2 的差集为 a b 集合2 相较于集合1 的差集为 e f 求交集 sinter 求并集 sunion 返回集合中 指定个数的随机元素 srandmember set1 3 例如返回set1集合中, 随机三个元素 判断是否为set集合中的成员元素 sismember set1 a 判断a 是否为set1集合中的元素, 返回1 代表是. sismember set1 vvv vvv不是set1集合中的元素, 返回了0 . 移除指定成员 srem set1 a b 例如移除了set集合中元素名称为 a b 两个元素 . spop set2 移除随机一个元素并将其返回. 例如下图移除了set2 中的e ,并将其返回了.

可以用的场景: 使用脚本把不 重复的流水号放入set集合中, 业务代码中从此set集合中获取, 并且用spop获取一个流水号, 而且还将其移除了, 这样就保证了流水号的唯一性.

sortedset

有序的set集合 . 通过分数来进行排序, sortedset也是通过hash实现的, 添加删除查找的时间复杂度都是O(1) 类似Java中的LinkedHashSet sortedset 演示如下 添加元素用的是 zadd sortedset1 100 a 300 b 200 c 求元素的个数 : zcard sortedset 获取sortedset集合中元素的分数 : zscore sortedset a zcount : 返回sortedset 集合中, 指定分数范围的集合的元素. 例如如下, 分别范围分数范围为0 到220 和 0 到 300 的 集合的元素. 该范围为一个闭区间, 即 包含给定的范围的值. zrank 可以看到是返回指定元素的索引, 并且是根据添加时的分数排序来指定其索引位置的. 分数越小的, 排在越前面. zincrby sortedset 1000 a 给元素a的分数加1000分 , 可以看到返回了a最新的分数为1100分, 并且a的排序的索引 ,也到了最后一个第三个 (从0开始) 成员的元素是不能重复的, 但是分数是可以重复的. 例如下面, 给b加上800 , 此时 a和b的分数都是1100. 通过获取索引可以看到a为第二个, b为第三个. 在这里插入图片描述 zrange 可以按照元素的索引位置拿到指定范围的元素 . 例如下图是拿到0 到100的索引位置的元素 . 包含索引位置为100的元素 即拿到101个元素. 也可以直接写 0 -1 即拿到所有的元素.

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0399s