友情链接:.NET项目开发者博客

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')

 

 

 

  

 

 

 

 

 

posted @ 2014-04-08 16:15  千年老妖  Views(3740)  Comments(0Edit  收藏  举报
友情链接:.NET项目开发者博客