博客
关于我
学习笔记(十七)——redis(CRUD)
阅读量:324 次
发布时间:2019-03-04

本文共 4775 字,大约阅读时间需要 15 分钟。

文章目录

一、redis概述

Redis本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。

Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性能消息队列服务等等。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

redis适合的场景

(1)会话缓存(Session Cache)

最常用的一种使用redis的情景是会话缓存(session cache)。用redis缓存会话比其他存储(如Memcached)的优势在于:redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?

幸运的是,随着 redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供redis的插件。

(2)全页缓存(FPC)

动态页面静态化 我们会把今天访问的页面但修改的很少的页面放到redis当中

除基本的会话token之外,redis还提供很简便的FPC平台。回到一致性问题,即使重启了redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。

(3)队列

reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得redis能作为一个很好的消息队列平台来使用。redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。

如果你快速的在Google中搜索“redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用redis作为broker.

(4)排行榜/计数器

(5)发布/订阅

最后(但肯定不是最不重要的)是redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用redis的发布/订阅功能来建立聊天系统!


二、redis存储

redis的基本操作

1、连接redis数据库redis-cli

(默认使用的是0号数据库,数据库是没有名称的,默认有16个,通过0-15来标识)

如果想要正常显示中文,重新进入redis(命令:redis-cli --raw

2、切换到其他数据库select n (n为数据库的编号)


三、redis数据类型

1、string类型

一个key值对应一个value值

对应格式(举例):

key         valueid            4

1.1、增(改)

set key value :设置一个key,值为value,类型为string。

如果这个key存在,则更新value值;如果这个key不存在,则就将key value值存下来 。
示例:

set name wwc

1.2、追加数据

append key value:即在已有数据后面追加value值

示例:

append name 666------------------------查询后name对应的值:wwc666

1.3、查

get key:获得对应key的value值

示例:

get name-----------------------结果:wwc666

type key :查看类型

示例:

type name    -->stringtype age     -->string 注意无论age是数字还是字符串这里都显示string类型

1.4、删

del key:删除key即对应的value值

示例:

del name

1.5、一次设置多个key value

mset key value key value···· :一次添加多个key value

示例:

mset name wwc sex boy age 19

1.6、一次获取多个value

mget key··· :一次获取多个value

示例:

mget name sex age

1.7、其他操作

自加:incr

自减:decr
加: incrby
减: decrby

示例:

set num 100  incr num     incr会识别字符串里面的数字并加一--------->结果: 101decr num     incr会识别字符串里面的数字并减一--------->结果: 100incrby num 100  在原有的基础上增加100--------->结果: 200decrby num 50  在原有的基础上减少50--------->结果: 150

2、list类型

字符串列表

对应格式(举例):

key         valuelist1       1 2 3 4

2.1、增

在插入数据时,如果该键不存在,redis将新建一个该键。

rpush key value.... :在尾部添加数据

示例:

rpush list1 1 2 3

lpush key value... : 在头部添加数据

示例:

lpush list1 7 8 9------------结果:7 8 9 1 2 3

2.2、查

lrange key start stop: 从start开始查找到stop结束

示例:

lrange list1 0 4       #查看下标0到4的数据lrange list1 0 -1      #查看下标0到最后一个数据

lindex key index: 根据index查看某个数据

示例:

lindex list1 0    #查看下标为0的数据

type key :查看类型

示例:

type list1     --->list

2.3、改

lset index value: 修改下标为index的值为value

示例:

lset list1 0 2    #将下标为0的数据修改为2

2.4、删

rpop key : 在尾部删除一个数据

示例:

rpop list1

lpop key : 在头部删除一个数据

示例:

lpop list1

lrem key count value :删除指定个数的数据

(注意:count=0时代表所有)
示例:

lrem list1 0 3   #删除list1中所有3lrem list1 1 3  # 删除list1中1个3

del key:删除所有数据

示例:

del list1

3、hash类型

是一个键值对集合

对应格式(举例):

key         valueuser       username wwc sex boy age 20

3.1、增

hset key field value:添加

示例:

hset user name wwc  #这里user就是keyhset age 20

3.2、查

hget key field:查找filed对应的value

示例:

hget user namehget user age

hkeys key:查看所有的field

示例:

hkeys user

hvals key:获取指定 key 所有字段的值

示例:

hvals user

hgetall key:查看域值(所有的field value)

示例:

hgetall user

hlen key :查看有多少个域值对

示例:

hlen user

type key :查看类型

示例:

type user    --->hash

3.3、删

hdel key field:删除字段

示例:

hdel user name  #删除user里面的name

3.4、添加多个field value

hmset key field value...:一次添加多个field value

示例:

hmset user name wwc age 20 sex boy

3.5、获取多个field的value

hmset key field...:获取多个field的value

示例:

hmget user name age sex

4、set类型

无序的字符集合 ,和python的集合一样都有无序性 、唯一性

对应格式(举例):

key    valueset1    1 2 3 4

4.1、增

sadd key value····:添加集合(key)及元素(value)

示例:

sadd set1 1 2 3 4 5

4.2、查

smembers key:查看集合元素

示例:

smembers set1

type key:查看类型

示例:

type set1

4.3、删

spop key (count):随机删除一个(count个)

示例:

spop set1   #随机删除一个spop set1 3  #随机删除3个元素

srem key members...:指定删除

示例:

srem set1 1 2 3

4.4、其他

smove set1 set2 3 :把3从set1中移动到set2中

sismember set1 3:判断3是否在set1中 ( 0代表不在 ,1代表在)

交集:sinter set4 set5 :求set4和set4的交集

并集:sunion set4 set5 :求set4和set4的并集

差集:sdiff set4 set5 : 求set4和set4的差集


5、zset类型

有序集合类型

对应格式(举例):

key    valuezset1    1 one 2 two 3 three...

5.1、增

示例:

zadd zset1 1 one 2 two 3 three 1 four 1 five

5.2、查

示例:

zrange zset1 0 -1          通过索引查看zrangebyscore zset1 2 3    通过权值查看2到3之间的元素(包括2和3)zscore zset1 four          查看four的权值

5.3、删

示例:

zrem zset1 five             直接删除fivezremrangebyrank zset1 0 1   删除索引在0-1zremrangebyscore zset1 1 2  删除权值在1-2

拓展:全局操作

key * :查看所有key值

del key :删除

exists key :不存在返回0 存在返回1

rename key new_key :改名

expire key seconds :设置过期时间

ttl key :查看过期时间(-1代表永久,2过期)

persist key :撤销过期时间

subscribe 1009 : 订阅 频道:1009 (注:1009是你自己写的)

publish 1009 '你好' :发布 频道:1009

转载地址:http://xbah.baihongyu.com/

你可能感兴趣的文章
上周热点回顾(10.20-10.26)
查看>>
上周热点回顾(2.16-2.22)
查看>>
上周热点回顾(3.2-3.8)
查看>>
[网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断
查看>>
.NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
查看>>
上周热点回顾(6.29-7.5)
查看>>
上周热点回顾(7.27-8.2)
查看>>
上周热点回顾(9.28-10.4)
查看>>
.NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存
查看>>
[网站公告]数据库服务器IOPS跑满造成网站不能正常访问
查看>>
上周热点回顾(3.21-3.27)
查看>>
上周热点回顾(3.28-4.3)
查看>>
上周热点回顾(5.2-5.8)
查看>>
上周热点回顾(5.9-5.15)
查看>>
上周热点回顾(8.8-8.14)
查看>>
.NET跨平台之旅:将示例站点升级至 .NET Core 1.1 Preview 1
查看>>
上周热点回顾(10.24-10.30)
查看>>