一、redis介绍
1.1 NoSQL 数据库的分类
1.1.1键值(Key-Value)存储数据库
相关产品有 Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB,
主要应用于内容缓存,主要用于处理大量数据的高访问负载。
1.1.2列存储数据库
相关产品有 Cassandra, HBase, Riak,典型应用于分布式的文件系统。
1.1.3文档型数据库
相关产品有 CouchDB、MongoDB,典型应用于 Web 应用,可以突破传统
关系型数据库的结构限制,存储数据更为灵活。
1.1.4图形(Graph)数据库
相关数据库有 Neo4J、InfoGrid、Infinite Graph,典型应用于社交网络,
存储数据采用图结构利用图结构相关算法
1.2 redis是什么
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。提供很多种语言的API。<br />redis的官网地址:[https://redis.io/](https://redis.io/)<br />所有的版本的下载列表:[https://download.redis.io/releases/](https://download.redis.io/releases/)
1.3作用
- 持久化
- 效率高,高速缓存
- 发布订阅系统
- 地图信息分析
- 计数器,计时器(浏览量
-
二、redis安装
安装 redis 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,需要安装 gcc:yum install gcc-c++。
redis.io下载最新版redis-5.0.9.tar.gz后解压。 然后将下载的 redis 上传到虚拟机的/usr/local 目录下
- 接下来解压 Redis 压缩包,使用命令:tar -xf redis-5.0.9.tar.gz
- 进入解压后的目录进行编译和安装,编译使用命令 make,安装使用命令make install。
安装之后,默认情况下,redis安装时产生的命令文件是在 user/local/bin 目录中
./redis-benchmark //用于进行redis性能测试的工具
./redis-check-dump //用于修复出问题的dump.rdb文件
./redis-cli //redis的客户端
./redis-server //redis的服务端
./redis-check-aof //用于修复出问题的AOF文件
./redis-sentinel //用于集群管理
三、redis的启动停止
3.1 redis的启动
启动redis非常简单,直接./redis-server就可以启动服务端。
默认情况下,redis-server会以非daemon的方式来运行,且默认服务端口为6379。
查看服务器是否启动:ps -ef | grep redis
使用客户端:redis-cli //在6379端口下
3.2 redis的停止
要停止正在运行的 Redis 服务,可以采用 Linux 命令的方式直接杀掉 Redis服务的进程,也可以使用 Redis 客户端想服务器发送 shutdown 指令来关闭Redis 服务器。
1.使用客户端指令
./redis-cli SHUTDOWN
2.使用命令
./redis-cli -p 6379 shutdown
四、常用命令
#切换数据库
select 3
#查看数据库大小
DBSIZE
#查看数据库所有key
key *
#清除当前数据库
FLUSHDB
#清除所有数据库
FLUSHALL
五、redis的五大数据类型(value)
redis是一种高级的key:value存储系统,其中value支持五种数据类型
4.1.字符串(strings)
在redis中没有int,boolean,double等等这些类型,所有的java中的基本类型和String在redis中都是<br />string。**
4.1.1插入数据的操作
redis 中赋值操作使用 set 命令,语法 set key value
多个值的插入使用mset命令,语法 mset key1 value1 key2 value2 …
set name wyb //键为name,值为wyb
mset name wyb age 23 //姓名和年龄为键,wyb 23为值
4.1.2取值的操作
redis 中进行取值操作使用 get 命令,语法:get key
多个值的获取使用mget命令, 语法:mget key1 key2 …
注意:使用get时如果键不存在则返回(nil)
get name //取值
mget name age //
4.1.3获取对应的值并修改
getset name lqy //将name的值改为lqy
4.1.4删除命令
在 Redis 中删除数据使用 del 命令,语法:del key
del age //删除
注:如果字符串里面有特殊符号,比如空格,就需要用””包裹起来。
4.1.5自增自减
当存储的字符串是整数时,让当前键值递增,并返回递增后的值。语法:incr key。
get num //假设有num且为1
incr num //结果:(integer)2
get num //结果:2
注:如果key不存在会自动创建key并赋值为1
可以使用incrby num 20
自定义每次加20.
自减命令:decr key.
4.1.6追加数据
语法:append key value
//birthday:2021-3-5
append birthday " 18:57:20"
get birthday //"2021-3-5 18:57:20"
4.1.7获取长度
语法:strlen key
4.2.字符串列表(list)
列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。<br /> 列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为 0(1),获取越接近两端的元素速度就越快。这意味着 即使是一个有几千万个元素的列表,获取头部或尾部的 10 条记录也是极快的。
# 添加元素 :使用lpush rpush
127.0.0.1:6379> lpush list1 1 2 3 4 5 #←左插入
(integer) 5
127.0.0.1:6379> rpush list2 a b c d e #右插入
(integer) 3
#查看元素 - range
lrange list1 0 6
#5 4 3 2 1 a b
#-1表示最后一个元素,索引是从0开始的
lrange list1 0 -1
# 5 4 3 2 1 a b c d e
#在列表中可以使用 lpop 和 rpop 分别列表的左侧和右侧弹出一个数据,该数据会首先返回,然后再从原列表中删除
lpop list1
#获取list1长度
llen list1
小结:
- 实际上是一个链表
- 在两边插入值或者改动,效率最高。中间的插入修改,相对效率低
- 消息排队!消息队列(Lpush Rpop),栈(Lpush Lpop)
4.3.字符串集合(set)
redis的set类型和java中的HashSet一样,无序且不重复
集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等, 由于集合类型的 Redis 内
部是使用值为空的散列表实现,所有这些操作的时间复 杂度都为 0(1)。 Redis 还提供了多个集合之间的
交集、并集、差集的运算。#添加元素
sadd set1 1 2 3 4 5 a b c d e
#获取所有元素
SMEMBERS set1
#删除元素
srem set1 2 5
#查询是否存在某个元素
SISMEMBERS set1 a
#集合中元素个数
SCARD set1
4.4.有序字符串集合(sorted set)