Redis(缓存技术)教程

  • A+
所属分类:Java SQL Redis PHP JavaWeb

概述

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库

为什么要使用redis?

场景:
在企业级开发,需要完成导航条的数据,但是导航条的数据一般都是来源于数据库,只要每个人过来看到导航条的数据,都意味着连接了一次数据库,如果有1w人,需要连1w次数据库,在这里,我们发现所有人连接数据库拿到的数据都是一样的,也就意味着这个导航条的数据不是时时更新的数据,既然所有人看到的都一样,那有没有什么更好的方式去解决频繁操作数据库带来效率低的问题

方案:
让第一个访问的人去mysql数据库先获取一份,然后放入内存中,剩下所有的人再去内存中获取即可

解决:使用nosql数据库(redis)解决(缓存技术)
好处:解决频繁访问数据库带来效率低的问题

面试题:非关系数据库和关系型数据库的区别?

关系型数据库:mysql oracle db2  sqlserver..
特点:数据都在硬盘上,有着表的表的概念,表和表之间有着关系(1vN NvN)
优点:数据的安全性和完整性都高 
缺点: 读取慢

非关系型数据库:redis
特点:数据都在内存中,没有表的概念,只有键值对的概念 key(String)=value(5种)
优点:读取极快
缺点:数据的安全性和完整性都不高
if(redis==null){
    mysql
    redis
}else{
    redis
}
企业开发:关系型数据库和非关系型数据库是相辅相成的

redis的应用场景?

1  新闻内容
2  聊天室好友  
3  12306

安装

官网下载地址:http://redis.io/download
Redis图形化界面客户端(最下面有旧版免费redis-desktop-manager):
https://github.com/uglide/RedisDesktopManager
Window版:https://github.com/microsoftarchive/redis/tags  
下载得到的redis-2.8.9.zip解压即可

redis的数据类型

redis数据支持的值类型: key键都是字符串 value值是5种

1 字符串类型(掌握)      String=String    例如:s1 "abcd"
2 散列类型(掌握)         String=hash      例如:s2  username jack
3 列表类型(了解)         String=list         例如:s3  a b c d a b c d
4 集合类型(了解)         String=set         例如:s4  a b c d 
5 有序集合类型(了解)  String=zset       例如:s5 1 a 2 b 4 c 4 d 5 e

字符串类型(掌握)

设置
    set key value 
获取
    get key
删除
    del key

散列类型(掌握)

把值看成map集合(适合存储对象的属性值) 例如: user1 username jack

设置单个
hset  key  subkey subvalue :设置一个键值对
获取单个
hget  key  subkey:获取一个子键的值
设置多个
hmset key subkey1 subvalue1  subkey2 subvalue2 ...:设置多个键值对  
获取多个
hmget key subkey1 subkey2...:获取多个子键的值
获取所有属性以属性值
hgetall key:获取指定key值的所有信息           
删除-子键
hdel key subkey1 subkey2 ...                                        
删除
del key

redis视图化工具的安装

列表类型(了解)

两端的设置: 
lpush key member1 member2.. : 往左边开始插入
    lpush l1 a b c d 
        d c b a
rpush key member1 member2.. :往右边开始插入    
    rpush l2 a b c d
        a b c d   
lrange key startindex endindex:查看  例如:lrange key 0 -1 :全查

两端的删除:    
lpop key :左边弹出一个    
rpop key :右边弹出一个

集合类型(无序且唯一)(了解)

sadd key member1 member2 :设置   
srem key member1 member2 :删除
smembers key :查看

扩展:有序集合类型(有序且唯一的)(了解)

条件:必须要有一个数值来与之关联,因为要通过这个数值来排序

zadd key score1 value1 score2 value2...: 设置添加
zrem key value1 value2... :删除指定成员
zcard key :展示元素的长度
zscore key value :获取成员的数字

redis通用的操作(掌握)

1 keys *:查询所有的key
2 exists key:判断是否有指定的key 若有返回1,否则返回0
3 rename key 新key:重命名
4 type key:判断一个key的类型
5 del key :删除

扩--多数据库操作(掌握)

select index:切换库
move key 指定数据库: 将当前库的数据移动到指定库中
dbsize: 返回当前库中有多少个key
flushdb:清空当前数据库数据
flushall:清空当前实例下所有的数据库数据

redis的持久化(了解)

持久化: 就是将数据从内存保存到硬盘

1 rdb(快照方式) 
默认开启的  
    redis.windows.conf    查save
保存策略:
    #   after 900 sec (15 min) if at least 1 key changed
    #   after 300 sec (5 min) if at least 10 keys changed
    #   after 60 sec if at least 10000 keys changed

2 aof(配置文件命令方式)
默认不开启
若要开启,必须修改配置文件redis.windows.conf  搜appendonly
    appendonly yes
保存策略:
    # appendfsync always  每次都写入
    # appendfsync everysec  每秒写入
    appendfsync no 不写入

Java代码操作redis数据库数据(重点)

java---jdbc---mysql

java---jedis---redis

使用步骤:

1.导入jar包
2.创建jedis对象
        new Jedis(ip,端口)
3.通过jedis操作redis数据库 
4.释放资源

使用连接池优化: // 创建数据源的配置对象 JedisPoolConfig config = new JedisPoolConfig(); // 配置初始化连接 config.setMaxTotal(1000); // 配置空闲时期的最大连接 config.setMaxIdle(5); .......

// 创建一个连接池
JedisPool pool = new JedisPool(config, "192.168.2.132",6379);
// 获取jedis对象
Jedis jedis = pool.getResource();
  • 资源分享QQ群
  • weinxin
  • 官方微信公众号
  • weinxin
沙海
Linux服务器网站环境安装
TripodCloud:性价比最高的CN2 GIA服务器
Java图书管理系统
动力节点最牛Java自学基础教程

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: