redis内存数据库介绍及简单命令

一:redis数据库简介

Redis 是开源免费的,遵守BSD协议,是一个高性能的key-value非关系型数据库。

数据库的特点

1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

2.Redis不仅仅支持简单的key-value类型的数据,同时还提供String,list,set,zset,hash等数据结构的存储。

3.Redis支持数据的备份,即master-slave模式的数据备份。

4.性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

5.原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

6.丰富的特性 – Redis还支持 publish/subscribe, 通知, 设置key有效期等等特性。

redis支持的语言

ActionScript Bash C C# C++ Clojure Common Lisp
 Crystal D Dart Elixir emacs lisp Erlang
 Fancy gawk GNU Prolog Go Haskell Haxe Io Java Javascript
 Julia Lua Matlab mruby Nim Node. js objective-C
 OCaml Pascal Perl PHP Pure Data Python R Racket
 Rebol Ruby Rust Scala Scheme Smalltalk Swift Tcl VB VCL

redis的应用场景

1,会话缓存(最常用)
2,消息队列,比如支付
3,活动排行榜或计数
4,发布,订阅消息(消息通知)
5,商品列表,评论列表等

redis数据库类型

Redis一共支持五种数据类:string(字符串),hash(哈希),list(列表),set(集合)和zset(sorted set有序集合)。

二:关系型数据库与非关系型数据库

关系型数据库

●一个结构化的数据库,创建在关系模型基础上
般面向于记录
●包括
Oracle、 MySQL、 SQL Server Microsoft Access、dB2等

非关系型数据库

●除了主流的关系型数据库外的数据库,都认为是非关系型
●包括
◆ Redis、 MongBD、 Hbase、 CouhDB等

非关系型数据库产生的背景

High performance—对数据库高并发读写需求
Huge Storage——对海量数据高效存储与访问需求
High Scalability&& High Availability——对数据库高
可扩展性与高可用性需求

三:redis安装部署

操作步骤

1.解压软件包
2.make && make install
3.设置redis相关配置文件

