NOSQL之redis的配置
数据类型与数据库分类
存储数据类型分类
结构化数据:可以通过二维表格形式表述这个数据
非结构化数据:不方便以二维表格形式表述的这种类型的数据。
数据库类型分类
sql结构化数据库:里面存储的数据类型是结构化数据。(关系型数据库)
nosql非结构化数据库:里面存储的数据类型是非结构化数据。(非关系型数据库)
非关系型数据库产生背景
1、对数据库高并发读写需求
2、对海量数据高效存储与访问需求
3、对数据库高可拓展性与高可用性需求
redis简介
1、redis基于内存运行并支持持久化
2、采用key-value(键值对)的存储形式
优点:
(1)具有极高的数据读写速度
(2)支持丰富的数据类型
(3)支持数据的持久化(内存写到磁盘、二进制日志)
(4)原子性
(5)支持数据备份
redis支持五种数据类型
string(字符串)
hash(哈希)
list(列表)
set(集合)
zset(sortedset:有序集合)
Redis与Memcached差别
说到缓存技术,只要有一定经验的开发人员,肯定会想到redis和memcached这两个。并且在BAT里,redis已经逐渐取代了memcached,成为分布式场景广泛使用的缓存方案。接下来,我们就分析下,redis是如何取代memcached,成为开发者的宠儿的。
存储类型不同
虽然redis和memcached都是内存型数据库,并且memcached不仅能够存储string类型,还能够存储图片、文件、视频等格式的文件。然而对于更多的使用内存数据库做缓存以及分布式方案的程序开发者来说,memcached提供的string类型存储的应用场景非常有限,而存储图片视频的功能又十分鸡肋(许多公司的用户场景是没这方面需求)。相比之下,redis提供set,hash,list等多种类型的存储结构,非常适合分布式缓存的实现。
数据落盘
memcached 数据不可恢复,虽然大多数人使用缓存以及分布式方案都不会要求数据持久化,但是谁也不能保证不出现万一的情况。一旦发生稳定性问题,memcached挂掉后,数据是不可恢复的,而redis除了支持在配置里打开数据落盘(RDB),还能通过aof来找回数据。
Redis支持五种数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字符串)
1.string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
2.string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
3.string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
4.set 键 值 设置键值对 get 键 获取键的值
Hash(哈希)
1.Redis hash 是一个键值(key=>value)对集合。
2.Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
3.Hset:添加hash数据 hget:获取hash数据 hmget:获取多个hash数据
List(列表)
1.Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
2.lpush:从左边推入值 lpop:从左边弹出值 rpush:从右边推入值 rpop:从右边弹出值 llen:查看某个list数据类型的长度
Set(集合)
1.Redis 的 Set 是 string 类型的无序集合。
2.集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 o(1)。
3.sadd 命令添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
zset(sorted set:有序集合)
1.Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
2.不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
3.zset的成员是唯一的,但分数(score)却可以重复。
项目部署
1、解压缩
[root@server1 ~]# tar zxvf redis-5.0.4.tar.gz
2、设置编辑文件
root@server1 ~]# cd redis-5.0.4/
[root@server1 redis-5.0.4]# make 进行配置
[root@server1 redis-5.0.4]# make install PREFIX=/usr/local/redis //更改安装路径可以用make PREFIX=安装路径 install
3、创建链接
[root@server1 redis-5.0.4]# ln -s /usr/local/redis/bin/* /usr/sbin/
[root@server1 redis-5.0.4]# cd utils/
[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]
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/sbin/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/sbin/redis-server
Cli Executable : /usr/sbin/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!
六次回车
4、安装完成
[root@server1 utils]# netstat -anpt | grep redis //查看端口
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 61171/redis-server
[root@server1 utils]# cd
5、编辑配置文件
[root@server1 ~]# vi /etc/redis/6379.conf
检索Protected 在上面修改
bind 192.168.188.10 172.0.0.1
默认只连接127.0.0.1,允许接收本机地址,绑定地址
[root@server1 ~]# /etc/init.d/redis_6379 stop //停止Redis服务
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@server1 ~]# /etc/init.d/redis_6379 start //启动Redis服务
Starting Redis server...
[root@server1 ~]# redis-cli -h 192.168.188.10 -p 6379
//连接redis数据库
192.168.188.10:6379>
部署五种数据类型
String(字符串)
[root@server1 ~]# redis-cli -h 192.168.188.10 -p 6379
192.168.188.10:6379> set s 25 //设置s的值为25
OK
192.168.188.10:6379> get s 获取s值 输出返回25
"25"
192.168.188.10:6379> type s //查看s的状态类型
string
192.168.188.10:6379> incr s //自增长+1 25+1
(integer) 26 // integer:整数
192.168.188.10:6379> get s
"26"
192.168.188.10:6379> decr s //自减 -1 26-1
(integer) 25
192.168.188.10:6379> get s
"25"
192.168.188.10:6379> incrby s 25 //设置增值为25 25+25
(integer) 50
192.168.188.10:6379> decrby s 20 //设置下降值为20 50-20
(integer) 30
192.168.188.10:6379>
Hash(哈希)
[root@server1 ~]# redis-cli -h 192.168.188.10 -p 6379
192.168.188.10:6379> hset hash1 song1 s //设置字段song1 为s
(integer) 1
192.168.188.10:6379> hset hash1 song1 ss //设置字段song1 为ss
(integer) 0
192.168.188.10:6379> hset hash1 song2 ss //设置song2 为ss
(integer) 1
192.168.188.10:6379> hset hash1 song3 sss //设置song3为sss
(integer) 1
192.168.188.10:6379> hset hash1 shu1 s1 shu2 s2 设置字段shu1为s1 shu2 为s2
(integer) 2
192.168.188.10:6379> hget hash1 song1 //获取song1为ss
"ss"
192.168.188.10:6379> hget hash1 song2 //获取song2为ss
"ss"
192.168.188.10:6379> hget hash1 song3 //获取song3为sss
"sss"
192.168.188.10:6379> hmget hash1 shu1 shu2 //获取shu1为s1 shu2为s2
1) "s1"
2) "s2"
192.168.188.10:6379> hmget hash1 song1 song2 song3 shu1 shu2 获取song1为ss song2为ss song3为sss shu1为s1 shu2为s2
1) "ss"
2) "ss"
3) "sss"
4) "s1"
5) "s2"
192.168.188.10:6379>
List(列表)
192.168.188.10:6379> lpush list1 1 //左边输入第一位数字,数值为1
(integer) 1
192.168.188.10:6379> lpush list1 2 //左边输入第二位数字,数值为2
(integer) 2
192.168.188.10:6379> lpush list1 3 //左边输入第三个数字,数值为3
(integer) 3
192.168.188.10:6379> lpush list1 4 //左边输入第四个数字,数值为4
(integer) 4
192.168.188.10:6379> lpush list1 5
(integer) 5
192.168.188.10:6379> lpush list1 6 //左边输入第六个数字 数值为6
(integer) 6
192.168.188.10:6379> lpop list1 //左边输出左边第一排的数字为6
"6"
192.168.188.10:6379> rpop list1 //右边输出右边排列第一个数字为1
"1"
192.168.188.10:6379> llen list1 //属猪长度为4
(integer) 4
192.168.188.10:6379> lrange list1 0 4 /列出 list1中的所有数值
1) "5"
2) "4"
3) "3"
4) "2"
192.168.188.10:6379>
Set(集合)无序集合
192.168.188.10:6379> sadd set1 10 //添加键值10 10未存在 添加成功返回1
(integer) 1
192.168.188.10:6379> sadd set1 20
(integer) 1
192.168.188.10:6379> sadd set1 30
(integer) 1
192.168.188.10:6379> sadd set1 30 //添加键值30 30已存在 添加失败 返回0
(integer) 0
192.168.188.10:6379> sadd set1 40
(integer) 1
192.168.188.10:6379> scard set1 //查看set数据中 键值个数为4
(integer) 4
192.168.188.10:6379> sismember set1 50 //判断50是否在set数据中 不存在输出0
(integer) 0
192.168.188.10:6379> sismember set1 10 //判断10 是否存在set数据中 存在输出1
(integer) 1
192.168.188.10:6379> sismember set1 20
(integer) 1
192.168.188.10:6379> sismember set1 30
(integer) 1
192.168.188.10:6379> sismember set1 40
(integer) 1
192.168.188.10:6379> srem set1 40 //删除键值40 删除成功返回1
(integer) 1
192.168.188.10:6379> sismember set1 40 //判断键值40是否存在与set数据中,不存在输出返回0
(integer) 0
192.168.188.10:6379>
数字列表
(integer) 1
192.168.188.10:6379> sadd set1 56
(integer) 1
192.168.188.10:6379> sadd set1 65
(integer) 1
192.168.188.10:6379> sadd set1 34
(integer) 1
192.168.188.10:6379> sadd set1 26
(integer) 1
192.168.188.10:6379> sadd set1 89
(integer) 1
192.168.188.10:6379> smembers set1 //列出set数据上的所有键值,数字自动进行从小到大排序列出
1) "10"
2) "20"
3) "26"
4) "30"
5) "34"
6) "40"
7) "56"
8) "65"
9) "89"
192.168.188.10:6379>
添加字母进行列表显示
192.168.188.10:6379> sadd set2 ss //在set2里面添加键值ss
(integer) 1
192.168.188.10:6379> sadd set2 ssf
(integer) 1
192.168.188.10:6379> sadd set2 song
(integer) 1
192.168.188.10:6379> sadd set2 shu
(integer) 1
192.168.188.10:6379> sadd set2 feng
(integer) 1
192.168.188.10:6379> sadd set2 song123
(integer) 1
192.168.188.10:6379> smembers set2 //列出set2中的所有键值 发现字母列出时,未自动进行排序
1) "song"
2) "ss"
3) "ssf"
4) "shu"
5) "song123"
6) "feng"
192.168.188.10:6379>
zset(无序集合)
192.168.188.10:6379> zadd zset1 1 song1 //添加键值,分数为1,成员song1
(integer) 1
192.168.188.10:6379> zadd zset1 4 song2
(integer) 1
192.168.188.10:6379> zadd zset1 1.6 song3
(integer) 1
192.168.188.10:6379> zadd zset1 5.6 song4
(integer) 1
192.168.188.10:6379> zadd zset1 6.7 song5
(integer) 1
192.168.188.10:6379> zadd zset1 7.9 song6
(integer) 1
192.168.188.10:6379> zrangebyscore zset1 0 10 //只显示成员的排序
1) "song1"
2) "song3"
3) "song2"
4) "song4"
5) "song5"
6) "song6"
192.168.188.10:6379> zrange zset1 0 10 withscores // 连带分数进行排序
1) "song1"
2) "1"
3) "song3"
4) "1.6000000000000001"
5) "song2"
6) "4"
7) "song4"
8) "5.5999999999999996"
9) "song5"
10) "6.7000000000000002"
11) "song6"
12) "7.9000000000000004"
192.168.188.10:6379>