非关系型数据库在前面我们已经阐述了他的一些特点与性能,在这里将不在赘述,后面两个章节我们学习具有代表意义的两个非关系型数据库 redis 和 mongodb。这里我们将要总结的是基础的知识。包括他们的数据类型以及数据类型的使用。
redis数据库
redis特性:
1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2、Redis不仅仅支持简单的key-value类型的数据,同时还把value分为list,set,zset,hash等数据结构存储。
3、因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,提高效率。
redis数据模型:
1、redis是key—values的数据结构,每一条数据都是一个键值对。
2、redis的key是字符串的类型。注意:键不能重复。
3、值的类型分为5种:
数据名称 | 数据类型 |
---|---|
string | 字符串 |
hash | 哈希 |
list | 列表 |
set | 集合 |
Zset | 有序d23集合 |
redis的基本使用:
操作状态 | 操作指令 |
---|---|
连接redis | redis-cli |
推出redis | exit |
操作服务端 | sudo service redis start/stop/restart |
切换数据库 | select n(n是第n个数据库) |
数据库没有名称,默认为16个,通过0-15来标识,连接redis默认选择第一个数据库。
vip@redis:~# sudo service redis start #开启服务
vip@redis:~# redis-cli #进入数据库
127.0.0.1:6379> exit #退出数据库
vip@redis:~# sudo service redis stop #关闭服务
vip@redis:~# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
vip@redis:~# sudo service redis start
vip@redis:~# redis-cli
127.0.0.1:6379> select 2 #转换数据库
OK
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379>
redis的五大数据类型使用
一、string数据类型:
string是redis的最基本数据类型,一个key对应一个value。
操作状态 | 操作指令 |
---|---|
设置数据 | set key value (有则改,无则增) |
查看数据 | get key |
追加数据 | append key value |
删除数据 | del key |
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name tom
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set sex man
OK
127.0.0.1:6379> get name
"tom"
127.0.0.1:6379> get age
"18"
127.0.0.1:6379> get sex
"man"
127.0.0.1:6379> append name john
(integer) 7
127.0.0.1:6379> get name
"tomjohn"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379>
二、全局key操作
操作状态 | 操作指令 |
---|---|
查看所有key | keys * |
删除键值对 | del key (del exists key) exists 查看key是否存在 |
改名 | rename key new_key |
设置过期时间 | expire key second (ttl 查看过期时间,persist 删除过期时间) |
127.0.0.1:6379> keys *
1) "sex"
2) "ages"
127.0.0.1:6379> set name tom
OK
127.0.0.1:6379> del exists names
(integer) 0
127.0.0.1:6379> rename ages age #修改键名称
OK
127.0.0.1:6379> expire age 5
(integer) 1
127.0.0.1:6379> keys *
1) "sex"
2) "name"
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> expire age 100 #设置过期时间
(integer) 1
127.0.0.1:6379> ttl age #查看你过期时间
(integer) 95
127.0.0.1:6379> ttl age
(integer) 92
127.0.0.1:6379> ttl age
(integer) 89
127.0.0.1:6379> persist age #删除过期时间
(integer) 1
127.0.0.1:6379> ttl age #没有设置过期时间时候返回为-1
(integer) -1
127.0.0.1:6379> ttl ages #没有这个键的时候,返回为-2
(integer) -2
三、List数据类型:
list数据类型是一个字符串数据列表,可以在列表的头部或尾部添加数据,或删除数据。在插入数据时,如果该键不存在,redis将为该键创建一个
操作状态 | 操作指令 |
---|---|
添加数据 | rpush/lpush key value [value...] 左/右添加数据 |
查看数据 | lrange key start stop(开始位置,结束位置),或 lindex key index 查看某个数据 |
修改数据 | lset key index value |
删除数据 | rpop/lpop key 左/右 删除数据 |
127.0.0.1:6379> rpush name 111 222 333
(integer) 3
127.0.0.1:6379> lpush name 999 888 777
(integer) 6
127.0.0.1:6379> lrange name 0 10
1) "777"
2) "888"
3) "999"
4) "111"
5) "222"
6) "333"
127.0.0.1:6379> lindex name 3
"111"
127.0.0.1:6379> lindex name 1
"888"
127.0.0.1:6379> lset name 1 hhh
OK
127.0.0.1:6379> lrange name 0 10
1) "777"
2) "hhh"
3) "999"
4) "111"
5) "222"
6) "333"
127.0.0.1:6379> rpop name
"333"
四、hash数据类型:
hash类型是一个键值对的集合(key=>value),是string数据类型的field和value的映射。
user {name :zhangsan, age : 18} ,user=>key ,name,age=> field(域) ,zhangsan,18=>value
操作状态 | 操作指令 |
---|---|
添加数据 | hset key field value |
查看阈值 | hget key field 或hgetall key 查看所有的field和value |
查看所有的value | hvals key |
查看所有的field | hkeys key |
127.0.0.1:6379> hset user name zhangsan
(integer) 1
127.0.0.1:6379> hset user sex man
(integer) 1
127.0.0.1:6379> hset user age 18
(integer) 1
127.0.0.1:6379> hget user name
"zhangsan"
127.0.0.1:6379> hgetall user
1) "name"
2) "zhangsan"
3) "sex"
4) "man"
5) "age"
6) "18"
127.0.0.1:6379> hvals user
1) "zhangsan"
2) "man"
3) "18"
127.0.0.1:6379> hkeys key
(empty list or set)
127.0.0.1:6379> hkeys user
1) "name"
2) "sex"
3) "age"
五、set数据类型:
set类型为无序的字符集合,元素具有唯一性,不重复。
操作状态 | 操作指令 |
---|---|
添加数据 | sadd key member [member...] |
查看数据 | smembers key |
随机删除 | spop key |
指定删除 | srem key member [member...] |
127.0.0.1:6379> sadd class class1 class2
(integer) 2
127.0.0.1:6379> smembers class
1) "class1"
2) "class2"
127.0.0.1:6379> spop class
"class2"
127.0.0.1:6379> sadd class class3 class2 class4
(integer) 3
127.0.0.1:6379> smembers class
1) "class3"
2) "class1"
3) "class2"
4) "class4"
127.0.0.1:6379> srem class class3
(integer) 1
127.0.0.1:6379> smembers class
1) "class1"
2) "class2"
3) "class4"
127.0.0.1:6379>
六、sorted set数据类型:
每个成员都会有一个分数(score)与之关联,成员是唯一的,但是分数(score)是可以重复的。
操作状态 | 操作指令 |
---|---|
添加数据 | zadd score member [scor2 member2...] |
查看数据 | zrange key start stop 或 zrangebyscore key min max 通过score值查看 |
删除数据 | zrem key member [member...] |
通过索引删除多个数据 | zremrangebyrank key min max 或 zremrangebyscore key min max 通过score删除 |
127.0.0.1:6379> zadd work 1 work2
(integer) 1
127.0.0.1:6379> zadd work 1 work3
(integer) 1
127.0.0.1:6379> zadd work 2 work4
(integer) 1
127.0.0.1:6379> zadd work 2 work5
(integer) 1
127.0.0.1:6379> zadd work 3 work6
(integer) 1
127.0.0.1:6379> zadd work 3 work7
(integer) 1
127.0.0.1:6379> zrange work 0 10
1) "work1"
2) "work2"
3) "work3"
4) "work4"
5) "work5"
6) "work6"
7) "work7"
127.0.0.1:6379> zrangebyscore work 1 2
1) "work1"
2) "work2"
3) "work3"
4) "work4"
5) "work5"
127.0.0.1:6379> zrem work work1
(integer) 1
127.0.0.1:6379> zrange work 0 10
1) "work2"
2) "work3"
3) "work4"
4) "work5"
5) "work6"
6) "work7"
127.0.0.1:6379> zremrangebyrank work 1 2
(integer) 2
127.0.0.1:6379> zrange work 0 10
1) "work2"
2) "work5"
3) "work6"
4) "work7"
127.0.0.1:6379> zremrangebyscore work 2 3
(integer) 3
127.0.0.1:6379> zrange work 0 10
1) "work2"
127.0.0.1:6379>
总结:NoSql现在使用越来越广泛,越来越频繁。要掌握基本用法,使用命令可以在使用到的时候去查询,想要记住估计很难。
网友评论