redis部署及数据类型
redis简介
1、redis基于内存运行并支持持久化
2、采用key-value(键值对)的存储形式
优点:
(1)具有极高的数据读写速度
(2)支持丰富的数据类型
(3)支持数据的持久化(内存写到磁盘、二进制日志)
(4)原子性
(5)支持数据备份
数据类型与数据库分类
存储数据类型分类
结构化数据:可以通过二维表格形式表述这个数据
非结构化数据:不方便以二维表格形式表述的这种类型的数据。
数据库类型分类:
sql结构化数据库:里面存储的数据类型是结构化数据。(关系型数据库)
nosql非结构化数据库:里面存储的数据类型是非结构化数据。(非关系型数据库)
非关系型数据库产生背景:
1、对数据库高并发读写需求
2、对海量数据高效存储与访问需求
3、对数据库高可拓展性与高可用性需求
redis下载
wget https://download.redis.io/releases/redis-5.0.7.tar.gz #可更改版本
安装部署redis
[root@server1 ~]# yum -y install gcc gcc-c++ make #安装编译环境
[root@server1 ~]# tar zxvf redis-5.0.7.tar.gz
[root@server1 redis-5.0.7]# make #因分装化,直接安装
[root@server1 redis-5.0.7]# make PREFIX=/usr/local/redis install #指定命令文件存放位置并安装
[root@server1 redis-5.0.7]# cd /usr/local/redis/
[root@server1 redis]# ls
bin
[root@server1 redis]# cd bin/
[root@server1 bin]# ls
redis-benchmark redis-check-rdb redis-sentinel
redis-check-aof redis-cli #连接终端 redis-server
[root@server1 redis-5.0.7]# cd utils/ #进入redis工具包
[root@server1 utils]# ls
build-static-symbols.tcl hashtable redis_init_script.tpl
cluster_fail_time.tcl hyperloglog redis-sha1.rb
corrupt_rdb.c install_server.sh #配置一些文件的存放路径 releasetools
create-cluster lru speed-regression.tcl
generate-command-help.rb redis-copy.rb whatisdoing.sh
graphs redis_init_script
[root@server1 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] #默认端口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
#拓展文件路径,需要自己写,默认提供路径为/usr/local/bin/redis-server,更改为/usr/local/redis/bin/redis-server
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort. #回车
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@server1 utils]# cd /etc/redis/ #查看配置文件
[root@server1 redis]# ls
6379.conf
[root@server1 redis]# ln -s /usr/local/redis/bin/\* /usr/local/bin/ #注:\*为*,将redis命令软链接到系统命令下,便于执行
[root@server1 redis]# netstat -anpt | grep 6379 #查看状态,已启用
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 12450/redis-server
[root@server1 redis]# /etc/init.d/redis_6379 stop #关闭
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@server1 redis]# netstat -anpt | grep 6379 #变为WAIT状态
tcp 0 0 127.0.0.1:6379 127.0.0.1:50758 TIME_WAIT -
[root@server1 redis]# /etc/init.d/redis_6379 restart #重启redis
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@server1 redis]# redis-cli #不指端口可直接登录,为本地登录
127.0.0.1:6379>
[root@server1 redis]# vim /etc/redis/6379.conf
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #此行后修改
bind 127.0.0.1 20.0.0.11 #127.0.0.1添加监听地址
[root@server1 redis]# /etc/init.d/redis_6379 restart #重启
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@server1 redis]# redis-cli -h 20.0.0.11 -p 6379 #指定IP端口可登录,-指定IP
20.0.0.11:6379>
20.0.0.11:6379> help @list #查看list信息
20.0.0.11:6379> help @set #查看set信息
###20.0.0.11:6379> set key value [expiration EX seconds|PX milliseconds] [NX|XX] #输入set会有提示信息###
设置键 值
20.0.0.11:6379> set lcx 123
OK
20.0.0.11:6379> set abc 321
OK
20.0.0.11:6379> set cba 123
OK
查看键 值
20.0.0.11:6379> keys * #查看键
1) "cba"
2) "abc"
3) "lcx"
20.0.0.11:6379> get lcx #查看键的值
"123"
20.0.0.11:6379> keys * #查看所有的库
1) "myset:__rand_int__"
2) "counter:__rand_int__"
3) "key:__rand_int__"
4) "cba" #自己创建的
5) "mylist"
6) "lcx" #自己创建的
7) "abc" #自己创建的
20.0.0.11:6379> SELECT 10 #切换到第11个库,因从0计数所以第11为10
OK
20.0.0.11:6379[10]> keys *
(empty list or set) #此时为空
20.0.0.11:6379> MOVE lcx 10 #将自建的一个库转移到第11个库中
(integer) 1
20.0.0.11:6379> SELECT 10
OK
20.0.0.11:6379[10]> keys *
1) "lcx"
20.0.0.11:6379> SELECT lcx #原有的库将被移除
(error) ERR invalid DB index
20.0.0.11:6379> SELECT 10
OK
20.0.0.11:6379[10]> FLUSHDB #清空库的内容
OK
20.0.0.11:6379[10]> keys *
(empty list or set)
20.0.0.11:6379[10]> SELECT 0 #0为所有库
OK
20.0.0.11:6379> keys *
1) "myset:__rand_int__"
2) "counter:__rand_int__"
3) "key:__rand_int__"
4) "cba"
5) "mylist"
6) "abc"
redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字符串)
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
实例:set 键 值 设置键值对 get 键 获取键的值
20.0.0.11:6379> set string 10
OK
20.0.0.11:6379> get string
"10"
20.0.0.11:6379> INCR string #加一
(integer) 11
20.0.0.11:6379> DECR string #减一
(integer) 10
20.0.0.11:6379> INCRBY string 5 #多数值增加
(integer) 15
20.0.0.11:6379> DECRBY string 5 #多数值减少
(integer) 10
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
实例:Hset:添加hash数据 hget:获取hash数据 hmget:获取多个hash数据
20.0.0.11:6379> hset hash a a
(integer) 1
20.0.0.11:6379> hset hash b b c c
(integer) 2
20.0.0.11:6379> hget hash a
"a"
20.0.0.11:6379> hmget hash a b c
1) "a"
2) "b"
3) "c"
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
实例:lpush:从左边推入值 lpop:从左边弹出值 rpush:从右边推入值 rpop:从右边弹出值 llen:查看某个list数据类型的长度
20.0.0.11:6379> LPUSH abc 1
(integer) 1
20.0.0.11:6379> LPUSH abc 2
(integer) 2
20.0.0.11:6379> LPUSH abc 3
(integer) 3
20.0.0.11:6379> llen abc
(integer) 3
20.0.0.11:6379> RPOP abc
"1"
20.0.0.11:6379> RPOP abc
"2"
20.0.0.11:6379> RPOP abc
"3"
20.0.0.11:6379> LRANGE abc 0 2 #加范围,从第一个到第三个
1) "3"
2) "2"
3) "1"
Set(集合)
Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
sadd 命令
添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
sadd key member
scard:查看set数据中存在的元素个数
sismember:判断set数据中是否存在某个元素
srem:删除某个set数据中的元素
实例:
20.0.0.11:6379> sadd set 10
(integer) 1
20.0.0.11:6379> sadd set 10
(integer) 0
20.0.0.11:6379> sadd set 11
(integer) 1
20.0.0.11:6379> scard set
(integer) 3
20.0.0.11:6379> SISMEMBER set 10
(integer) 1
20.0.0.11:6379> SISMEMBER set 11
(integer) 1
20.0.0.11:6379> SISMEMBER set 13
(integer) 0
20.0.0.11:6379> srem set 11
(integer) 1
20.0.0.11:6379> SISMEMBER set 11
(integer) 0
20.0.0.11:6379> SMEMBERS set
1) "10"
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
使用方法:zadd key score member
zcard:查询
zrang:数据排序
实例:
20.0.0.11:6379> zadd zset 10 1
(integer) 1
20.0.0.11:6379> zadd zset 20 2
(integer) 1
20.0.0.11:6379> zadd zset 30 3
(integer) 1
20.0.0.11:6379> zcard zset
(integer) 3
20.0.0.11:6379> ZRANGEBYSCORE zset 0 100
1) "1"
2) "2"
3) "3"
20.0.0.11:6379> ZRANGE zset 0 100 withscores
1) "1"
2) "10"
3) "2"
4) "20"
5) "3"
6) "30"