redis命令

set:设置key对应的值为string类型的value set name lijie


setnx 设置key对应的值为string类型的value 如果key 已经存在,返回0,成功返回1 nx是not exist的意思


setex:设置key对应的值为string类型的value,并指定此键值对应的有效期 setex haircolor 10 red 有效期10秒


setrange设置指定key的value值的子字符串

例如我们希望将lijie的126邮箱替换为gmail邮箱

set email lijie@126.com

setrange email 6 gmail.com 6表示下标 表示从第6个字符开始替换


mset:一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置



msetnx:一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key


getset 设置key的值 并返回key的旧值


getrange:获取key的value值的子字符串

mget 一次获取多个key的值,如果对应的key不存在 则对应返回nil


incr 对key值做加加操作 并返回新的值


incrby 加指定值 key不存在会设置key,并认为原来的value是0


append:给指定的key的字符串追加value 返回新字符串的长度


strlen:取指定key的value值的长度

二 hashes类型及操作

Redis hash是一个string类型的field和value的映射表。它的添加 删除操作是0(1)(平均)

hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存。并且可以更方便的存储整个对象

hset:设置hash field为指定值 如果key不存在,则先创建

hsetnx 设置hash field为指定值 如果key不存在,则先创建.如果存在返回0


hmset 同时设置hash的多个field


hincrby 指定的hash field 加上给定值

hexists 测试指定field是否存在


hlen: 指定hash的field数量

hdel 删除指定hash的field

hkeys:返回hash的所有field

hvals:返回hash的所有value

hgetall:返回某个hash中所有的field和value


lists 类型及操作

list是一个链表结构主要功能是push pop 获取一个范围的所有值

操作中key理解为链表的名字 redis的list类型其实就是一个每个元素都是string类型的

双向链表。我们可以通过push pop操作从链表的头部或者尾部添加删除元素,这样list即可以作为栈,又可以作为队列

lpush :在key对应list的头部添加字符串元素

lpush mylist1 word 向链表添加元素

lrange mylist1 0 -1 获取mylist1所有元素

rpush :在key对应list的尾部添加字符串元素

rpush mylist2 word

rpush mylist2 hello

lrange mylist2 0 -1

linsert 在key对应list的特定位置前或后添加字符串元素

lpush list3 one

lpush list3 two

linsert list3 before one three

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

lrem 从key对应的list中删除n个和value相同的元素

ltrim 保留指定key的值范围内的数据

lpop 从list的头部删除元 并返回删除元素


rpoplpush 从第一个list的尾部删除元素 并添加到第二个list的头部


lindex 返回名称为key的list中index位置的元素

llen:返回key对应list的长度

sets类型及操作

set是集合 它是string类型的无序集合。 set是通过hash table实现的 添加 删除 和查找的复杂度都是0(1). 对集合我们可以取并集 交集 差集。通过这些操作我们可以实现sns中的好友推荐等

sadd 向名称为key的set中添加元素

srem 删除名称为key的set中的元素

spop 随机返回并删除名称为key的set中一个元素

sdiff:返回所有给定key与第一key的差集

sinter 返回所有给定key的交集

sinterstore 返回所有给定key的交集 并将结果存在另一个key

sunion 返回所有给定key的并集

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

scard 返回名称为key的set的元素个数

sismember 测试member是否是名称为key的set的元素

srandmember 随机返回名称为key的set的一个元素,但不删除元素


sorted sets类型及操作

sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一

属性在添加修改元素时可以指定,每次指定后,zset会自动重新按新的值调整顺序

可以理解为有2列的mysql表 一列存value 一列存顺序 操作中key理解为zset的名字。

zadd 向名称为key的zset中添加元素member,score用于排序。如果该元素存在

则更新其顺序

zrem 删除名称为key的zset中的元素member

zincrby 如果在名称为key的zset中已经存在元素member

zrank 返回名称为key的zset中member元素的排名(按score从小到大排序)即下标


