Redis学习笔记

来源:互联网 发布:c语言迷宫最短路径 编辑:程序博客网 时间:2024/06/10 06:36

基本介绍

  • 使用键值对(key-value)形式存储数据
  • 数据类型:String,List,Set,Zset
  • 为了保证效率,数据都是缓存在内存中,也可以周期性的把更新的数据写入磁盘或者把修改操作写入到追加的记录文件
  • 适用场合(新浪微博):
    • 应用程序直接访问Redis数据库
    • 应用程序直接访问Redis,只有当Redis访问失败时候才访问MYSQL
  • 启动Redis
    • 服务器端:redis-server命令,要指定配置文件,默认redis.conf
    • 客户端:redis-cli
    • 默认端口6379
    • 后台启动:修改配置文件中的daemonize选项
  • 停止:Pkill redis-server

 

 

 String类型:String类型是二进制安全的

 语法:

  • set  设置键值  set key value 例如  set name zhangsan

 

  • get  获得键值   get   key  例如 get name

 

  • Setnx 设置键值(已经存在不覆盖) setnx name  value

 

  • Setex  设置键值(有效期)setex key时间  value(单位:秒)例如  set haircolor 10 red

 

  • Setrange 替换键值的一部分   setrange key 替换开始的下标 替换成的字符串

 

  • mset  设置多个键值都成功或者都失败  mset key1 value1  key2  value2

 

  • Msetnx 设置多个键值都成功或者都失败  ,不覆盖已经存在的值  

 

         例如:msetnx key1 val1 key2 val2

 

  • getset  获取旧的值,设置新的值,getset  key 新值

 

  • Getrang 获得键值的子串儿  getrang key 开始下标结束下标

 

  • mget  一次获得多个值  mget key1 key2 key3..

 

  • incr  自增1  incr key

 

  • incrby  加上指定数目,可以是负数  incrby  key  数字

 

  • decr  自减1  decr  key

 

  • Decrby 减去指定是负数数目, decrby key数字

 

  • Append 给键值追加内容   append key 要追加的字符串

 

  • Strlen 查看键值的长度  strlen  key

Hash类型便于存储对象

 

  • hset 设置哈希表的一个键值

语法:hset哈希表名字   field1 val1

 

  • hget获取哈希表的一个键值

语法 hget哈希表名字  fieldname

 

  • hsetnx  类似hset,不同的是有值的话不覆盖

语法:hsetnx哈希表名字   field1 val1

 

  • hmset 批量设置多个键值

语法:hmset  哈希表名字   field1 val1 field2 val2

 

  • hmget获取多个键值

hmget哈希表名字 field1  field2…

 

  • hincrby哈希表中某个键值加指定数字

语法:hincrby哈希表名字  field1 要加的数字

 

  • hexists判断哈希表中某字段是否存在,存在返回1,否则返回0

语法hexists哈希表名字 filed1

 

  • hlen 返回哈希表中键的个数

语法:hlen 哈希表名字

 

  • hdel删除指定的field

语法: hdel哈希表名字 要删除的field

 

  • hkeys返回哈希表中所有fields的名字

语法:hkeys哈希表名字

 

  • hvals 返回哈希表中所有value

语法:hvals哈希表的名字

 

  • hgetall 获取哈希表中全部的fieldvalue

语法:hgetall哈希表名字 

 

list类型   链表结构 可以从头部或者尾部添加删除元素,可以作为栈,也可以作为队列

 

  • lpush从头部压入一个字符串元素

语法:lpush链表名 

 

  • lrange 链表名 0 -1 

表示从头部的第一个元素取到尾部的第一个元素,也就是从头部取所有元素

 

  • rpush从尾部压入一个字符串元素

语法  rpush链表名 

 

  • linsert 在元素前插入一个元素,头的方向为前

语法:linsert链表名 before 已有元素  要插入的元素

 

  • lset设置list中指定下标的元素值

语法:lset   listname 下标 要设置的值

 

  • lremList中删除n个和value相同的元素(n<0从尾部删除,n=0全部删除)

