redis学习

一、redis简介

redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化。

1.redis使用场景:
  • 登录会话存储:存储在redis中,与memcached相比,数据不会丢失。
  • 排行版/计数器:比如一些秀场类的项目,经常会有一些前多少名的主播排名。还有一些文章阅读量的技术,或者新浪微博的点赞数等。
  • 作为消息队列:比如celery就是使用redis作为中间人。
  • 当前在线人数:还是之前的秀场例子,会显示当前系统有多少在线人数。
  • 一些常用的数据缓存:比如我们的BBS论坛,板块不会经常变化的,但是每次访问
  • 首页都要从mysql中获取,可以在redis中缓存起来,不用每次请求数据库。
  • 把前200篇文章缓存或者评论缓存:一般用户浏览网站,只会浏览前面一部分文章或者评论,那么可以把前面200篇文章和对应的评论缓存起来。用户访问超过的,就访问数据库,并且以后文章超过200篇,则把之前的文章删除。
  • 好友关系:微博的好友关系使用redis实现。
  • 发布和订阅功能:可以用来做聊天软件。
2.redis和memcached的比较

在这里插入图片描述

二、redis基本操作

相关参考文档http://redisdoc.com/index.html

1.字符串

设置字符串,一般以key values的方式,将values关联到key.

  • 语法:set key value
  127.0.0.1:6379> set username GG
  OK

如果key 已经持有其他值,set命令就要复写旧值,无视其类型。并且默认的过期时间是永久,即永远不会过期。

设置过期时间

expire key timeout(单位为秒)

也可以在设置值的时候,一同指定过期时间:

  • 语法:set key value EX timeout 或 setex key timeout value

查看过期时间

  • 语法:ttl key

返回值(获取key的value)

  • 语法:get key
    127.0.0.1:6379> get username
     "GG"

删除

  • 语法:del key

    127.0.0.1:6379> del username (integer) 1
    

查看当前redis所有的key

  • 语法:keys *
2.列表操作

在列表左边添加元素:

  • 语法:lpush key value

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

在列表右边添加元素:

  • 语法:rpush key value

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

查看列表中的元素:

  • 语法:lrange key start stop

返回列表key中指定区间内的元素,区间以偏移量start和stop指定,如果要左边的第一个到最后的一个lrange key 0 -1。

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

  • 语法:lpop key

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

  • 语法:rpop key

指定返回第几个元素:

  • 语法:lindex key index

将返回key这个列表中,索引为index的这个元素。

获取列表中的元素的个数:

  • 语法:llen key

删除指定的元素:

  • 语法:lrem key count value

根据参数 count 的值,移除列表中与参数 value 相等的元素。count的值可以是以下几种:
count > 0:从表头开始向表尾搜索,移除与value相等的元素,数量为count。
count < 0:从表尾开始向表头搜索,移除与 value相等的元素,数量为count的绝对值。
count = 0:移除表中所有与value 相等的值。

3.set集合的操作

添加元素:

  • 语法:sadd set value1 value2…

如:

  sadd team xiaotuo datuo

查看元素:

  • 语法:smembeers set

如:

  smembers team

移除元素:

  • 语法:srem set member…

如:

  srem team xiaotuo datuo

查看集合中的元素个数:

  • 语法:scard set

如:

  scard team1

获取多个集合的交集:

  • 语法:sinter set1 set2

如:

 sinter team1 team2

获取多个集合的并集:

  • 语法:sunion set1 set2

如:

  sunion team1 team2

获取多个集合的差集:

  • 语法:sdiff set1 set2

如:

sdiff team1 team2
4.hash 哈希操作

添加一个新值:

  • 语法:hset key field value

如:

hset website baidu baidu.com

将哈希表key中的域field的值设为value。
如果key不存在,一个新的哈希表被创建并进行 HSET操作。如果域 field已经存在于哈希表中,旧值将被覆盖。

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

  • 语法:hget key field

如:

  hget website baidu

删除field中的某个field:

  • 语法:hdel key field

如:

  hdel website baidu

获取某个哈希中所有的field和value:

  • 语法:hgetall key

如:

  hgetall website

获取某个哈希中所有的field:

  • 语法:hkeys key
    如:

    hkeys website

获取某个哈希中所有的值:

  • 语法:hvals key
    如:

    hvals website

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

  • 语法:hexists key field
    如:

    hexists website baidu

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

  • 语法:hlen field
    如:

    hlen website

5.事物操作

Redis事务可以一次执行多个命令,事务具有以下特征:
隔离操作:事务中的所有命令都会序列化、按顺序地执行,不会被其他命令打扰。
原子操作:事务中的命令要么全部被执行,要么全部都不执行。
开启一个事务:multi 以后执行的所有命令,都在这个事务中执行的。

执行事物:

multi
...
exec  提交并执行事物

取消事物:

multi
...
discard

discard会将multi后的所有命令取消。

监视一个或者多个key:

  • 语法:WATCH key [key …]

    WATCH lock lock_times

取消所有key的监视:

  • 语法:unwatch
6.发布/订阅操作

给某个频道发布消息:

  • 语法:publish channel message

订阅某个频道的消息:

  • 语法:subscribe channel
7.持久化(*)

redis提供了两种数据备份方式,一种是RDB,另外一种是AOF,以下将详细介绍这两种备份策略:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值