redis基础(第一章)

概述html

redis是一种nosql数据库,他的数据是保存在内存中,同时redis能够定时把内存数据同步到磁盘,便可以将数据持久化,而且他比memcached支持更多的数据结构(string,list列表[队列和栈],set[集合],sorted set[有序集合],hash(hash表))。相关参考文档:http://redisdoc.com/index.htmlmysql

redis是一个key-value存储系统。和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。在此基础上,redis支持各类不一样方式的排序。与memcached同样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操做写入追加的记录文件,数据不会丢失,而且在此基础上实现了master-slave(主从)同步。c++

 

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部 分场合能够对关系数据库起到很好的补充做用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。redis

简而言之redis是属于非关系型数据库,存储结构是:key-value,内存-磁盘的存储方式。sql

 

redis使用场景:数据库

排行版/计数器:好比一些秀场类的项目,常常会有一些前多少名的主播排名。还有一些文章阅读量的技术,或者新浪微博的点赞数等。centos

做为消息队列:好比celery就是使用redis做为中间人。缓存

当前在线人数:仍是以前的秀场例子,会显示当前系统有多少在线人数。服务器

一些经常使用的数据缓存:好比咱们的BBS论坛,板块不会常常变化的,可是每次访问首页都要从mysql中获取,能够在redis中缓存起来,不用每次请求数据库。数据结构

把前200篇文章缓存或者评论缓存:通常用户浏览网站,只会浏览前面一部分文章或者评论,那么能够把前面200篇文章和对应的评论缓存起来。用户访问超过的,就访问数据库,而且之后文章超过200篇,则把以前的文章删除。

好友关系:微博的好友关系使用redis实现。

发布和订阅功能:能够用来作聊天软件。

 

redis和memcached的比较:

 

 

redis平常操做

yum install redis -y

 使用yum安装的redis版本是3.2的

使用 systemctl restart redis 启动

1.安装最新版本:centos7

wget http://download.redis.io/releases/redis-5.0.0.tar.gz

tar -zxvf redis-5.0.0.tar.gz

yum install gcc

yum install gcc-c++

mv redis-5.0.0  /usr/local/redis  #移动redis

cd  /usr/local/redis   #切换目录

make  #直接make编译安装

cp src/redis-server /usr/bin/   #复制文件

cp src/redis-cli /usr/bin/    #复制文件

 

修改配置文件

  vi  redis.conf

 

 

 2.启动redis数据库服务

redis监听的是本机的6379端口,能够在配置文件中进行修改

[root@localhost redis]# redis-server redis.conf

ss -tnl

 

 

3.链接上redis-server:

redis-cli -p 6379 -h 192.168.202.6   #  -h  后填写数据库服务器的ip

4.切换数据库

 select index

index表示填写数字。redis的数据库用数字表示,0表示默认数据库,数据库最多能够有多少,能够经过配置文件redis.conf调试。默认是16个 ,范围是0-15

 

 

如:

 

5.添加:

set key value

如:

set name bai

将字符串值value关联到key

若是key已经持有其余值,

set命令就覆写旧值,无视其类型。而且默认的过时时间是永久,即永远不会过时。

 

6.查看value:

get key

如:get name

 

查看当前redis全部的key:

keys *

 

7.删除:

del key

  如:

del name

 

 

 8.设置过时时间

expire key timeout(单位为秒)

也能够在设置值的时候,一同指定过时时间:

 

  set key value EX timeout

  或:

  setex key timeout value

 

  查看过时时间

  ttl key

  如:

 

9.列表操做

在列表左边添加元素:

lpush key value

将值value插入到列表key的表头。若是key不存在,一个空列表会被建立并执行lpush操做。当key存在但不是列表类型时,将返回一个错误。

 

在列表右边添加元素:

rpush key value

将值value插入到列表key的表尾。若是key不存在,一个空列表会被建立并执行RPUSH操做。当key存在但不是列表类型时,返回一个错误。

 

 

查看列表中的元素:

  lrange key start stop

返回列表key中指定区间内的元素,区间以偏移量start和stop指定,元素从左往右按0,1,2…的顺序排,从右往左按-1,-2,-3….的顺序排;若是要左边的第一个到最后的一个lrange key 0 -1。

经过下面的实验发现只能从左往右查不能从右往左查,(0 -1) 和(-5 -1)表示的含义是同样的,所以那种方法简单使用哪一种,建议使用(0 -1)

 

 移除列表中的元素:

 移除并返回列表key的头元素:

  lpop key

 移除并返回列表的尾元素:

rpop key

 

 指定返回第几个元素:

lindex key index

将返回key这个列表中,索引为index的这个元素。0为第一个元素1为第二个元素…..依此类推

 

 

 

 获取列表中的元素个数:

llen key

如:

 

 删除指定的元素:

lrem key count value

 根据参数 count 的值,移除列表中与参数 value 相等的元素。count的值能够是如下几种:

count > 0:从表头开始向表尾搜索,移除与value相等数量的元素,数量为count。

count < 0:从表尾开始向表头搜索,移除与 value相等数量的元素,数量为count的绝对值。

count = 0:移除表中全部与value 相等的值。

 

 

10.set集合的操做:

 添加元素:

  sadd set value1 value2....

 

 查看元素:

  smembers set

经过上边的实验发现集合有去重的做用

 

移除元素:

  srem set member...

  如:可一次移除多个

 

 

 

查看集合中的元素个数:

  scard set

  如:

 

获取多个集合的交集:

  sinter set1 set2

  如:

 

 

获取多个集合的并集:

  sunion set1 set2

  如:

 

 

 获取多个集合的差集:

sdiff set1 set2

如:注意取值顺序,顺序不一样可能差集不一样

 

查看集合有哪些 keys *

删除集合  del set

如:

 

 

11.hash,哈希操做:

添加一个新值:

hset key field value

如:

 

 

 将哈希表key中的域field的值设为value。

若是key不存在,一个新的哈希表被建立并进行 HSET操做。若是域 field已经存在于哈希表中,旧值将被覆盖。

 

 获取哈希中的field对应的值:

  hget key field

  如:

 

 删除field中的某个field:

  hdel key field

  如:

 

 获取某个哈希中全部的field和value:

  hgetall key

  如:

 

 获取某个哈希中全部的field:

  hkeys key

  如:

 

 

 获取某个哈希中全部的值:

hvals key

如:

 

 

 判断哈希中是否存在某个field:

hexists key field

如:

 数字1表示存在,0表示不存在

 

获取哈希中总共的键值对:

hlen field

如:

 

 

 12.事物操做:Redis事务能够一次执行多个命令,事务具备如下特征:

 

隔离操做:事务中的全部命令都会序列化、按顺序地执行,不会被其余命令打扰。

原子操做:事务中的命令要么所有被执行,要么所有都不执行。

开启一个事务:

multi

之后执行的全部命令,都在这个事务中执行的。

 

执行事务:

exec

会将在

multi

exec

中的操做一并提交。

 

经过实验当在终端1上开启事务,事务提交以前2号终端是看不到的,提交后两台终端均可看见

 

取消事务:

discard

会将

multi

后的全部命令取消。

经过实验发现取消事务后,事务中的操做,不会保存下来

 

监视一个或者多个key:

watch key...

监视一个(或多个)key,若是在事务执行以前这个(或这些) key被其余命令所改动,那么事务将被打断。

取消全部key的监视:

unwatch

 

13.发布/订阅操做:

给某个频道发布消息:

publish channel message

 

订阅某个频道的消息:

subscribe channel

先订阅频道 在发布

相关文章
相关标签/搜索