安装好redis,进行了基本的操作。包括对map list 和自定义对象的基本操作。笔记都在代码注释里,直接上代码。

  1. private Jedis jedis;
  2.  
  3. @Before
  4. public void before() {
  5. jedis = new Jedis("127.0.0.1");
  6. }
  7.  
  8. /**
  9. * 简单添加
  10. */
  11. @Test
  12. public void test1() {
  13. String name = "name";
  14. String value = "qq";
  15. jedis.set(name, value);
  16. System.out.println("追加前:" + jedis.get(name)); // 追加前:qq
  17.  
  18. // 在原有值得基础上添加,如若之前没有该key,则导入该key
  19. jedis.append(name, "ww");
  20. System.out.println("追加后:" + jedis.get(name)); // 追加后:qqww
  21.  
  22. jedis.append("id", "ee");
  23. System.out.println("没此key:" + jedis.get(name));
  24. System.out.println("get此key:" + jedis.get("id"));
  25.  
  26. }
  27.  
  28. /**
  29. * mset 是设置多个key-value值 参数(key1,value1,key2,value2,...,keyn,valuen) mget
  30. * 是获取多个key所对应的value值 参数(key1,key2,key3,...,keyn) 返回的是个list
  31. */
  32. @Test
  33. public void test2() {
  34. jedis.mset("name1", "aa", "name2", "bb", "name3", "cc");
  35. System.out.println(jedis.mget("name1", "name2", "name3"));
  36. }
  37.  
  38. /**
  39. * map
  40. */
  41. @Test
  42. public void test3() {
  43. Map<String, String> map = new HashMap<String, String>();
  44. map.put("name", "fujianchao");
  45. map.put("password", "123");
  46. map.put("age", "12");
  47. // 存入一个map
  48. jedis.hmset("user", map);
  49.  
  50. // map key的个数
  51. System.out.println("map的key的个数" + jedis.hlen("user"));
  52.  
  53. // map key
  54. System.out.println("map的key" + jedis.hkeys("user"));
  55.  
  56. // map value
  57. System.out.println("map的value" + jedis.hvals("user"));
  58.  
  59. // (String key, String... fields)返回值是一个list
  60. List<String> list = jedis.hmget("user", "age", "name");
  61. System.out.println("redis中key的各个 fields值:"
  62. + jedis.hmget("user", "age", "name") + list.size());
  63.  
  64. // 删除map中的某一个键 的值 password
  65. // 当然 (key, fields) 也可以是多个fields
  66. jedis.hdel("user", "age");
  67.  
  68. System.out.println("删除后map的key" + jedis.hkeys("user"));
  69.  
  70. }
  71.  
  72. /**
  73. * list
  74. */
  75. @Test
  76. public void test4() {
  77.  
  78. jedis.lpush("list", "aa");
  79. jedis.lpush("list", "bb");
  80. jedis.lpush("list", "cc");
  81. System.out.println(jedis.lrange("list", 0, -1));
  82. System.out.println(jedis.lrange("list", 0, 1));
  83. System.out.println(jedis.lpop("list")); // 栈顶
  84. jedis.del("list");
  85. }
  86.  
  87. /**
  88. * 自定义对象 User为例 id name
  89. *
  90. * RedisTemplate 中有 序列化和反序列化
  91. * 如:template.getStringSerializer().serialize("name")
  92. */
  93. @Test
  94. public void test5() {
  95.  
  96. User user = new User();
  97. user.setId(123);
  98. user.setName("fighter");
  99.  
  100. // 存入一个 user对象
  101. jedis.set("user".getBytes(), SerializationUtil.serialize(user));
  102.  
  103. // 获取
  104. byte[] bs = jedis.get("user".getBytes());
  105. User desUser = (User) SerializationUtil.deserialize(bs);
  106. System.out.println(desUser.getId() + ":" + desUser.getName());
  107.  
  108. }

对于自定义对象,需要进行序列化和反序列化:我这里提取出了一个工具类,

  1. SerializationUtil.java
  1. /**
  2. * 序列化就是将一个对象转换为二进制的数据流。这样就可以进行传输,或者保存到文件中。如果一个类的对象要想实现序列化,就必须实现serializable接口。在此接口中没有任何的方法,此接口只是作为一个标识,表示本类的对象具备了序列化的能力而已。
  3. * 反序列化:将二进制数据流转换成相应的对象。
  4. * 如果想要完成对象的序列化,则还要依靠ObjectOutputStream和ObjectInputStream,前者属于序列化操作,而后者属于反序列化操作。
  5. *
  6. */
  7.  
  8. import java.io.ByteArrayInputStream;
  9. import java.io.ByteArrayOutputStream;
  10. import java.io.ObjectInputStream;
  11. import java.io.ObjectOutputStream;
  12.  
  13. public class SerializationUtil {
  14. /**
  15. * 序列化
  16. *
  17. * @param object
  18. * @return
  19. */
  20. public static byte[] serialize(Object object) {
  21. ObjectOutputStream oos = null;
  22. ByteArrayOutputStream baos = null;
  23. try {
  24. baos = new ByteArrayOutputStream();
  25. oos = new ObjectOutputStream(baos);
  26. oos.writeObject(object);
  27. byte[] bytes = baos.toByteArray();
  28. return bytes;
  29. } catch (Exception e) {
  30. }
  31. return null;
  32. }
  33.  
  34. /**
  35. * 反序列化
  36. *
  37. * @param bytes
  38. * @return
  39. */
  40. public static Object deserialize(byte[] bytes) {
  41. ByteArrayInputStream bais = null;
  42. try {
  43. bais = new ByteArrayInputStream(bytes);
  44. ObjectInputStream ois = new ObjectInputStream(bais);
  45. return ois.readObject();
  46. } catch (Exception e) {
  47.  
  48. }
  49. return null;
  50. }
  51.  
  52. }