zrevrank 返回名称为key的zset中member元素的排名(按score从大到小排序)即下标

zcount 返回集合中score在给定区间内的数量

六 redis的常用命令及高级应用

keys *

keys my*

exist:确认一个key是否存在

del 删除一个key

expire :设置一个key的过期时间

ttl:获取一个key的有效时长

move 把当前数据库中的key转移到其他数据库中

persist:移除给定key的过期时间

rename : 重命名

rename age age_new

type 返回值的类型

type addr

ping:测试连接是否存活

echo: 在命令行打印一些内容

select表示选择数据库

redis的数据库编号从0~15 我们可以选择任意一个数据库进行数据的存储

当选择16时,报错,说明没有编号为16的这个数据库

quit exit 都表示退出连接


info:获取服务器的信息和统计

config get 实时传储收到的请求

config get dir 获取dir这个参数配置的值

获取全部参数的配置值也很简单 只需要执行 config get * 即可将全部的值都显示出来

flushdb 删除当前选择数据库中所有key

flushall 删除所有数据库中所有key


                                                                     redis 高级实用特性

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

因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行

150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解

配置

requirepass bejing

usr/local/redis/bin/redis-cli

keys *

auth beijing

或者

usr/local/redis/bin/redis-cli -a beijing


取消密码验证后


2,主从复制

redis主从复制配置和使用都非常简单 通过主从复制可以允许多个slave server 拥有和master server相同的数据库副本。

redis主从复制过程

1,slave与,master建立连接,发送sync同步命令

2,master会启动一个后台进程 将数据库快照保存到文件中

同时master主进程会开始收集新的写命令并缓存

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

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

配置主从服务器:

配置slave服务器很简单 只需要在slave的配置文件中加入以下配置

slaveof 192.168.2.201 6379 #指定master的ip和端口

masterauth lamp#这是主机的密码

配置从redis

vim /etc/redis.conf


主redis

从redis

3,事务处理

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

set age 100

get age

multi

set age 10

set age 20

exec

取消一个事务:discard

multi

incr age

incr name

exec

取消事务

事务不完美

一个成功 一个失败

4,持久化机制

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证

持久化

1,snapshotting(快照)也是默认方式

将内存中的数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.

可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照

save 900 1  #900秒内如果超过1个key被修改,则发起快照保存

save 300 10 #300秒内如果超过10个key被修改,则发起快照保存

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

由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。

aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容

当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改

可以通过配置文件告诉redis 我们想要通过fsync函数强制os写入到磁盘的时机

appendonly yes//启用aof持久化方式

appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化

appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中

appendfsync no //完全依赖os 性能最好 持久化没保证

配置文件


5,发布订阅消息

发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合

redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过

subscribe和psubscribe命令向redis server 订阅自己感兴趣的消息类型,redis将信息类型称为通道。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此消息

接收信息

接收信息


发送信息


6,虚拟内存的使用

redis的虚拟内存就是把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。 尤其是对于redis这样的内存数据库,内存总是不够的。除了可以将数据分割到多个redis server外 另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。

vm相关配置

vm-enabled yes //开启vm功能

vm-swap-file /tmp/redis.swap //#交换出来的value保存的文件路径

vm-max-memory 100000 //redis使用的最大内存上限

vm-page-size 32 //每个页面的大小32字节

vm-pages 134217728 最多使用多少个页面

vm-max-threads //用于执行value对象换入的工作线程数量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 源地址:http://blog.csdn.net/gjanuary/article/details/5207699...
    Freeasthew_a098阅读 1,533评论 0 6
  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,152评论 23 626
  • Redis命令运行于redis服务器上,要在服务器上运行命令需要一个redis客户端,在安装Redis安装包时,我...
    第八共同体阅读 229评论 0 0
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,283评论 0 36
  • 今天听了基因革命的解说,对其中几点感受颇深。 第一,在孕前和孕中妈妈的状态对孩子影响很大。而第一次怀孕的时候我显然...
    小多媛媛阅读 169评论 0 0