IMOOC课程地址:http://www.imooc.com/learn/839

相关博客 Spring+SpringMVC+Redishttp://www.imooc.com/article/15163

Linux 安装

  1. sudo apt-get update
  2. sudo apt-get install redis-server

 

windows 安装

https://github.com/MicrosoftArchive/redis/releases

 

查看进程

  1. ps -ef | grep -i redis

 

启动 停止 重启命令

  1. sudo service redis-server stop
  2. sudo service redis-server start
  3. sudo service redis-server restart​


进入redis客户端

  1. redis-cli

 

基本增删改查

    set name bumblebee    //OK

    get name                      //"bumblebee"

    del name                      //(integer) 1

    keys *                           //(empty list or set)

Redis的数据结构

  1.     String 字符串
  2.     hash 哈希
  3.     list 列表
  4.     set 字符串集合
  5.     sorted set 有序字符串集合

Key定义注意

  •     不要过长 建议不超过1024字节
  •     不要过短 会降低可用性

1. 字符串 String

  •     二进制安全
  •     长度限制 512 M

    赋值命令

  • set key value
  • get key
  • getset key value //先返回 再赋值
  • del key //删除
  • incr key //指定key的value+1 若没有这个key则初始为0再+1,若该value不能转换为整数则失败
  • decr key //同上 只是-1
  • incrby key num //与incr类似 这个可以指定加几 
  • decrby key num //同上 只是减法
  • append key value //在该key的value后面追加一个value进行拼接,若key不存在,初始一个空字符串再拼接

2. 存储 Hash

  •     String key 和 String Value的Map容器
  •     每个Hash可以存储 4294967295个键值对

    常用命令

  • hset key value (value是一个map 即单个 key value) //例如hset myhash username jack 再添加时 任然还用 hset myhash age 18
  • hmset key value //一次多个 例 hmset key key value key value key value
  • hget key key //获取指定hash中的单个具体值
  • hmget key key key //同上一次获取多个
  • hgetall key //一次全部
  • hdel key key key//删除 可以一个 可以多个 也可以删除不存在的key 返回受影响的行数会为 0
  • del key 则是针对整个hash删除
  • hincrby key key num //与incrby 类似 指定字段+1
  • hexists key key //指定字段是否存在 存在返回1 不存在0
  • hlen key //看hash的长度 也就是有几个属性 没有返回0
  • hkeys key //获取所有key
  • hvalues key //获取所有value

存储 List 

按照顺序插入数据的链表 可以从头或者尾插入数值,若从头和尾插入数值比较高效,若中间插入效率比较低

  • ArrayList 使用数组方式 更具索引查询比较快 但插入删除效率不高
  • LinkList 使用双向链表方式 记录前后元素指针 速度较快 

    常用命令

  • lpush key value // value 为list 例如 lpush key 1 2 3 会按照 1 2 3的顺序添加
  • 如果再次执行lpush key value 与上一条一样的key 则会在3后面继续按照顺序添加

 。。。。此处省略其余部分

 

通用命令

  • keys * //查看所有key
  • keys my? //查看所有my开头的key
  • del key key key //删除多个key
  • exists key //是否存在这个key
  • rename key newKey //对key重命名
  • expire key 1000 //设置过期时间 单位是秒 例如此条为1000秒
  • ttl key //查看所剩时间 若没有设置返回-1
  • type key //返回value的类型 例如 string list set hash zset等

 

 

 

特性

  • 多数据库
  • 事务

    多数据库命令

  • select 1 //选择一号数据库 如果不选默认是0号数据库
  • move key databaseName //移动数据到指定数据库 一般是号码

    事务命令

  • multi // 开启事务这个语句之后执行的命令,都被视为事务之内的相关操作
  • exec //提交
  • discard //回滚

    如果开启事务后 发生异常或者中断 没有提交 则不会执行

 

Redis 持久化

    即 从内存到硬盘

  • RDB方式 //在指定的时间内 将内存数据写入到磁盘内
  • AOF方式 //将以日志方式 将数据库操作写入磁盘,下次启动时读取日志后恢复到上一次的状态
  • 无持久化 //即 不写入磁盘 只作为缓存方式使用

RDB方式 ( 默认 )

    优势 :灾难发生后可恢复 效率高

    劣势 :在未到制定时间就发生灾难 则会丢失数据,另外数据过大写入数据会过度占用服务器资源

默认文件名    dump.rdb

默认路径        redis根目录下 (同目录另外还有config文件redis.conf)

AOF 略

 

java实现jedis

maven

  1. <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
  2. <dependency>
  3.     <groupId>redis.clients</groupId>
  4.     <artifactId>jedis</artifactId>
  5.     <version>2.9.0</version>
  6. </dependency>

简单demo

  1. package com.bumblebee.jedis;
  2.  
  3. import org.junit.Test;
  4.  
  5. import redis.clients.jedis.Jedis;
  6. import redis.clients.jedis.JedisPool;
  7. import redis.clients.jedis.JedisPoolConfig;
  8.  
  9. /**
  10. * redis - jedis 测试
  11. * @author bumblebee
  12. * @date 2017年7月28日
  13. */
  14. public class jedisTest1 {
  15. /**
  16. * 单实例测试
  17. */
  18. @Test
  19. public void demo1() {
  20. //设置IP和端口
  21. Jedis jedis = new Jedis("localhost",6379);
  22. //set值
  23. jedis.set("name", "bumblebee");
  24. //get值
  25. System.out.println(jedis.get("name"));
  26. //释放资源
  27. jedis.close();
  28. }
  29. /**
  30. * 使用连接池
  31. */
  32. @Test
  33. public void demo2() {
  34. //获取连接池对象
  35. JedisPoolConfig config = new JedisPoolConfig();
  36. //设置最大连接数
  37. config.setMaxTotal(30);
  38. //设置最大空闲连接数
  39. config.setMaxIdle(10);
  40. //获得连接池
  41. JedisPool jedisPool = new JedisPool(config,"localhost",6379);
  42. //获取核心对象
  43. Jedis jedis = null;
  44. try {
  45. jedis = jedisPool.getResource();
  46. jedis.set("hello", "hello 666");
  47. System.out.println(jedis.get("hello"));
  48. }catch (Exception e) {
  49. e.printStackTrace();
  50. } finally {
  51. //释放
  52. if(jedis != null)
  53. jedis.close();
  54. if(jedisPool != null)
  55. jedisPool.close();
  56. }
  57. }
  58. }