IMOOC课程地址:http://www.imooc.com/learn/839
相关博客 Spring+SpringMVC+Redis:http://www.imooc.com/article/15163
Linux 安装
- sudo apt-get update
- sudo apt-get install redis-server
windows 安装
https://github.com/MicrosoftArchive/redis/releases
查看进程
- ps -ef | grep -i redis
启动 停止 重启命令
- sudo service redis-server stop
- sudo service redis-server start
- sudo service redis-server restart
进入redis客户端
- redis-cli
基本增删改查
set name bumblebee //OK
get name //"bumblebee"
del name //(integer) 1
keys * //(empty list or set)
Redis的数据结构
- String 字符串
- hash 哈希
- list 列表
- set 字符串集合
- 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
- <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>2.9.0</version>
- </dependency>
简单demo
- package com.bumblebee.jedis;
- import org.junit.Test;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPool;
- import redis.clients.jedis.JedisPoolConfig;
- /**
- * redis - jedis 测试
- * @author bumblebee
- * @date 2017年7月28日
- */
- public class jedisTest1 {
- /**
- * 单实例测试
- */
- @Test
- public void demo1() {
- //设置IP和端口
- Jedis jedis = new Jedis("localhost",6379);
- //set值
- jedis.set("name", "bumblebee");
- //get值
- System.out.println(jedis.get("name"));
- //释放资源
- jedis.close();
- }
- /**
- * 使用连接池
- */
- @Test
- public void demo2() {
- //获取连接池对象
- JedisPoolConfig config = new JedisPoolConfig();
- //设置最大连接数
- config.setMaxTotal(30);
- //设置最大空闲连接数
- config.setMaxIdle(10);
- //获得连接池
- JedisPool jedisPool = new JedisPool(config,"localhost",6379);
- //获取核心对象
- Jedis jedis = null;
- try {
- jedis = jedisPool.getResource();
- jedis.set("hello", "hello 666");
- System.out.println(jedis.get("hello"));
- }catch (Exception e) {
- e.printStackTrace();
- } finally {
- //释放
- if(jedis != null)
- jedis.close();
- if(jedisPool != null)
- jedisPool.close();
- }
- }
- }


