Python——数据库——非关系数据库(Nosql)-redis

来源:互联网 发布:新东方 网络家教 编辑:程序博客网 时间:2024/06/06 01:15

常见[NoSQL]数据库

列存储:Hbase、Cassandra、Hypertable

文档存储:MongoDB、CouchDB

 k-v存储:TokyoCabinet、BerkeleyDB、MemcacheDBredis

 对象存储:Neo4J、Versant

Xml数据库:BerkeleyDB、BaseX


redis:存储在内存中的键值对,主要用于做缓存。

一、redis的安装

官网:redis.io   

redis命令大全中文版网站:redis.cn

1.Windows系统下的安装

①可执行文件:按照提示安装,一直点击下一步即可

②zip包:解压缩,配置路径,将bin目录的路径放置到path中,打开命令行切换到redis.conf文件所在路径,通过redis-server ./redis.windows.conf启动,redis-cli 进入redis

2.linux系统下的安装  

①apt / apt-get   install  redis-server

②下载zip压缩包,上传到linux系统,解压压缩包,使用make命令编译redis源代码(c++),等待结束后,使用make install 命令 ,安装编译后的文件。使用redis-server  ./redis.conf  (当前路径)启动 。使用vim 命令修改配置文件,vim redis.conf文件,将bind 127.0.0.1注释掉,/daemomize no 修改为yes,(后台进程、守护进程),保存退出,重启服务,sudo service redis-server restart

登录:先输入命令redis-server ./redis.conf  ,启动redis,然后输入redis-cli 登录,如下图:



3.linux系统下redis的操作

select   数据库名:进入某数据库,默认16个数据库,下标(0~15),进入下标为0的数据库。


key<键>的数据类型:字符串

value<值的类型>:string字符串、hash哈希、list列表、set集合、zset有序集合

根据值的类型的不同,分别介绍相应的redis操作

3.1   字符串类型:

(1)赋值

①设置或获取一对key-value的值:

set :设置key-value的值,  get:获取某个key对应的值


设置或获取多个key-value的值:

mset :设置key-value的值,  mget:获取某个key对应的值



(2)修改数据

①为某个键的值依次增加1,(incr  key),依次减去1(decr  key)


②为某个键的值依次增加指定的数值,(incrby  key  num  ),依次减去指定的数值(decrby  key  num )


(3)为键值对设置失效时间(set expire)

①setex  key  seconds  value(设置key的同时设置有效时间)


ttl key查看失效时间,-2表示已经失效,-1表示永久有效,其他表示还有多长时间失效。我们还没有为age设置失效时间,这是ttl age,返回的就是-1


②expire  key  seconds    (为某个已经存在的key设置有效时间)


即setex相当于set 和expire


②ttl  key,查看某个键值对的失效时间,-1表示永久存储,-2表示已经失效,其余的表示还有多长时间失效。以上例子已经说明,不再赘述。

(5)删除key的值

①del  key  [key......] :  删除一个或多个key的值



②也可以通过为该key设置较短的生效时间删除key:expire  key  second,如将生效时间设置为1s,则1s后该key-value值自动消失。

(6)关于Key的各种操作操作(无论何种数据类型,通用,专门针对key的操作)

 ①   del key:根据key删除键值对

 ②   expire key seconds:给key设置过期时间

 ③   ttl key:查看键的有效时间

以上3种已经在上面展示过了,请看以下操作的实例:

 ④   keys pattern:查找键,支持正则    keys   * 为查找所有的key


⑤   exists key:查找键是否存在,存在返回1(即true),否则返回0(即false)


 ⑥   type key:查看键对应的值的类型 ,这里介绍的是值为字符串类型的,所有目前所有的key对应的值类型都为字符串,若是hash、list、set、zset的类型也会相应返回对应的类型,后面会介绍。



如hash类型,hset   key   field   value





3.2    hash :用于存储对象key,该对象的值对应的是多个键值对,类似与字典,field  value [field  value]...

(1)赋值

①为一个对象(user1)设置一个属性(name)及值(value):hset   key   field   value  ;

获取一个属性值:hget  key  field。(这里set/get前面加一个h,表示hash)

例如:hset  user1  name  “rulai”/   hget  user1   name   



设置多个属性值:hmset   key  field  value [field value......];

获取多个属性值:hmget  key  field [field......]


(2)

①获取所有的键值对: hgetall  key ,在这里key表示一个对象,name、age等为属性


②获取某个对象所有的属性名称:hkeys  key(hkeys的keys相当于field,后面的key相当于对象名称)


③获取某个对象所有的属性值:hvals  key


(4)删除一个或多个属性(field)的值: hdel   key   field[field]...



(5)获取对象长度:hlen  key   (即key中的属性个数)



(6)判断某个属性是否存在:hexists  key  field  返回值为0表示不存在,1表示存在


(7)获取属性长度:hstrlen  key  field


3.3   List列表  :用于记录/保存多个有序的数据

①在列表头部增加一个或多个数据:lpush  key  value [value](key为列表名)


因为从头部增加的,所以刚好被反序保存在list1中


②在列表尾部增加一个或多个数据:rpush   key  value[value],正序增加


③在一个元素前/后插入数据:linsert  key  before/after  privot  value(privot表示在列表中的某个值前/后插入)


④设置(修改)指定索引位置的值:lset   key  index  value


⑤删除并且获取key对应的list的第一个元素:lpop  key


⑥删除并且获取key对应的list的最后一个元素:rpop key


⑦查询某个范围内的key对应的list的值:lrange  key start  end。


⑧获取列表长度: llen key


⑨获取列表中索引对应的元素:lindex  key index


⑩获取列表中start和stop组成的新列表,即截取目标列表:ltrim   key  start    end  (这里l表示列表list)


5.Set集合:用于存储不重复的无序的数据

①添加多个数据到集合中:sadd  key  value[value](key表示集合名称),数据是无序的。


②获取key集合中所有的数据:smembers  key,如上图所示。

③判断value是否在集合key中存在:sismember  key  value (存在返回1,不存在返回0)


④获取key集合中元素的个数:scard  key


⑤多个集合的交集:sinter  key[key...]

差集:sdiff   key[key...]

并集:sunion  key[key...]

6.Zset集合:有序的set集合(一般将list的数据放置在set中去重,再放置在zset中变成有序)

①添加多个带权重(score)的数据到zset中:zadd  key  score  value[score value ...](若多个元素的权重相等,则按照ASCII编码排序,权重数字越小,优先级越高)



②获取指定范围中所有元素:zrange   key  start  end,如上图所示。

③返回集合中元素个数:zcard  key


④返回score值范围内的数据,也就是权重范围内的元素个数:zcount  key   min  max


⑤返回集合中的某一个元素(member)的权重(score)score: zscore  key  member