redis的几种数据机构操作--包含jedis操作

string ( 字符串)--字符串最大的长度是512M

127.0.0.1:6379> set name caojiulu
OK

127.0.0.1:6379> get name
"caojiulu"

127.0.0.1:6379> exists name
(integer) 1

127.0.0.1:6379> del name
(integer) 1

 

127.0.0.1:6379> expire name 5   
(integer) 1

127.0.0.1:6379> setex name 5 caojiulu
OK

127.0.0.1:6379> setnx name caojiulu
(integer) 1

jedis操作:

private static Jedis jedis = new Jedis("192.168.46.110",6379);

jedis.set("name ", caojiulu);

String string = jedis.get("name ");

boolean exists = jedis.exists("name");

Long del = jedis.del("name");

String[] strs=new String[]{"name","cajl","age","12"};

jedis.mset(strs);

jedis.expire("name", 5);

jedis.setex("name", 5, "caojiulu");

计数--自增是有范围的,它的范围是 signed long 的最大最小值,超过了这个值,Redis 会报错。

127.0.0.1:6379> incr age
(integer) 12

jedis.incr("age");

127.0.0.1:6379> incrby age 7
(integer) 19

jedis.incrBy("age", 5);

 

list ( 列表)--

Redis 的列表相当于 Java 语言里面的 LinkedList,注意它是链表而不是数组。这意味着
list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为
O(n),这点让人非常意外。
当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收。

右边进左边出:队列

127.0.0.1:6379> rpush books python java golang
(integer) 3

jedis.lpush("books", new String[]{"java","python","golang"});

127.0.0.1:6379> llen rpush
(integer) 3

System.out.println(jedis.llen("rpush"));

127.0.0.1:6379> lpop books
"golang"

System.out.println(jedis.lpop("books"));

右边进右边出:栈

127.0.0.1:6379> rpop books
"java"

System.out.println(jedis.rpop("books"));

慢操作
lindex 相当于 Java 链表的 get(int index)方法,它需要对链表进行遍历,性能随着参数
index 增大而变差。 ltrim 和字面上的含义不太一样,个人觉得它叫 lretain(保留) 更合适一
些,因为 ltrim 跟的两个参数 start_index 和 end_index 定义了一个区间,在这个区间内的值,
ltrim 要保留,区间之外统统砍掉。我们可以通过 ltrim 来实现一个定长的链表,这一点非常
有用。index 可以为负数,index=-1 表示倒数第一个元素,同样 index=-2 表示倒数第二个元
素。

> lindex books 1 # O(n) 慎用
"java"
> lrange books 0 -1 # 获取所有元素,O(n) 慎用
1) "python"
2) "java"
3) "golang"
> ltrim books 1 -1 # O(n) 慎用
OK
> lrange books 0 -1
1) "java"
2) "golang"
> ltrim books 1 0 # 这其实是清空了整个列表,因为区间范围长度为负
OK
> llen books
(integer) 0
 jedis.lindex("books", 1);
 jedis.lrange("books", 0, -1);
 jedis.ltrim("books", 1, -1);

hash ( 字典)

Redis 的字典相当于 Java 语言里面的 HashMap,它是无序字典。

127.0.0.1:6379> hset books java "think in java"
(integer) 1
127.0.0.1:6379> hset books js "think in js"
(integer) 1
127.0.0.1:6379> hgetall books
1) "java"
2) "think in java"
3) "js"
4) "think in js"
127.0.0.1:6379> hlen books
(integer) 2
127.0.0.1:6379> hget books java
"think in java"
127.0.0.1:6379> hset books java "this is java"
(integer) 0
127.0.0.1:6379> hget books java "this is java"
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> hmset books java "this is java" golang "this is golang"
OK

jedis.hset("books", "java", "this is java");
 Map<String, String> hgetAll = jedis.hgetAll("books");
 jedis.hlen("books");
 jedis.hget("books", "java");
  jedis.hmset("books", new HashMap<String>());

127.0.0.1:6379> hincrby books age 2
(integer) 3

jedis.hincrBy("books", "age", 10);

set ( 集合)
Redis 的集合相当于 Java 语言里面的 HashSet,它内部的键值对是无序的唯一的。它的
内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 NULL。

127.0.0.1:6379> sadd books java
(integer) 1
127.0.0.1:6379> sadd books java
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379> sadd books java python
(integer) 1
127.0.0.1:6379> smebers books
(error) ERR unknown command 'smebers'
127.0.0.1:6379> smembers books
1) "python"
2) "java"
127.0.0.1:6379> sismember books java
(integer) 1
127.0.0.1:6379> scard books
(integer) 2
127.0.0.1:6379> spop books
"python"
127.0.0.1:6379> scard books
(integer) 1

        jedis.sadd("books", "java");
        jedis.sadd("books", "java","python");
        jedis.scard("books");
        jedis.smembers("books");
        jedis.sismember("books", "java");
        jedis.spop("books");

zset ( 有序列表) )
zset 可能是 Redis 提供的最为特色的数据结构,它也是在面试中面试官最爱问的数据结
构。它类似于 Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部
value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权
重。它的内部实现用的是一种叫着「跳跃列表」的数据结构。
zset 中最后一个 value 被移除后,数据结构自动删除,内存被回收。 zset 可以用来存
粉丝列表,value 值是粉丝的用户 ID,score 是关注时间。我们可以对粉丝列表按关注时间
进行排序。
zset 还可以用来存储学生的成绩,value 值是学生的 ID,score 是他的考试成绩。我们
可以对成绩按分数进行排序就可以得到他的名次。

127.0.0.1:6379> zadd books 9.0 "this is java"
(integer) 1
127.0.0.1:6379> zadd books 8.9 "java hello"
(integer) 1
127.0.0.1:6379> zrange books 0 -1
1) "java hello"
2) "this is java"
127.0.0.1:6379> zrevrange books 0 -1
1) "this is java"
2) "java hello"
127.0.0.1:6379> zcard books
(integer) 2
127.0.0.1:6379> zscore books "java hello"
"8.9000000000000004"
127.0.0.1:6379> zrank books "java hello"
(integer) 0
127.0.0.1:6379> zadd books 8.6 "js"
(integer) 1
127.0.0.1:6379> zrank books "java heloo"
(nil)
127.0.0.1:6379> zrank books "java hello"
(integer) 1
127.0.0.1:6379> zrank books "this is java"
(integer) 2
127.0.0.1:6379> zrangebyscore books 0 8.91
1) "js"
2) "java hello"
127.0.0.1:6379> zrangebyscore books -inf 8.91 withscores
1) "js"
2) "8.5999999999999996"
3) "java hello"
4) "8.9000000000000004"
127.0.0.1:6379> zrem books "this is java"
(integer) 1

       jedis.zadd("books", 9.0, "this is java");
        jedis.zrange("books", 0, -1);
        jedis.zrevrange("books", 0, -1);
        jedis.scard("books");
        jedis.zscore("books", "this is java");
        jedis.zrank("books", "this is java");
        jedis.zrangeByScore("books", 0, 9.0);
        jedis.zrem("books", "this is java");

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值