RedisTemplate

如果想要在java中使用Redis相关的数据结构,要先注入RedisTemplate。

    @Autowired
private RedisTemplate<K,V> redisTemplate;

其中K,V类型,可以使用具体的类型,比如String或者其他具体类。

    @Autowired
private RedisTemplate<String,Integer> redisTemplate;

StringRedisTemplate

如果key和value都是String类型的,直接用StringRedisTemplate 。

    @Autowired
private StringRedisTemplate stringRedisTemplate;

List(队列)

Redis队列通过redisTemplate.opsForList()来操作。

常用api如下:

redisTemplate.opsForList().rightPush(K  key ,V  value);  //表示从队列的右侧放入新的值 ,其中key为队列名,value为入列的值

redisTemplate.opsForList().leftPop(K  key);            //取出队列最右侧的值

redisTemplate.opsForList().range(K key, long start, long end);         //遍历队列

示例如下:

从队列的最右侧放入新的数据。从队列的最左侧取出已有的数据。

@Autowired
private StringRedisTemplate stringRedisTemplate; redisTemplate.opsForList().rightPush("list","python"); redisTemplate.opsForList().leftPop("list");

Hash(散列)

Redis的散列可以让将多个键值对存储到一个Redis键里面。

常用api:

void put(H key, HK hashKey, HV value);      //设置散列hashKey的值
HV get(H key, Object hashKey); //从键中的哈希获取给定hashKey的值。返回类型HV表示HashValue
Set<HK> keys(H key); //获取key所对应的散列表的key
Set<K> keys(K pattern) ; //按照给定的pattern查找key。*表示所有的key,关键字加*表示模糊查询,比如user*表示所有带user的key。
Long increment(H key, HK hashKey, long delta); //通过给定的delta增加散列hashKey的值(整型)
Boolean hasKey(H key, Object hashKey); //确定哈希hashKey是否存在
Long size(H key); //获取key所对应的散列表的大小个数
Cursor<Map.Entry<HK, HV>> scan(H key, ScanOptions options); //使用Cursor在key的hash中迭代,相当于迭代器。

示例如下:

1.通过Hash存储某个用户数据。

redisTemplate.opsForHash().put("user2","name","tom");
redisTemplate.opsForHash().put("user2","age",26);
redisTemplate.opsForHash().put("user2","sex","male");

2.获取用户数据的所有字段。

System.out.println(redisTemplate.opsForHash().keys("user2"));
//redisHash1所对应的散列表为{age=26, name=jack, sex=male}
结果:[name, sex, age]

3.获取某个用户的年龄:

String age=redisTemplate.opsForHash().get("user2","age")

4.获取所有所有key包含user的数据。

通过keys(pattern)方式查找key,以下的pattern为user加上*表示所有包含user的key。

Set<String> setKeys = stringRedisTemplate.keys("user"+"*");
List<Object> list = new ArrayList<>();
for(String key:setKeys) {
//取出所有数据
List<Object> hashList = stringRedisTemplate.opsForHash().values(key);
for(int i=0;i<hashList.size();i++) {
Object object=hashList.get(i);
}
}

5.使用Cursor遍历:

使用:Cursor<Map.Entry<Object, Object>> curosr = template.opsForHash().scan("user2", ScanOptions.ScanOptions.NONE);
while(curosr.hasNext()){
Map.Entry<Object, Object> entry = curosr.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
结果:
age:26
name:tom
male:sex

Set(无序集合)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

常用api如下:

Long add(K key, V... values);
Long remove(K key, Object... values);
Cursor<V> scan(K key, ScanOptions options); //遍历set

ZSET(有序集合)

ZSet是有序的集合,且不允许重复的成员。

Long rank(K key, Object o);   //返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列

更详细的讲解请见:

https://www.jianshu.com/p/7bf5dc61ca06

最新文章

  1. iOS UIControl 详解
  2. dede使用方法----调用列表页的分页功能
  3. #-webkit-autofill##google#启用表单自动填充时,如何覆盖黄色背景
  4. 说一说Android的工程目录结构
  5. 7款外观迷人的HTML5/CSS3 3D按钮特效
  6. firefly 框架 结构图
  7. K - Candies(最短路+差分约束)
  8. C++ DLL注册
  9. map 理解
  10. 第一篇Active Directory疑难解答概述(1)
  11. Jquery Ajax type的4种类型
  12. ASP.NET CORE Linux发布工具(文件对比 只上传差异文件;自动启停WebServer命令;上传完成自动预热WebServer)
  13. Android为TV端助力 修改videoview的宽度和高度
  14. jqurey实现点赞特效
  15. 错误:“Cannot load JDBC driver class &#39;com.mysql.jdbc.Driver”的解决方法
  16. 2.2 数据的图形描绘以及处理(QQplot,归一化)
  17. Android自带的TTS功能
  18. python webdriver 登录163邮箱发邮件加附件, 外加数据和程序分离,配置文件的方式
  19. java线程总结2--wait/notify(all)/sleep以及中断概念
  20. commit命令

热门文章

  1. ABAP-System Functions
  2. insmod/rmmod
  3. react native错误排查-TypeError: window.deltaUrlToBlobUrl is not a function
  4. Mac版StarUML破解方法
  5. SQL Server 用一张表的数据更新另一张表的数据(转载)
  6. Java集合框架总结2_Map
  7. 【linux-command】Chrome安装linux-command插件
  8. 洛谷 P2921 在农场万圣节Trick or Treat on the Farm题解
  9. windows下面,PHP如何启动一些扩展功能
  10. 第六周测试补交 多线程代码和sumN