redis帮我们做的事情.
一. redis介绍.
1. redis的由来.
之前有一个创业公司的老板,维护一个统计网站信息的页面LLOOGG,这位老板对mysql的性能嗤之以鼻,自己研发了一套非关系型数据库,叫redis. 同年老板就将redis对外开源. 后台VMware对redis进行了支持. 创业老板就开始专心维护redis.
2. NOSql.
Not Only Sql -> 泛指一些非关系型数据库. 除了关系型数据库都是非关系型数据库. 关系型数据库: mysql,oracle,sqlserver,db2 非关系型数据库: key-value非关系型数据库: redis,m...cache. 文档存储非关系型数据库: mongodb,es. 图形化的非关系型数据库: neo4j ..... Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。 多路复用IO. 高性能. 读写速度极快. 单线程. 分布式锁. 提供的多种存储结构. key-value,key-hash,key-list,key-set,key-sortedSet. .....
二. redis安装.
1. 下载redis的压缩包 wget http://download.redis.io/releases/redis-5.0.6.tar.gz 2. 将redis解压到/usr/local tar -zxvf redis-5.0.6.tar.gz -C /usr/local 3. 跳转到redis的解压目录,编译并安装 (yum -y install gcc-c++) make && make install PREFIX=/usr/local/redis 4. 启动redis服务. ./redis-server 启动redis服务后,占满整个界面保证redis进程的运行. 5. 启动redis客户端. ./redis-cli [-h localhost] [-p 6379] redis默认不允许远程链接.
三. 在windows连接redis.
1. 图形化界面.
1. 关闭防火墙 | 释放6379端口号. systemctl stop firewalld 2. 复制redis的配置文件. cp /usr/local/redis-5.0.6/redis.conf /usr/local/redis/bin/ 启动方式: ./redis-server redis.conf 3. 后台启动redis. 修改redis.conf中的 daemonize -> 从no改为yes 4. 修改redis默认bind的127.0.0.1 bind 127.0.0.1 将其注释. 5. 关闭redis的保护机制. protected-mode yes -> 改为 no 6. 修改完配置,关闭,并重启redis. (正常关闭/非正常关闭和redis的持久化有关联.) 1. 非正常关闭:关闭服务1: 直接搜索进行的pid,kill杀死. 2. 非正常关闭:重启虚拟机/电脑. 3. 正常关闭:连接redis的客户端,执行shutdown ./redis-cli -> 连接成功后 -> shutdown ./redis-cli shutdown
2. 在java中链接.
在java中连接redis,需要使用redis官方提供的API -> jedis.
1. 直接连接.
1. 创建项目. 2. 导入依赖. 3. 测试. //1. 创建Jedis连接对象. //2. 操作. //3. 释放资源. 频繁的创建和销毁连接对象,比较消耗性能,不推荐.
2. 使用连接池.
1. 创建项目. 2. 导入依赖. 3. 测试. //1. 创建JedisPool的连接池对象. //2. 从池子中获取一个连接对象. //3. 操作. //4. 返回连接对象(放在finally中)
3. 在java存储byte[]类型数据.
java的API,jedis只允许存储String或者是byte[]类型. 存储一些自定义类型的数据时,只能采用byte[]的方式,如果自定义类型需要转为byte[],当前自定义类型必须实现了序列化接口.Serializable. 1. 如果用到自定义类型,一定要实现Serializable接口. 2. 用哪个工具序列化的,就用哪个工具反序列化. 3. 存byte数据. 获取jedis -> 从池子. 将key和value使用SerializationUtils.serialize方法序列化. 调用jedis存储数据. 释放资源. 4. 取byte[]数据 获取jedis -> 从池子. 将key序列化为byte[]. 通过key获取对应的byte[]类型的value. 将value反序列化为Object对象. 释放资源.
四. redis的基本操作.(晨考)
redis的命令中文文档: http://doc.redisfans.com/ key: 1. del. -> 删除指定的key del key... 2. expire. -> 指定key的生存时间. expire key seconds 3. expireat. -> 指定key能生存到具体的时间戳. expireat key timestamp 4. keys. -> 查询当前redis中的全部key. keys pattern. (* ? [具体字符]) 5. pexpire. -> 设置key的生存时间.单位为毫秒. pexpire key milliseconds 6. ttl -> 获取指定key剩余生存时间,时间单位为秒. ttl key (-2: 当前key不存在. -1: 当前key没有生存时间. >=0 : 具体的剩余生存时间.) string: 1. incr -> 给key的value自增1. incr key (如果value是非数值,会报错.) 2. decr -> 给key的value自减1. decr key 3. incrby -> 给key的value指定自增具体的数字. incrby key increment 4. set -> 设值. set key value 5. get -> 取值. get key 6. setnx -> 设值, set if not exists, 如果key存在,什么事都不做,如果key不存在,和set一模一样. setnx key value 7. getset -> 先取值,再设值. getset key value
在jedis中,redis的命令是什么,jedis的方法就是什么?
五. redis的5种存储数据的结构.(晨考)
六. 5中数据结构的基本操作.
1. string.
................见四.
2. hash.
1. hdel -> 删除某个field对应的值. hdel key field 2. hset -> 设值. hset key field value 3. hget -> 取值 hget key field
3. list.
1. lpush | rpush -> 添加值. 从左侧推送值 | 从右侧推送值 lpush | rpush key value... 2. lrange -> 获取一定范围内的值. lrange key start stop. (如果查询全部start -> 0 stop -> -1) 3. lpop | rpop -> 从左侧弹出一个值 | 从右侧弹出一个值 lpop | rpop key. 4. lset -> 修改制定索引的值. lset key index value
4. set.
1. sadd -> 设值. sadd key member... 2. smembers -> 取值. smembers key
5. sortedSet|zset
1. zadd -> 设值 zadd key score member .. 2. zrange -> 取值 zrange key start stop
6. jedis的方法和命令一致.
七. spring整合redis.
1. redis整合spring操作.
1. 导入依赖. ... 2. 编写配置文件. <context:property-placeholder location="classpath:db.properties" /> <bean id="pool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="${redis.host}" /> <constructor-arg name="port" value="${redis.port}" /> </bean> 3. 编写redis的工具类. @Component public class RedisUtil { @Autowired private JedisPool pool; public void set(String key,String value){ Jedis jedis = pool.getResource(); try { jedis.set(key,value); } finally { jedis.close(); } } } 4. 直接使用. 直@Autowired注入.
2. redis整合springboot
1. 方式1: (熟悉springboot-data-redis的API) 使用springboot的data系列,直接自动整合redis. 1. 导入依赖. spring-boot-starter-data-redis 2. 编写配置文件. 指定redis.host redis.port 3. 直接@Autowired使用. 注入RedisTemplate<?,?> 2. 方式2: (手动配置关于redis的信息.) 单独导入jedis依赖,手动配置. 1. 导入依赖. jedis 2. 在yml中配置redis的信息. redis.host redis.port 3. 在配置类中,引入redis配置信息,并创建JedisPool实例. ... @Bean public JedisPool pool(){ } 4. 直接编写工具类. RedisUtil封装各种set/get... 5. 直接@Autowired @RedisUtil
八. 修改APP项目.
1. 准备redis的环境和工具类.
2. shiro的自定义Session.
1. 自定义SessionDAO.
重写各种方法.
2. 自定义SessionManager.
重写retrieve方法.
3. 看看视频吧....
3. 将下载量的json数据保存到redis做缓存.
下载量每隔10分钟刷新一次. .. 保存到redis中的下载量信息是json字符串,不是byte[]. ..