Redis笔记

Redis是互联网应用常用的内存告诉缓存数据库,读写速度非常快。

一、Redis的应用场景

  1. 高并发的读写
  2. 计数器
  3. 排行榜
  4. 分布式会话
  5. 互动场景
  6. 最新列表

二、Redis数据类型

数据类型 存储的值 RedisTemplate方法 应用场景
 string (字符串)  字符串、整数、浮点数  opsForValue()  计数器
 list (列表)  一个链表,链表上每个节点都包含一个字符串  opsForList()  最新列表、消息队列、数据统计
set (集合)   包含字符串的无序收集器,每个字符串都是独一无二的  opsForSet()  不重复的集合,例如独立IP、共同好友
hash (散列)   包含键值对的无序散列表  opsForHash()  存储、读取、修改用户属性
zset (有序集合,sorted set)   字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定 opsForZSet()   排行榜

三、RedisTemplate操作Redis

 1.操作字符串

//存储
redisTemplate.opsForValue().set("key","123");

//获取
redisTemplate.opsForValue().get("key");

//3秒后存储的字符串失效
redisTemplate.opsForValue().set("key","123",3,TimeUnit.SECONDS);

//替换key所存储的字符串值,从偏移量5开始
redisTemplate.opsForValue().set("key","newValue",5);

//设置键的字符串值,并返回其旧值
redisTemplate.opsForValue().getAndSet("key","newValue");

//如果key存在并且是字符串,值会被追加到字符串末尾,如果key不存在,则会创建,设置值为空字符串
redisTemplate.opsForValue().append("key","value");

//获取value值得长度
redisTemplate.opsForValue().size("key")

2.操作散列 

//多个散列字段存储到key对应的散列表中
Map<string,Object> map=new HashMap();
map.put("name","zhangsan");
map.put("name","lisi");
rediaTemplate.opsForHash().putAll("key",map);

//散列存储到key对应的散列表中
rediaTemplate.opsForHash().put("key","name","zhangsan");

//根据key获取指定散列的值
rediaTemplate.opsForHash().get("key","key");

//根据key获取散列表中所有的值
rediaTemplate.opsForHash().values("key");

//根据key获取散列表中所有的key
rediaTemplate.opsForHash().keys("key");

//根据key获取散列表中所有的散列
rediaTemplate.opsForHash().entries("key");

//删除指定key的散列
rediaTemplate.opsForHash().delete("key","key");

//确定hasKey是否存在
rediaTemplate.opsForHash().hasKey("key","key");

//获取key对应散列表的大小个数
rediaTemplate.opsForHash().size("key");

3.操作列表

//左边批量添加元素
rediaTemplate.opsForList().leftPushAll("key",new String[]{"1","2","3"});

//存储在键中的列表大小
rediaTemplate.opsForList().size("key");

//将所有指定的值插入在键的列表的头部,如果键不存在,则在推送之前创建为空列表(左边插入)
rediaTemplate.opsForList().leftPush("key","1");

//将所有指定的值插入在键的列表的头部,如果键不存在,则在推送之前创建为空列表(右边插入)
rediaTemplate.opsForList().rightPush("key","1");

//右边批量添加元素
rediaTemplate.opsForList().rightPushAll("key",new String[]{"1","2","3"});

//从列表1的位置设置值
rediaTemplate.opsForList().set("key",1,"value");

//删除列表中前两次出现值为1的元素
rediaTemplate.opsForList().remove("key",2,"1");

//获取列表中下标为5的值
rediaTemplate.opsForList().index("key",5);

//弹出最左边的元素
rediaTemplate.opsForList().leftPop("key");

//弹出最右边的元素
rediaTemplate.opsForList().rightPop("key");

4.操作集合

//无序集合中添加不重复元素
rediaTemplate.opsForSet().add("key","value");
rediaTemplate.opsForSet().add("key","value1","value2","....");

//删除元素
rediaTemplate.opsForSet().remove("key","value1");
rediaTemplate.opsForSet().remove("key","value1","value2","....");

//移除并返回集合中的一个随机元素
rediaTemplate.opsForSet().pop("key");

//移动元素
rediaTemplate.opsForSet().move("key","value","destKey")

//无序集合大小长度
rediaTemplate.opsForSet().size("key");

//返回集合中的所有成员
rediaTemplate.opsForSet().members("key");

//遍历集合
Cursor<object> cursor=rediaTemplate.opsForSet().scan("key",ScanOptions.NONE);
while(cursor.hasNext()){
    System.out.println(cursor.next());
}

5.操作有序集合

zset是string类型元素的集合,且不允许重复的成员。每个元素都会关联一个double类型的分数(score)。可以通过分数将集合中的成员从小到大进行排序。

//新增有序集合
ZSetOperations.TypedTuple<Object> tuple1=new DefaultTypedTuple<>("key1",1);
ZSetOperations.TypedTuple<Object> tuple2=new DefaultTypedTuple<>("key2",2);
Set<ZSetOperations.TypedTuple<Object>> tuples=new HashSet<ZSetOperations.TypedTuple<object>>();
tuples.add(tuple1);
tuples.add(tuple2);
rediaTemplate.opsForZSet().add("key",tuples);

//新增有序集合,如果存在则返回false,如果不存在则返回true。
rediaTemplate.opsForZSet().add("key","value",1.0);

//移除一个或多个元素
rediaTemplate.opsForZSet().remove("key","value1","value2");

//返回指定成员的排名
rediaTemplate.opsForZSet().rank("key","value");

//返回指定区间内的成员
rediaTemplate.opsForZSet().range("key",0,-1);

//通过分数返回指定区间内的成员个数
rediaTemplate.opsForZSet.count("key",0,5);

//成员数
rediaTemplate.opsForZSet().size("key");

//获取指定成员的score值
rediaTemplate.opsForZSet().score("key","value");

//移除指定索引位置的成员
rediaTemplate.opsForZSet().removeRange("key",0,-1);

//遍历ZSet
Cursor<ZSetOperations.TypedTuple<Object>> cursor=rediaTemplate.opsForSet().scan("key",ScanOptions.None);
while(cursor.hasNext()){
    ZSetOperations.TypedTuple<Object> item = cursor.next();
    System.out.println(item.getValue()+":"+item.getScore());
}
原文地址:https://www.cnblogs.com/kerwincui/p/12499955.html