学习一个新技术的流程是什么,应该是先写一个特别简单的栗子,然后不断的向上添加,从小到大,可是现在,要学的东西太多,比如去面试,发现这个不会,那个也不清楚,于是就怀着比较着急的心态去学习,其实除了面试,很多时候都会这样,学习的时候不再写hello world,而是直接就看理论,被理论,猜逻辑,那一定会事倍功半。
下面讲讲redis
说起redis其实很好笑的,我曾经通过redis视频学习过redis,看了大概两个小时,讲师都在将怎么去安装redis,怎么去设置主从机制,到头来,redis没学怎么明白,到时学会了点linux命令,也挺好倒是学会了一些,但是很可气,连java连接redis操作的Jedis操作最基本的数据类型的代码都没写。
现在就从写代码开始
redis的数据结构分为String List Map Set Zset 五种
分别介绍一下
1 String
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
2 List
它是一个字符串链表,left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
3Set
Redis的Set是string类型的无序,不能重复的集合。
4 hash
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
5 zset
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
栗子
public static void main(String[] args) {
Jedis jedis = null;
try {
jedis = new Jedis("127.0.0.1", 6699);
jedis.auth("123123");
// 1.string 输出结果: OK
jedis.set("hello", "world");
// 输出结果: world
jedis.get("hello");
// 2.hash
jedis.hset("myhash", "f1", "v1");
jedis.hset("myhash", "f2", "v2");
// 输出结果: {f1=v1, f2=v2} 这里是保存了一个Map
Map<String, String> myhash = jedis.hgetAll("myhash");
System.out.println(myhash);
// 3.list
jedis.rpush("mylist", "1");
jedis.rpush("mylist", "2");
jedis.rpush("mylist", "3");
// 输出结果: [1, 2, 3] 如果end为 -1 会输出两便
List<String> mylist = jedis.lrange("mylist", 0, 2);
System.out.println(mylist);
// 4.set
jedis.sadd("myset", "a");
jedis.sadd("myset", "b");
jedis.sadd("myset", "a");
// 输出结果: [b, a]
jedis.smembers("myset");
// 5.zset
jedis.zadd("myzset", 99, "tom");
jedis.zadd("myzset", 66, "peter");
jedis.zadd("myzset", 33, "james");
// 输出结果: [[["james"],33.0], [["peter"],66.0], [["tom"],99.0]]
Set<Tuple> myzset = jedis.zrangeWithScores("myzset", 0, -1);
}catch (Exception e){
}finally {
jedis.close();
}
}
以上就是redis基本类型的使用
下面说说redis的几个命令
1 计数命令 incr
这个命令对key进行计数如果原来没有那么就变成1,执行一次后变成2
2 加锁命令 setNx
这个命令返回的其实就是如果有key不存在,那么将value设置为传入的value,如果存在那么不进行操作。