NoSQL简介
NoSQL有多种解释:(not relational SQL)意思为‘非关系SQL’,(NoSQL=not only SQL),意思为‘不仅仅是SQL’
NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间不同,甚至远远超过两种关系型数据库不同。可以说,各种NoSQL产品各有所长,成功的NoSQL必然特博尔适应于某些场合或者某些应用。
目前众多网站,如淘宝,京东,百度都在使用NoSQL的产品。
redis简介
redis是一个免费开源的Nosql产品。
Redis使用ANSIC语言编写,是一个key-value存储系统。它支持存储的value类型很多,包括string(字符串)、hash(哈希类型)、list(列表)、set(集合)、和zset(sorted set--有序集合)
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
redis是一个高性能的key-value NoSQL产品。它提供了java、C/C++、C#、PHP、JAVAScript、perl、Object-C、Python、ruby、Eriang等开发接口,使用很方便。
Redis的启动
服务端的启动
redis-server
客户端的启动
redis-cli 这种方式不支持中文
redis-cli --raw 支持中文方式启动
redis基本操作
测试与redis服务器是否连通
ping
当返回PONG说明已经连接成功
切换数据库
数据库没有名称,用数字的标识来代表不同的数据库
选择数据库,redis有从0到15、16个数据库
select 3 选择3号数据库
select 0 选择0号数据库
登录redis客户端,如果没有做任何select操作,默认选择0号数据库
Redis的数据类型
redis键值对的说明
redis是key-value的数据结构;
每条数据都是一个“键值对”
键(key)的类型是字符串(string)
值(value)的类型分为5中:
1.字符串string
2.哈希hash
3.列表list
4.无序集合set
5.有序集合zset
字符串 string
添加修改值
set 键 值 (set key value)
如果键不存在,就是添加
如果键存在,就是修改
添加一个键user1值为aaa
set user1 aaa
把键user1的值修改为bbb
set user1 bbb
setex 键 过期时间 值 (setex )
过期时间单位为秒
添加一个键user2 值为bbb 过期时间为3秒
setex user2 3 bbb
添加多个键值对
mset 键1 值1 键2 值2......
同时添加3个键值对
mset user1 ccc user2 ddd user3 eee
已有值后面追加值
append 键 值
键user1的值后面追加内容haha
append user1 haha
获取值
get 键
获取user1的值
get user1
一次获取多个值
mget user1 user2 user5
删除值
del 键1 键2 键n .......
删除键同时删除对应的值
del user1 user2
键相关操作
查找键
keys 键名
可以支持通配符*
查找user1是否存在
key user1
判断键是否存在
exists 键名
如果存在返回1
不存在返回0
判断user1是否存在
exists user1
查看键对应的值类型
type 键
查看user2对应值的类型
type user1
设置已有键的过期时间
expire 键 秒数
设置user2的过期时间为100秒
expire user2 100
查看键有效时间
ttl 键
返回值:
-1永远有效
-2表示键不存在
大于0,显示剩余有效时间,秒
查看user1的有效时间
ttl user1
hash 哈希
hash用于存储“键值对”集合
每个哈希中的键可以理解为字段(fideld),一个字段(field)对应一个值(value)
hash中的值(value)类型为字符串(string)
同一个哈希字段名(field)不可以重复
哈希操作
添加值
hset 键 字段 值
设置键huser1的字段为name键为tom
增加一个hash类型的键值对,字段为name 值为tom
hset 'huser1' 'name' 'tom'
添加多个值
hmset 值 字段1 值1 字段2 值2 ....... (本身hash就是由多个键值对组成)
添加一个huser2 值有两个
hmset huser2 name mary sex female
获取字段
hkeys 键
获取指定键的所有字段名
获取huser2所有字段
hkeys huser2
获取字段对应的值
hget 键 字段
获取huser2,字段name的值
hget huser2 name
获取多个字段对应的值
hmget 键 字段1 字段2
获取huser2 name和sex字段的值
hmget huser2 name sex
获取所有字段的值
hvals 键
获取huser2所有字段的值
hvals huser2
获取所有字段名和对应的值
hgetall 键
获取huser1所有字段包括值
hgetall huser1
删除字段
hdel 键 字段名
把键huser2的字段sex删除
hdel huser2 sex
列表 list
list介绍
列表中的值(value)类型为字符串(string)
列表中每个值按照添加的顺序排序
添加值
从列表左侧插入值
lpush 键 值1 值2......
新建一个键luser1,左侧添加值aa
lpush luser1 aa
从列表右侧插入值
rpush 键 值1 值2
rpush luser1 bb cc dd
从列表指定位置插入值
linsert key before 或 after 值 插入的新值
(before在..前 after在...后)
在指定的值前面或后面插入新值
在键luser1 cc前面插入11值
linsert luser1 before cc 11
在键luser1 cc后面插入22值
linsert luser1 after cc 22
获取值
lrange 键 start stop
start代表开始索引
stop代表结束索引
lrange 键 起始值的下一个值开始 终止索引下标
0 第一个值的索引为0
-1 最后一个值的索引为-1
获取列表所有的值
lrange luser 0 -1
获取从第三个元素开始获取到最后的值
lrange luser1 2 -1
修改值
lset 键 索引 值
修改制定索引的值
修改索引1的值为china(把第二个元素的值改为china)
lset luser1 1 china
删除值
lrem 键 count 值
count = 0 删除指定的所有值
count < 0 代表从右往左删除指定数量的值
count > 0 代表从左往右删除指定数量的值
将列表前count次出现的值移除
向键luser2中加入值h0,h1,h2,h3,h0,h1,h0,h1
rpush luser2 h0 h1 h2 h3 h0 h1 h0 h1
从后往前,从右往左,删除一个h0
lrem luser2 -1 h0
删除所有的h0
lrem luser2 0 h0
无序集合
set介绍
无序集合中的值(value)类型为字符串(string)
集合里不允许有重复的值,
对于集合里的值只能添加与删除,不能修改
添加值
sadd 键 值1 值2 值3 值4....
集合添加值
添加三个值 aa bb cc
sadd suser1 aa bb cc
获取值
smember 键
获取集合的值
获取suser1所有的值
smember suser1
删除值
srem 键 值
删除指定的值
删除suser1的值cc
srem suser1 cc
有序集合
zser介绍
有序集合中的值(value)类型为字符串(string)
集合里不允许有重复的值
每个值都会关联一个分数(score),分数(score)可以为负数,通过分数(score)将值从小到大排序
对于有序集合的值只能添加与删除,不能修改
添加值
zadd 键 score1 值1 score2 值2 .....
添加三个值 分别为1,3,5,2
添加的值会按照分数从小到大排序
zadd zuser1 1 aa 3 dd 5 ee 2 cc
获取值
zrange 键 start stop[withsores]
start 代表从0开始
最后一个索引为-1
withscores代表同时获取score
获取键zuser1的集合中所有的值
zrange zuser1 0 -1
获取键zuser1的集合所有的值,同时获取分数
zrange zuser1 0 -1withscores
通过score获取值
zrangebyscore 键 min max
min代表分数的起始值
max代表score的结束值
获取键zuser1的集合中分数(score)在4和9之间的值
zrangebyscore zuser 4 9
通过值得到score
zsore 键 值
得到指定值得score
得到键zuser1 值dd的分数
zscore zuser1 dd
删除值
zrem 键 值
删除指定的值
删除键zuser1中的值bb
zrem zuser1 bb
通过score删除值
zremrangebyscore 键 min max
min要删除score的最小值
max要删除score的最大值
score从0到10之间的值都删除
zremrangebyscore zuser1 0 10