Redis 中有 5 种数据结构,分别是字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),因为使用 Redis 场景的开发中肯定是无法避开这些基础结构的,所以熟练掌握它们也就成了一项必不可少的能力。本文章精要地介绍了 Redis 的这几种数据结构,主要覆盖了它们各自的定义、基本用法与相关要点。
字符串类型
字符串是 Redis 中的最基础的数据结构,我们保存到 Redis 中的 key,也就是键,就是字符串结构的。除此之外,Redis 中其它数据结构也是在字符串的基础上设计的,可见字符串结构对于 Redis 是多么重要。
Redis 中的字符串结构可以保存多种数据类型,如:简单的字符串、JSON、XML、二进制等,但有一点要特别注意:在 Redis 中字符串类型的值最大只能保存 512 MB。
命令
下面通过命令了解一下对字符串类型的操作:
1.设置值
set key value [EX seconds] [PX milliseconds] [NX|XX]
set 命令有几个非必须的选项,下面我们看一下它们的具体说明:
*EX seconds:为键设置秒级过期时间
*PX milliseconds:为键设置毫秒级过期时间
*NX:键必须不存在,才可以设置成功,用于添加
*XX:键必须存在,才可以设置成功,用于更新
set 命令带上可选参数 NX 和 XX 在实际开发中的作用与 setnx 和 setxx 命令相同。我们知道 setnx 命令只有当 key 不存在的时候才能设置成功,换句话说,也就是同一个 key 在执行 setnx 命令时,只能成功一次,并且由于 Redis 的单线程命令处理机制,即使多个客户端同时执行 setnx 命令,也只有一个客户端执行成功。所以,基于 setnx 这种特性,setnx 命令可以作为分布式锁的一种解决方案。
而 setxx 命令则可以在安全性比较高的场景中使用,因为 set 命令执行时,会执行覆盖的操作,而 setxx 在更新 key 时可以确保该 key 已经存在了,所以为了保证 key 中数据类型的正确性,可以使用 setxx 命令。
2.获取值
get key
3.批量设置值
mset key value
4.批量获取值
mget key
如果有些键不存在,那么它的值将为 nil,也就是空,并且返回结果的
Trie树本身就是一个很迷人的数据结构,何况是其改进的方案。
在本博客中我会从DAT(Double-Array Tire)的原理开始,并结合其源代码对DAT的状态转移过程进行解析。如果因此你能从我的博客中有所收获或启发,It's my pleasure.
本文链接:http://blog.csdn.net/lemon_tree12138/article/details/492
概述:
说来也奇怪,最近碰到的很多问题都需要用字典树来解决,索性就来研究一番。在这篇博客中,我会通过一些实例来讲解一下字典树的一些基本使用。例如:创建、添加、查找、按字典序排序、按数值大小进行排序(对于一些数值序列的排序)等等。
关于字典的实际应用实例,请参见本人的另一篇博客:《算法:两种对拼音进行智能切分的方法》
本文链接:http://blog.csdn.net/lemon_tree12138/article/details/49177509 -- 编程小笙
--转载请注明出处
基本使用:
0.要点说明:
为了便于以下对字典树的说明,我这里的节点Node可能会有一些对于读者而并不必要的成员。例如,fre, visited, minLength, prefixCount等等。这里读者可以根据自己的需求自行增减。
String name; // 结点的字符名称
int fre; // 单词的词频
boolean end; // 是否是单词结尾
boolean root; // 是否是根结点
Node[] children; // 子节点信息
boolean visited; // 是否已经遍历过了
int minLength; // 通过该节点的最小的数字长度
int prefixCount = 0; // 有多少单词通过这个节点,即节点字符出现的次数
Node parent; // 当前节点的父节点
1.创建一棵新的字典树
对于创建一棵空的字典树,其实相对来说是比较容易的。因为,我们不需要对树进行一些元素新增或是移除。我们只是对字典树中的一些必要的成员进行了一些初始化的工作。下面是代码部分:
Node root;
int depth;
public TrieTree(String name) {
root = new Node(name);
root.setFre(0);
depth = 0;
root.setEnd(false);
root.setRoot(true);
}
2.插入一个新的节点元素
对于在字典树的新增元素的关键地方,应该就是我们要在何是停止,即新增完成的条件是什么?
我们元素新增完成的条件是,我们在对新增的元素(如:"