redis list 基本操作
写在前面的话
本篇笔记写在笔者刚工作时。如有问题,请指教。
简介
list是链表,redis list的应用场景很多,也是Redis 最重要的数据结构之一,比如微博的关注列表,粉丝列表,消息列表等功能都可以用redis的list结构实现。redis的实现可以为一个双向链表,既可以支持反向查找和遍历,更方便操作。另外lrange命令,就是可以从某个元素开始读取多少个元素,可以实现分页,基于redis实现高性能分页。
操作
#lpush key value 给定key list集合左侧添加元素 lpush 1992 123 #rpush key value 给定key list集合右侧添加元素 rpush 1992 124 #len key 给定key list集合的元素数量 llen 1992 #lrange key start stop 给定元素key list结合 [start,stop]位置的元素 [127.0.0.1:6379> lrange 1992 0 5 1) "123" 2) "124" 3) "125" #lpop key 给定元素key list 左出栈一个元素,集合少一个元素 lpop 1992 #rpop key 给定元素key list 右出栈一个元素,集合少一个元素 rpop 1992 #lrem key count value 给定key list 集合 删除个数count元素,值为value lrem 1992 1 123 #删除1992链表中值为123的元素 #ltrim key start stop #删除 给定key 链表的下标 [start,stop]元素 ltrim 1992 0 10 #lset key index value # 修改 给定key list 集合 下标为index的值 lset 1992 0 1234 #sort key asc | desc #给定key list 排序 默认 asc sort 1992
list实际使用场景-JAVA 存储公司组织结构
package com.restart.redis; import java.io.Serializable; import java.util.Random; import com.alibaba.fastjson.JSONObject; import redis.clients.jedis.Jedis; public class RedisApi { public static Jedis getJedis() { Jedis jedis = new Jedis("127.0.0.1",6379); return jedis; } public static void listOp() { Jedis jedis = getJedis(); String companyId = "cpy123"; for (int i = 0; i < 5; i++) { Department department = new Department(i+"","depart" + i); jedis.lpush(companyId, JSONObject.toJSONString(department)); int random = new Random().nextInt(10000); for(int k = 0 ;k < random ;k++) { Person person = new Person("aust"+k,12,1+k); jedis.lpush(i+"", JSONObject.toJSONString(person)); } } } public static void main(String[] args) { listOp(); } } class Person implements Serializable{ private static final long serialVersionUID = 1L; private String name; private int age; private int sex; public Person() {} public Person(String name, int age, int sex) { super(); this.name = name; this.age = age; this.sex = sex; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]"; } } class Department{ private String id; private String name; public Department() {} }
省略了get,set操作。