一、Redis介绍:
Redis可以看作是一个key-value的存储系统,它为我们提供了丰富的数据结构,包括lists,sets,ordered sets和hashes。还包括了对这些数据结构的丰富操作。
优点:
性能高:支持超过100+每秒的读写频率。
支持丰富的数据理性。
原子性:Redis的所有操作都是原子性的。
丰富的特性:支持publish/subscribe,通知,过期等特性。
Windows下Reidis的安装:
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能够将数据存储成一个链表,并能对这个链表进行丰富的操作
Redis对List集合的修改操作:
在某个值之前添加一项:
截取List集合中的几个值:
2.3 集合Sets类型
Redis能够将一些列不重复的值存储成一个集合。
Sets结构也支持相应的修改操作:
删除一个元素:
添加一个元素:
Redis还支持对集合的子交并补等操作:
交集:
并集:
补集:
2.4 有序集合(Sorted Sets类型)
Sorted Sets和Sets结构相似,不同的是存在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还支持自定义命令组合,通过multi和exec,可以将命令组合起来一起执行。可以用dicard
命令来中断执行中的命令序列。
六、持久化
Redis中所有的数据都是存储在内存中的,并支持数据的持久化。
6.1 数据快照
通过save命令将数据存到一个扩展名为rdb的数据文件。
在dump.rdb文件中:
七、管理命令
Redis支持多个DB,默认为16个,不同DB间数据具有隔离性。可以再多个DB间实现数据的移动。使用select 命令,选择数据库,使用move命令实现不同DB之间数据的移动。
Redis中的一些命令还可以获取一些运行信息:
Dbsize:查看数据库的大小
通过对flushdb命令对某个数据库进行清除:
八、在Python中使用redis
在python中提供了操作redis的模块。
<span style = "font-size: 14px;" > #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‘ ) < / span> |
redis的安装使用以及在python中操作redis,布布扣,bubuko.com
原文:http://www.cnblogs.com/hanwenhuazuibang/p/3652238.html