redis的安装使用以及在python中操作redis

一、Redis介绍:

Redis可以看作是一个key-value的存储系统,它为我们提供了丰富的数据结构,包括lists,sets,ordered setshashes。还包括了对这些数据结构的丰富操作。

优点:

性能高:支持超过100+每秒的读写频率。

支持丰富的数据理性。

原子性:Redis的所有操作都是原子性的。

丰富的特性:支持publish/subscribe,通知,过期等特性。

WindowsReidis的安装:

Redis下载地址:

http://www.newasp.net/soft/67186.html#downloads

在使用redis之前,首先需要运行redis-server.exe,然后运行redis-cli.exe

二、Redis使用:

丰富的数据类型:

2.1.String类型:

 

String类型还支持批量的读写操作。

 

还可以存储数字,并支持对数字的加减操作。

 

String类型还支持对其部分的修改和获取操作

2.2 List

Redis能够将数据存储成一个链表,并能对这个链表进行丰富的操作

 RedisList集合的修改操作:

在某个值之前添加一项:

截取List集合中的几个值:

2.3 集合Sets类型

Redis能够将一些列不重复的值存储成一个集合。

Sets结构也支持相应的修改操作:

删除一个元素:

 

添加一个元素:

Redis还支持对集合的子交并补等操作:

交集:

 

并集:

补集:

2.4  有序集合(Sorted Sets类型)

  Sorted  SetsSets结构相似,不同的是存在Sorted Sets中的数据会有一个score属性,并在写入时就按这个score排好序。

 

其中,第一个参数为顺序,第二个参数为值。

如果写入的值已经存在,则返回失败结果0

 

查询某个值在集合中的位置:

 

查询在该范围内的值得总数:

 

查询:

 

2.5 Hash类型:能够存储key对多个属性的数据。

三、Publish /Subscribe

Redis支持这样一种特性,可以将数据推送到某个信息管道中,然后其他人可以通过订阅这些管道来获取推送过来的数据。

3.1订阅信息管道:

从一个客户端输入如下命令:

 

从另外一个客户端推送消息:

 

第一个客户端就可以获取到推送的消息

 

3.2按一定模式批量订阅

用命令订阅所有channel开头儿的信息通道:

 

推送信息:

 

第一个客户端收到的推送信息内容:

 

四、数据设置过期时间:

Redis支持按key设置过期时间,过期后值将被删除(在客户端看来是被删除了的)

TTL命令可以获取某个key的过期时间(-1表示永不过期)

 

Exists:判断key值是否存在

Expire:设置过期时间

 

还可以通过Redis设置某个时间点的过期时间:

 

五、事务性:

 Redis中以nx结尾命令都是在判断这个值存在不存在,如果不存在才会执行命令:

 如下:setnx表示先观察name值是否存在,如果不存在,再重新赋值。

 

 Redis还支持自定义命令组合,通过multiexec,可以将命令组合起来一起执行。可以用dicard  

 命令来中断执行中的命令序列。

 

 六、持久化

Redis中所有的数据都是存储在内存中的,并支持数据的持久化。

6.1 数据快照

通过save命令将数据存到一个扩展名为rdb的数据文件。

 

dump.rdb文件中:

 

七、管理命令

Redis支持多个DB,默认为16个,不同DB间数据具有隔离性。可以再多个DB间实现数据的移动。使用select 命令,选择数据库,使用move命令实现不同DB之间数据的移动。

 

Redis中的一些命令还可以获取一些运行信息:

Dbsize:查看数据库的大小

 

通过对flushdb命令对某个数据库进行清除:

 

八、在Python中使用redis

    在python中提供了操作redis的模块。

#coding:utf-8

import redis

r=redis.Redis(host='127.0.0.1',port=6379,db=1)

info=r.info()



for key in info:

    print "%s:%s"%(key,info[key])

    

print "-------------"*3



print "dbsize%s"%r.dbsize()

print "ping%s"%r.ping()



print "-------------"*3

print r.get('name')





#----------------------------------String操作------------------------

#设置元素

print "-------------"*3

r.set('name','aa')

print r.get('name')



#为c1设置值

print "-------------"*3

r['c1']='bar'

print r.getset('c1','jj')



#得到所有包含name的key的值

print "-------------"*3

print 'keys:',r.keys('name*')





#随机取一个Key值

print "-------------"*3

print 'randomkey:',r.randomkey()





#查看数据是否存在 有则返回True ,没有则返回Flase



print r.exists('name')



#删除数据  删除成功返回1

print 'delete:',r.delete('name')

print r.delete('c1')



#更改key的值:

print r.set('name','gina')

r.rename('name','new_name')

print r.get('new_name')



#设置数据过期时间

r.expire('c1',5)

#查看过期时间  永不过期返回-1

r.set('name','haha')

print r.ttl('name')





r.save()

#取最后一次save时间

print  r.lastsave()

r.set('intv','9')

print r.incr('intv')

print r.incrby('intv','5')



r['c1']='aa'

r['c2']='bb'



#批量获取数据

print r.mget('c1','c2')



#获取开头为c的key的值

print r.keys('*c*')







#---------------------对list集合进行操作---------------------

print r.lpush('students','gina')

print 'list len:',r.llen('students')

print r.lrange('students',start=0,end=3)

#取出一位

print 'list index 0:',r.lindex('gina',0)

#截取列表

print r.ltrim('students',start=0,end=3)





#--------------------对set集合进行操作-----------------------

r.sadd('s','a')

r.scard('s')

#判断对象是否存在

print r.sismember('s','a')

print r.sinterstore('s1','s2','s3')



#求并集

r.sunion('s1','s2')

#在s1中有,但在s2,s3中没有的数:

r.sdiff('s1','s2','s3')

#取一个随机数

print r.srandmember('s1')

 

 

 

  

 

 

 

 

 

你可能感兴趣的:(python)