数据库运用02--Redis浅析

基础

概念

redis是一款高性能的NOSQL系列的非关系型数据库
  • NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。redis。hbase等
  • NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

NOSQL和关系型数据库比较

优点
  1. 成本
  2. 查询速度
  3. 存储数据的格式
  4. 扩展性
缺点
  1. 维护的工具和资料有限
  2. 不提供对sql的支持
  3. 不提供关系型数据库对事务的处理。
  • 一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据

主流的NOSQL产品

键值(Key-Value)存储数据库
  • 内容缓存,主要用于处理大量数据的高访问负载

  • Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB

  • 一系列键值对

列存储数据库
  • Cassandra, HBase, Riak

  • 分布式的文件系统

  • 以列簇式存储,将同一列数据存在一起

文档型数据库
  • CouchDB、MongoDB

  • Web应用(与Key-Value类似,Value是结构化的)

  • 一系列键值对

图形(Graph)数据库
  • Neo4J、InfoGrid、Infinite Graph
  • 社交网络
  • 图结构

Redis

Redis支持的键值数据类型

  • 字符串类型 string
  • 哈希类型 hash
  • 列表类型 list
  • 集合类型 set
  • 有序集合类型 sortedset

redis的应用场景

  • 缓存(数据查询、短连接、新闻内容、商品内容等等)
  • 聊天室的在线好友列表
  • 任务队列。(秒杀、抢购、12306等等)
  • 应用排行榜
  • 网站访问统计
  • 数据过期处理(可以精确到毫秒
  • 分布式集群架构中的session分离

下载安装

官网

中文网

  • 解压后make编译直接可以使用,查看官网

    • redis.conf:配置文件
    • redis-cli.exe:redis的客户端
    • redis-server.exe:redis服务器端

命令操作

redis的数据结构

  • redis存储的是key,value格式的数据,其中key都是字符串,value有5种不同的数据结构

value的数据结构

  • 字符串类型 string
  • 哈希类型 hash : map格式
  • 列表类型 list : linkedlist格式。支持重复元素
  • 集合类型 set : 不允许重复元素
  • 有序集合类型 sortedset:不允许重复元素,且元素有顺序
字符串类型 string
  • 存储: set key value/set username zhangsan
  • 获取: get key/get username
  • 删除: del key/del age
哈希类型 hash
  • 存储: hset key field value
  • 获取
    • hget key field: 获取指定的field对应的值
    • hgetall key:获取所有的field和value
  • 删除: hdel key field
列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
  • 添加
    1. lpush key value: 将元素加入列表左边(头部)
    2. rpush key value:将元素加入列表右边
  • 获取
    • lrange key start end :范围获取
    • lrange myList 0 -1
  • 删除
    1. lpop key: 删除列表最左边的元素,并将元素返回
    2. rpop key: 删除列表最右边的元素,并将元素返回
集合类型 set : 不允许重复元素
  • 存储:sadd key value – value可以写多个,用空格

  • 获取:smembers key:获取set集合中所有元素

  • 删除:srem key value:删除set集合中的某个元素

    有序集合类型
  • sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

  • 存储:zadd key score value/zadd mysort 60 zhangsan

  • 获取:

    • zrange key start end [withscores]
    • zrange mysort 0 -1
    • zrange mysort 0 -1 withscores
  • 删除:zrem key value

通用命令
  • keys * : 查询所有的键
  • type key : 获取键对应的value的类型
  • del key:删除指定的key value

持久化

redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

redis持久化机制

RDB:默认方式,不需要进行配置,默认就使用这种机制
  • 在一定的间隔时间中,检测key的变化情况,然后持久化数据
  • 编辑redis.conf文件
#   after 900 sec (15 min) if at least 1 key changed
save 900 1
  • 重新启动redis服务器,并指定配置文件名称 redis-server.exe redis.windows.conf
  • 数据保存在:.pdb文件
AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
  • 编辑redis.windwos.conf文件
    • appendonly no(关闭aof)
    • appendfsync always : 每一次操作都进行持久化
    • appendfsync everysec : 每隔一秒进行一次持久化(默认)
    • appendfsync no : 不进行持久化
  • 存入:appendonly.dof

Java客户端 Jedis

Jedis: 一款java操作redis数据库的工具.

使用步骤
  • 下载jedis的jar包
  • 使用
    1. 获取连接,创建对象
    2. 操作
    3. 关闭连接

Jedis操作各种redis中的数据结构

字符串类型 string
  • set/get

  • 可以使用setex()方法存储可以指定过期时间的 key value

    • 将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
      • jedis.setex(“activecode”,20,”hehe”);
哈希类型 hash : map格式
  • hset/hget/hgetAll
列表类型 list : linkedlist格式。支持重复元素
  • lpush / rpush
    • jedis.lpush(“mylist”,”a”,”b”,”c”);//从左边存
  • lpop / rpop
    • lrange start end : 范围获取
    • jedis.lrange(“mylist”, 0, -1);
集合类型 set : 不允许重复元素
  • sadd
  • smembers:获取所有元素
  • 有序集合类型 sortedset:不允许重复元素,且元素有顺序
  • zadd
    • jedis.zadd(“mysortedset”,3,”亚瑟”);
  • zrange

jedis连接池: JedisPool

创建JedisPool连接池对象
  • 调用方法 getResource()方法获取Jedis连接
创建一个配置对象(耦合度低)
  • JedisPoolConfig()
创建Jedis连接池对象
  • JedisPool(config,”localhost”,6379)
获取连接
  • jedisPool.getResource()
使用
  • 关闭 归还到连接池中 close
连接池工具类
  • 使用redis缓存一些不经常发生变化的数据。
    • 数据库的数据一旦发生改变,则需要更新缓存
    • 数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
    • 在service对应的增删改方法中,将redis数据删除。

redis安装和配置

安装

  • 下载安装包
    上次课前资料提供的安装包,或者:官网下载
    建议上传到我们的home下:/home/leyou/

  • 解压

    tar -xvf redis-4.0.9.tar.gz
  • 编译安装

    mv redis-4.0.9 redis
    cd redis
    make && make install

配置

修改安装目录下的redis.conf文件

vim redis.conf

修改以下配置:

#bind 127.0.0.1 # 将这行代码注释,监听所有的ip地址,外网可以访问
protected-mode no # 把yes改成no,允许外网访问
daemonize yes # 把no改成yes,后台运行

启动或停止

redis提供了服务端命令和客户端命令:

  • redis-server 服务端命令,可以包含以下参数:
    start 启动
    stop 停止
  • redis-cli 客户端控制台,包含参数:
    -h xxx 指定服务端地址,缺省值是127.0.0.1
    -p xxx 指定服务端端口,缺省值是6379

设置开机启动

1) 输入命令,新建文件

vim /etc/init.d/redis

输入下面内容:

#!/bin/sh
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
PATH=/usr/local/bin:/sbin:/usr/bin:/bin

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis.pid

CONF="/home/leyou/redis/redis.conf"

case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
if [ "$?"="0" ]
then
echo "Redis is running..."
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
while [ -x ${PIDFILE} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
exit 1
esac

然后保存退出

注意:以下信息需要根据安装目录进行调整:

EXEC=/usr/local/bin/redis-server # 执行脚本的地址

REDIS_CLI=/usr/local/bin/redis-cli # 客户端执行脚本的地址

PIDFILE=/var/run/redis.pid # 进程id文件地址

CONF=”/usr/local/src/redis-3.0.2/redis.conf” #配置文件地址

2)设置权限

chmod 755 /etc/init.d/redis

3)启动测试

/etc/init.d/redis start

启动成功会提示如下信息:

Starting Redis server...
Redis is running...

4)设置开机自启动

chkconfig --add /etc/init.d/redis
chkconfig redis on
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值