语法:lrem listnamen   value

 

 

Set类型:是string类型的无序集合,集合中不允许重复元素,对集合可以进行并集,交集,差集等操作

 

  • Sadd  向集合中添加元素

语法:sadd集合名 要添加的元素

例子:sadd myset1onemyset1中添加one

 

  • Smembers  查看集合中元素

语法:smembers 集合名

 

  • Srem 删除名称为keyset中的元素

语法:srem集合名  要删除的元素

例子:srem myset1one  myset1中删除one

 

  • Spop随机返回并且删除名称为keyset中的一个元素

语法:spop集合名

例子:spop myset1myset1中随机弹出一个元素,并且删除它

 

  • Sdiff 返回两个集合的差集,以第一个集合为标准

语法:sdiff集合集合2

例子:sdiff myset1 myset2返回myset1中与myset2不同的元素

 

  • Sdiffstroe 将两个集合的差集存储到另外一个集合

语法:sdiffstore集合3集合集合将集合1和集合2的差集存储在集合3

 

  • Sinter返回所有给定集合的交集

语法:sinter myset1  myset2

 

  • Sinterstroe将取的差集存储在另外一个集合

语法:sinterstore集合3集合2集合将集合1和集合2的交集存储在集合3

 

  • Sunion取所有给定集合的并集

语法:sunion集合1集合2

 

  • Sunionstore取所有给定集合的并集并且存储

语法:同sdiffstoresinterstore

 

  • Smove  从第一个key对应的set中移除member并添加到第二个set

语法:smove 集合1集合元素1  把元素1从集合1中移动到集合2

 

  • Scard  返回名称为keyset的元素个数

语法:scard集合名

 

  • Sismember判断某元素是否为集合的元素,是的话返回1,否则返回0

语法:sismember集合名元素1    判断元素1是否是集合中元素

 

  • Srandmember随机返回名称为keyset的一个元素,但不删除元素

语法:srandmember集合名

 

zset类型:在set的基础上增加了一个顺序属性,这一属性在添加修改元素时候可以指定,每次指定后,zset会自动重新按照新的值调整顺序。可以理解为两列的Mysql表,一列存value,一列存顺序。

 

  • Zadd向名称为keyzset中添加元素member,score用于排序。如果该元素存在则更新其顺序

语法:zadd 集合名 顺序 元素

例子:zadd sset11  one 向集合sset1中添加元素one,顺序号为1

 

  • Zrang myzset 0 -1  withscores  myzset中的所有元素,包含顺序号

 

  • Zrem删除名称为keyzset中的元素member

语法:zrem集合名 要删除的元素

 

  • Zincrby如果在名称为keyzset中已经存在元素member,则该元素的score增加increment,否则向该集合中添加该元素,其score的值为increment

语法:zincrby集合名  increment 元素

 

  • Zrank返回名称为keyzset中的member元素的排名(按score从小到大排序)即索引下标

语法:zrank集合名 元素

例子:zrank myzset3  two 返回myzset3中元素two的索引下标(下标从0开始)

 

  • Zrevrank 返回名称为keyzset中的member元素的排名(按score从大到小排序)即下标,先按照score降序排序,然后再找索引

 

  • Zrangbyscore myzset3  2 4 withscores 返回myzset3中顺序号从24的元素

 

  • Zcount返回集合中score在给定区间的数量

 

  • Zcard返回集合中的元素个数

语法:同scard

 

  • Zremrangebyrank删除集合中索引在指定区间的元素

 

例子:Zremrangbyrank  myzset3 1 2  删除集合中索引下标12的元素

 

  • Zremrangbyscore删除集合中score在指定区间的元素

例子:zremrangbyscore  myzset   2 5 删除集合中score25的元素

 

 

 

键值相关命令

 

  • Keys 返回满足指定pattern的所有key

 

例子:Keys my*返回my打头的所有key  keys  *返回所有key

 

  • Exists确认一个key是否存在

例子:exits name   name键是否存在,存在返回1

 

  • Del删除一个key