编译安装redis

 [root@localhost src]# tar xvzf redis-4.0.9.tar.gz
 [root @localhost src]# cd redis-4.0.9/
 [root@localhost redis-4.0.9]# make
 [root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install
 [root @localhost ~] ln -s /usr/local/redis/bin/* /usr/local/bin/

设置redis相关配置文件

[root @localhost redis]# cd /usr/local/src/redis-4.0.9/utils/
[root@localhost utils]./install_ server.sh

 Welcome to the redis service installer
 This script will help you easily set up a running redis server
 Please select the redis port for this instance: [6379]
 Selecting default: 6379
 Please select the redis config file name [/etc/redis/6379.conf]
 Selected default-/etc/redis/6379. conf
 Please select the redis log file name[var/log/redis_6379.log]
 Selected default-/var/log/redis_6379.log
 Please select the data directory for this instance [/var/lib/redis/6379]
 Selected default-/var/lib/redis/6379
 Please select the redis executable path [] /usr/local/redis/bin/redis-server

redis进程控制

[root@localhost utils]# /etc/init.d/redis_6379 status

 Redis is running(5436)
 [root@localhost utils]# /etc/init.d/redis_6379 stop
 Stopping...
 Redis stopped

[root @localhost utils]# /etc/init.d/redis_6379 start

 Starting Redis server...

[root@localhost utils]# /etc/init.d/redis_6379 restart

 Stopping...
 Redis stopped
 Starting Redis server...

Redis配置文件

配置参数(/etc/redis/6379.conf)
●bind:监听的主机地址
●port:端口
● daemonize yes:启用守护进程
● pidfile:指定PID文件
● loglevel notice:日志级别
● logfile:指定日志文件

四:redis数据库常用命令

redis-cli命令行工具

连接本地数据库

 [root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379>

连接远程数据库

[root@localhost utils] redis-cli -h 192.168.10.161-p6379

192.168.10.161:6379>

获取命令帮助

help @:获取中的命令列表
help :获取某个命令的帮助
help :获取可能帮助的主题列表

set和get

set:存放数据
get:获取数据
[root@localhost~]#/usr/local/redis/bin/redis-cli

 127.0.0.1: 6379> set teacher zhanglong
 OK
127.0.0.1:6379> get teacher
 "zhanglong"

key相关命令

●keys:获取符合规则的键值列表
●exists:判断键值是否存在
●del:删除当前数据库的指定key
●type:获取key对应 value的值类型
rename(覆盖)/ renamenx(不覆盖):对已有的key进行
重命名
●dbsize:查看当前数据库中key的数目

redis-benchmark测试工具

●-h:指定服务器主机名
●-p:指定服务器端口
●-C:指定并发连接数
●-n:指定请求数
●-d:以字节的形式指定SET/GET值的数据大小
●-q:强制退出Redis,仅显示query/sec值
●向P地址为192.168.10.161、端口为6379 Redis的服务器
发送100个并发连接与100000个请求测试性能
[root@localhost~]# /usr/local/redis/bin/redis-benchmark -h 192.168.10.161 -p 6379 -c 100 -n 100000
●测试存取大小为100字节的数据包的性能
[root@localhost~]#/usr/local/redis/bin/redis-benchmark -h 192.168.10.161 -p 6379 -q -d 100

redis多数据库操作

■ Redis支持多数据库,默认支持16个数据库,0-15命名
■多数据库相互独立,互不干扰
■多数据库常用命令
●多数据库间切换
●多数据库间移动数据
●清除数据库内数据
注意:非关系型数据库按应用存放,关系型数据库按场景存放

五:实验案列

Redis数据类型

Redis支持五种数据类型: string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

String(字符串)

string是redis最基本的类型,你可以理解成与 Memcached一模一样的类型,一个key对应一个 value
string类型是二进制安全的。 redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
string类型是Redis最基本的数据类型, string类型的值最大能存储512mb
示例:
192.168.195.180: 6379> set name zhangsan
OK
192.168.195.180:6379>get name
“zhangsan”

Hash(哈希字典)

Redis hash是一个键值(key=> value)对集合。
Redis hash是一个 string类型的 field和 value的映射表,hash特别适合用于存储对象。
每个hash可以存储2的32次方-1键值对。
作用场景:
键值对集合即编程语言中的Map类型
适合存储对象并且可以像数据库中 update一个属性一样只修改某一项属性值
示例:
192.168.195.180:6379> hmset stu name lisi age 18 sex 男
OK
192.168.195.180:6379> hget stu name
“lisi”
192.168.195.180:6379> hget stu age
18
192.168.195.180:6379> hget stu sex
“\xe7\x94\xb7” (此处性别显示的是乱码,想要显示成中文,只需要在命令结尾加上’ - - raw '即可)

[rootlocalhost utils]# redis-cli -h 192.168.195.18 -p 6379 --raw
192.168.195.180:6379> hget stu sex
男

List(列表)

Redis列表是简单的字符串列表,按照插入顺序排序,可以重复。可以添加一个元素到列表的头部(左边)或者尾部(右边)
列表最多可存储2的32次方-1元素。
作用场景
增删快提供了操作某一段元素的API
1最新消息排行等功能(比如朋友圈的时间线)2消息队列

192.168.195.180:6379> lpush hobby play
1
192.168.195.180:6379> lpush hobby read
2
192.168.195.180: 6379> lpush hobby sport
3
192.168.195.180:6379> lrange hobby 0 10
 sport
 read
 play

Set(集合)

Redis的Set是string类型的无序集合
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
作用场景:
1、共同好友 2、利用唯一性统计访问网站的所有独立ip 3、好友推荐时根据tag求交集,大于某个阈值就可以推荐
sadd命令
添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0
示例:
192.168.195.180:6379> sadd color red green yellow
3
192.168.195.180:6379> smembers color
red
yellow
green
192.168.195.180:6379> sadd color red
0
(set集合不能有重复数据,当输入重复数据时会返回0值,表示无法储存)

Zset(sorted set:有序集合)

Redis zset和set一样也 string是类型元素的集合且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。 redis正是通过分数来为集合中的成员进行从小到大的排序
zset的成员是唯一的,但分数(score)却可以重复。
作用场景:
将Set中的元素增加一个权重参数score,元素按score有序排列
数据插入集合时,已经进行天然排序
1、排行榜 2、带权重的消息队列

zadd命令
添加元素到集合,元素在集合中存在则更新对应score
示例:

192.168.195.180:6379> zadd color 0 red
1
192.168.195.180:6379> zadd color 0 blue
1
192.168.195.180:6379> zadd color 1 green
1
192.168.195.180:6379> zadd color 1 yellow
1
192.168.195.180:6379> zrangebyscore color 0 10
blue
red
green
yellow
192.168.195.180:6379> zrangebyscore color 0 0
blue
red
192.168.195.180:6379> zrangebyscore color 1 1
green
yellow

多数据库概念

Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。
Redis是一个字典结构的存储服务器,而实际上一个 Redis实例提供了多个用来存储数据的字典,
客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,
所以可以将其中的每个字典都理解成一个独立的数据库。
每个数据库对外都是一个从0开始的递增数字命名, Redis默认支持16个数据库(可以通过配置文件支持更多,无上限)
可以通过配置databases来修改这一数字。客户端与 Redis建立连接后会自动选择0号数据库,
不过可以随时使用 SELECT命令更换数据库,如要选择1号数据库:
示例:

192.168.195.180:6379> select1
 OK
192.168.195.180:6379[1]> set name zhangsan
 OK
192.168.195.180:6379[1]> select2
 OK
192.168.195.180:6379[2]> set name zhangsan
 OK

清空所有数据库数据

192.168.195.180:6379[2]> FLUSHALL
OK
192.168.195.180:6379[2]> get name

注意:
Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。
另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,
要么连一个数据库也没有权限访问。最重要的一点是多个数据库之间并不是完全隔离的,
比如 FLUSHALLRedis命令可以清空一个实例中所有数据库中的数据。
综上所述,这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。
作用场景:
可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,
但不适宜使用0号数据库存储A应用的数据而使用1号数据库B应用的数据,不同的应用应该使用不同的 Redis实例存储数据。
由于Redis非常轻量级,一个空Redis实例占用的内存只有1M左右,所以不用担心多个redis实例会额外占用很多内存。

Key常规管理

验证key是否存在 exists

192.168.195.180:6379> set name zhangsan
OK
192.168.195.180:6379> exists name
1
192.168.195.180:6379> exists names
0

重命名 rename

192.168.195.180:6379> rename name na
OK
192.168.195.180:6379> get na
zhangsan

设置超时时间 PEXPIRE(单位:毫秒)

192.168.195.180:6379> PEXPIRE na 3000
1
192.168.195.180:6379> get na

查看剩余时间 PTTL(单位:毫秒)

192.168.195.180:6379> PEXPIRE name 30000
1
192.168.195.180:6379> PTTL name
22582

取消超时时间 PEXPIRE

192.168.195.180:6379> set name zhangsan
OK
192.168.195.180:6379> PEXPIRE name 50000
1
192.168.195.180:6379> PTTL name
44606
192.168.195.180:6379> PERSIST name
1
192.168.195.180:6379> PTTL name
-1
192.168.195.180:6379> get name
zhangsan
(设置超时时间,释放内存,是一种数据库的优化)

查看类型 TYPE

192.168.195.180:6379> lpush color red blue
2
192.168.195.180:6379> TYPE color
list
192.168.195.180:6379> set name zhangsan
OK
192.168.195.180:6379> TYPE name
string

随机返回key RANDOMKEY

192.168.195.180:6379> mset age 18 score 88 sex boy
OK
192.168.195.180:6379> RANDOMKEY
sex
192.168.195.180:6379> RANDOMKEY
color
192.168.195.180:6379> RANDOMKEY
sex

查看所有key Keys *

192.168.195.180:6379> Keys *
color
score
sex
age

数据迁移数据库 Move

192.168.195.180:6379> move age 1
1
192.168.195.180:6379> select 1 (进入第二个数据库)
OK
192.168.195.180:6379[1]> get age
18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值