还有都熟悉的User类。我只简单实用id和name,测试,也贴一下吧

  1. public class User implements Serializable {
  2. /**
  3. *
  4. */
  5. private static final long serialVersionUID = -1530813282496676263L;
  6. private Integer id;
  7. private String name;
  8.  
  9. public Integer getId() {
  10. return id;
  11. }
  12.  
  13. public void setId(Integer id) {
  14. this.id = id;
  15. }
  16.  
  17. public String getName() {
  18. return name;
  19. }
  20.  
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24.  
  25. }

昨天也进行了与spring的整合。整理一下

  1.  

redis jedis存储对象简单操作,map list 自定义对象的更多相关文章

  1. 征服 Redis + Jedis + Spring —— 配置&常规操作

    Spring提供了对于Redis的专门支持:spring-data-redis.此外,类似的还有: 我想大部分人对spring-data-hadoop.spring-data-mongodb.spri ...

  2. redis 哈希数据类型简单操作(实现购物车案例)

    这里不累赘如何安装redis和php  redis扩展,主要熟悉调用redis哈希数据类型 简单方法操作如下 1:hSet 2:hGet 4:hDel 5:hGetAll 4:hExists 5:hI ...

  3. EntityFrameWork简单操作 EF数据上下文对象操作数据增删改差及批处理

    /// <summary> /// EF针对 留言数据库 的 数据上下文对象!!!! /// </summary> static LeaveWordBoradEntities ...

  4. JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype

    一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...

  5. Redis + Jedis + Spring (list操作)

    为了简便操作,我使用了StringRedisTemplate.用字符串操作做展示.当然,你可以继续使用RedisTemplate. 闲言少叙,上代码,一目了然: /** * Mar 5, 2013 * ...

  6. redis的安装和简单操作

    安装gcc  目地是编译软件 yum install gcc-c++ 1.拷贝并解压 2.编译文件 到解压目录下 执行 make 进行编译依赖项 cd /deps make hiredis lua j ...

  7. php类与对象简单操作

    <?php /* * Created on 2015-8-25 * * To change the template for this generated file go to * Window ...

  8. java中json包的使用以及字符串,map,list,自定义对象之间的相互转换

    做一个map和字符串的转换,需要导入这些jar包,这是最基本的一些jar包. 经过多方尝试得出结论入下: 首先导入基本包:json-lib-2.2.3-jdk15.jar 如果没有这个jar包,程序是 ...

  9. iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档

    1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...

随机推荐

  1. pb_ds(平板电视)简介

    据说NOI赛制可以用pbds,故整理常用方法: 1.splay 所需声明及头文件: #include <ext/pb_ds/tree_policy.hpp> #include <ex ...

  2. input 的 placeholder 样式修改

    input::-webkit-input-placeholder{ color:#999999; } input::-moz-placeholder{ /* Mozilla Firefox 19+ * ...

  3. 给自己立下一个flag先

    恩,今天开始写博客. 其实主要原因是被人甩了,想找个事情让自己忙起来. 主要原因是“男人没钱就是无能”,我是个应届毕业生.所以你懂的. 我不喜欢让心情不爽,所以只能找事情让自己忙起来.所以我开始立Fl ...

  4. TCP重传机制的学习应用

    1. TCP重传机制 TCP协议是一个可靠的协议.发送方每次发送一个数据包,需要等到ACK确认包再继续发送. 发出去的请求包在规定时间内没有收到ACK,不管是请求包丢失,还是ACK包丢失,还是网络延迟 ...

  5. 【51nod 1355】 斐波那契数的最小公倍数

    题目 51nod的数学题都还不错啊 首先直接算显然是没有办法算的,因为\(fib\)的lcm这个东西还是太鬼畜了 我们考虑到\(fib\)数列的一个非常好的性质是\(gcd(fib_i,fib_{j} ...

  6. 2019-5-21-C#-在-构造函数添加-CallerMemberName-会怎样

    title author date CreateTime categories C# 在 构造函数添加 CallerMemberName 会怎样 lindexi 2019-05-21 11:28:32 ...

  7. 2018-10-31-C#-7.0-使用下划线忽略使用的变量

    title author date CreateTime categories C# 7.0 使用下划线忽略使用的变量 lindexi 2018-10-31 14:4:9 +0800 2018-10- ...

  8. [转]WPF中Binding的技巧

    在WPF应用的开发过程中Binding是一个非常重要的部分. 在实际开发过程中Binding的不同种写法达到的效果相同但事实是存在很大区别的. 这里将实际中碰到过的问题做下汇总记录和理解. 1. so ...

  9. PostgreSQL的架构

    是最先进的数据库.他的第一个版本在1989年发布,从那时开始,他得到了很多扩展.根据db-enginers上的排名情况,PostgreSQL目前在数据库领域排名第四. 本篇博客,我们来讨论一下Post ...

  10. vue 基本知识

    1,内置事件对象event 原生JS事件中是直接通过传入 e 或者 event 就可以获取,但在vue中要传入 $event 才可以获取到内置事件对象 <body> <button ...