例子:del age删除age这个key

 

  • Expire设置一个key的国旗时间

例子:expire addr 10 addr这个key设置10秒过期,ttl keyname可以查看指定key的剩余时间

 

  • Movekey从一个数据库移动到另一个数据库

例子:move age 1,age这个key从当前数据库移动到1数据库

 

  • Persist移除给定key的过期时间

例子:persist age取消age键的过期时间,使之是永不过期

 

  • Randomkey随机返回key空间的一个key

 

  • Rename重命名key

例子:rename age age_name key键重命名为age_new

 

  • Type返回值的类型

 

服务器相关命令

 

  • Ping测试连接是否存活,正常返回pong。。

 

  • Select选择数据库

例子:select 0 选中0数据库(redis中有0~1516个数据库)

 

  • Quit退出连接

 

  • Dbsize返回当前数据库中key的数目

 

  • Info获得服务器的信息

 

  • Flushdb删除当前数据库中所有key,也就是清空当前数据库

 

  • Flashall删除所有数据库中的所有key

 

Redis高级应用

 

1、安全性

设置客户端连接后进行任何其他指定前需要使用的密码

修改配置文件requirepass选项,设置密码后可以登录到客户端,但是不能做其他操作,需要使用(auth密码 )来认证,或者可以在登录时候直接认证,如:redis-cli -a 密码

 

2、主从复制

1Master可以有多个slave

2多个slave可以连接到同一个master以外,还可以连接到其他slave,这是为了当master宕机后,这个slave可以立刻变为master

3)主从复制不阻塞master

      主从复制过程:

1slavemaster建立连接,发送sync同步命令

2master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存

3)后台完成保存后,就将此文件发送给slave

4slave将此文件保存到硬盘上

     配置主从服务器:

     只需要配置slave,配置slave只需要在slaave的配置文件中加入如下代码:

slaveof ip端口  指定masterip和端口

Masterauth密码  指定master的密码

     通过info命令可以查看谁是主谁是从,查看role字段

 

3Redis事务处理

目前对事务的支持比较简单,只能保证一个客户端发起的事务中的命令可以连续执行,而中间不会插入其他客户端的命令。当一个客户端在连接中发出multi命令时,则个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。

 

  • mutil命令打开事务上下文,用exec执行
  • discard命令来取消事务
  • 但是有局限,事务中某个命令出现错误时,这个命令无法回滚
  • 使用watch命令来监控某个key的版本,如watch key,当exec时,如果这个key从调用watch后被修改过,则整个事务会失败。也可以调用watch多次来监控多个key,这样可以对指定的key加乐观锁了。注意watchkey是对整个连接有效的,事务也一样,如果连接断开,监控和事务都会被自动清除。execdiscard,unwatch命令都会清除连接中的所有监控。

 

4、持久化机制

Redis支持两种持久化方式:

1snapshoting(快照)默认方式

2Append-only file(缩写aof)方式

 

快照方式:将内存中的数据以快照的方式写入到二进制文件中,默认文件名为dump.rdb.可以通过配置设置自动做快照持久化的方式。我们可以配置redisn秒内如果超过mkey被修改就自动做快照。

如:save 300 10  # 300秒如果超过10key被修改,则进行快照保存

 

aof方式:由于快照方式是在一定间隔做一次的,所以如果redis以外down的话会丢失最后一次快照后的所有修改。aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的命令来在内存中重建整个数据库的内容。

 

设置aof方式说明:

Appendonlyyes

#appendfsync always 每条命令一收到就写入,最慢,最安全的持久化

# appendfsync everysec每秒写一次

# appendfsync no 完全依赖操作系统,最快,最不靠谱

 

5、发布与订阅消息

Public tv1 name test     通过tv1这个通道发布name这个key的值为test

Subscribe  tv1   订阅tv1 这个通道,在这个通道上发布的任何消息都会收到

 

6、虚拟内存的使用

把不经常访问的数据交换到磁盘上

相关配置:配置文件中vm开头的相关配置项目

 

 

 

 

 

 

 

 

 

 

 


0 0
原创粉丝点击