redis初识

nosql

redis是一种nosql,没有表结构,使用五种数据类型来完成存储。并且存储于内存中,周期性写入硬盘与log文件中。只有库的概念。

redis启动

windows:
redis-server.exe redis.windows.conf
另起一个cmd
redis-cli.exe -h 127.0.0.1(这里由于绑定的地址是这个,即使127.0.0.2等也指向主机,但是redis不识别) -p 6379(表示端口)
linux:
进入src目录下(之前需要编译,才能看到redis-server文件)
./redis-server ../redis.conf

另起一个命令窗口
同样进入src目录
./redis-cli  即可

redis关闭

windows可以直接关闭cmd
linux下在client端直接输入shutdown即可。

redis 配置

127.0.0.1> config get xxx
127.0.0.1> config set xxxx(key)  xxxxx(value)

redis设置

redis中有几种形式:string,hash,list(列表),set(集合),zset(sort set有序集合)
  • 删除数据 del key [field]

  • 设置字符串键值对
    setnx表示如果key存在了,就返回0,如果不存在,则插入新值,返回1。nx代表not exists
    127.0.0.1 > set mykey myvalue

    get mykey
    setnx mykey myvalue1
    0
    setex haircolor 10 red(设置此键值对有效期为10秒)
    setnx email 1395843157@11.com
    setrange email 11 gmail.com(从第十一下标开始将以后的相同数量字符换成gmail.com)
    mset key1 value1 key2 value2 ….(批量设置键值对,失败返回0)
    getset key1 value4 (设置key的新值,并返回原来的值,字面解释,先get,后set,所以key1填的是没有设置的新值,会报nil)
    msetnx (用法与mset一样)
    getrange mykey 0 5 (获取子字符串)
    mget key1 key2 key3….
    incr num1 (用于数字,自增加1操作,返回新值)
    incrby num1 10 (用于增加指定值,并且如果key不存在,会设置key,value默认为0)–后面的数字为负数就是减。
    对应的decr
    decrby
    append key heihei (在旧值末尾新增heihei)
    strlen 获取键的长度。

  • 设置hash形式

    127.0.0.1 > hset key field value

    hget key field
    127.0.0.1 > hmset key field value [filed value…..]
    hmget key field
    hmget key field [field…. ]
    hgetall key
    hm形式用于一次性设置多个域值,取值根据键,域来进行取。

  • 设置list形式
    127.0.0.1:6379> lpush key value [value …]

    lpop key (弹出一个值)
    lset key index value
    lpushx key value(如果key不存在就失败)
    lrange key start end
    lrange key 0 -1 (0代表第一个,-1代表最后一个)。
    llen key(返回长度)
    lrem key count value (删除第几个value)
    lindex key index (返回值)
    ltrim key start end (将值截取出来,永久改变的)
    linsert key before|after prvoit newvalue
    rpush key value [value…]
    rpushx key value
    rpop key
    rpoplpush key1 key2

  • 设置set形式

    127.0.0.1:6379 >sadd key [value…]

    scard key (返回数量)
    smembers key (返回所有值)
    sdiff key [key…] (返回差集)
    sdiffstore destination key [key…]
    sinter key [key…]
    sinterstore destination key [key…]
    sismember key member (判断member是不是key中成员)
    spop key [count] (随机出来一个数,当没有数据时自动rm这个set)
    srandmember key [count] (返回一个或者多个随机数)
    srem key value (删除指定值)
    sunion key [key..] (返回并集,由于还是set形式,所以里面不包含重复)
    sunion destination key [key…]

  • 设置sorted set

    127.0.0.1:6379 >zadd

键值操作命令

  1. keys * :表示取出所有键 keys my* 取出所有以my开头的键
  2. exists key :判断key是否存在
  3. del key :删除key
  4. expire key time :设置过期时间
  5. move key 库名 :从一个库移动到另一个库
  6. persist key :取消定时
  7. rename key new_keyname 重命名
  8. randomkey 从中随机返回一个键
  9. type key : 返回键的数据类型

补充:redis共有 0-15,16个数据库。客户端默认进入到0数据库。

服务器相关命令

  1. dbsize :返回当前数据库中key的数量
  2. select 0~15 :选择其中一个数据库
  3. ping :查看是否有响应。
  4. quit/exit :断开与服务器连接
  5. info : 返回redis版本等信息
  6. flushdb :清空当前数据库数据
  7. config get xxx :获取对应参数信息
  8. flushall :删除所有数据库中的键

redis安全性设置

  1. 设置密码 :redis.conf 文件中,找到requirepass , 并设置自己的requirepass 例如:requirepass wangxinyu,即设置密码为wangxinyu
  2. 两种方式输入密码:1. …/redis-cli -a wangxinyu 2. 进入到客户端后 : auth wangxinyu 使用auth命令进行设置。设置密码不影响进入客户端,但是不具有操作redis的权限。

主从复制

什么是主从复制?
主从复制就是主服务器向从服务器发送复制命令,并得到响应的过程。 
redis主从结构:redis的master(主)服务器连接多个slave(从)服务器,并且从服务器之间可以相互连接,一般情况下从服务器统一连接到一个从服务器中,如果有一天这个master 坏掉,那么这个slave就变成了master继续为用户提供服务。

主从复制过程:redis主从复制与对外提供服务是并行的。
1. slave向master请求同步
2. master将db快照保存到文件中,发给slave
3. slave将file保存到硬盘中
4. 此期间,master仍接收client发送来的数据以及请求。

做法 1.配置slave服务器上的redis.conf文件,设置masterauth (master的密码),以及slaveof        (设置master主机ip和port),记住,要关闭各自防火墙。
     2.启动master所在虚拟机。开启redis服务
     3.启动slave所在虚拟机,开启redis服务(会看到连接信息)
     4.开启各自客户端,使用master端set值,在slave端get,可以get到

事务处理

127.0.0.1 6379 > multi  ---开启一个事务
               > set skey1 10
               > set skey1 11
               > exec
               > 
multi命令开启事物,里面的命令都被存储在一个queue中,exec开始执行里面命令。
如果我们不想进行事务上下文,discard命令(在上面exec处换成discard)。意思是,清空multi的事务队列,回滚。

乐观锁的实现(类似事务一致性)

乐观锁是版本控制软件常用的一种锁。
127.0.0.1 6379 > watch skey1   -- 监控在事务开始与结束期间skey1这个键是否被修改
               > multi   --开始事务
               > set skey1 12
               > ---这两个命令之间再开一个客户端,进行skey1值修改,会被watch监控到,然后执行exec,返回nil,执行不成功。
               > exec
               > (nil)
要想清除watch监控,exec,discard,unwatch命令都可以清除。

redis事务回滚

redis执行事务时,与传统数据库不同,redis的事务执行时,将内部可执行的命令成功执行,不成功地命令不执行。存在隐患。

持久化

snappshotting 快照,保存的是数据,服务默认方式,保存到dump.rdb文件中。我们可以配置执行保存的条件: save 900 10  :900秒内如果有超过10个key被修改,就执行保存。
append-only file 方式 :保存修改,增加,删除操作。由于每一次快照间会有间隔,那么在这之间如果服务器down掉,那么就会造成最后一次快照后的修改完全丢失,那么为了避免,我们使用aof方式,记录这些操作。
恢复时,恢复到最后一次快照,并重新执行这里的操作。通过在配置文件中配置:appendfsync always 每做一个操作机会同步到这个文件中。性能会差一些 appendfsync everysec  :每秒同步一次。性能可以。存在丢失一些操作的危险。appendfsync no :让os自己判断何时进行备份,听os的。修改这个还需要先修改:appendonly 字段,默认为no,表示不开启,改为yes

消息发布与订阅

pub(publish)/sub(subscribe),一个客户端通过publish命令进行发布消息。设置了subcribe命令定制接收特定消息的客户端可以进行接收。
具体操作:
客户端1进行订阅:127.0.0.1 6379 > subscribe tv1 
客户端2进行订阅:127.0.0.1 6379 > subscribe tv1 tv2 ...
客户端3进行发布:127.0.0.1 6379 > publish tv1 wangxinyu tv2 heheda(返回的数值代表有几个客户端在监听此消息)

此时,客户端1会接受到wangxinyu,,客户端2接收到:wangxinyu,heheda

redis虚拟内存

由于redis是用内存来存储文件,那么会占用很大内存,于是,虚拟内存就是将redis中暂时不用的数据交换到硬盘上,叫做虚拟内存。(2.4版本以后,取消的对vm的设置)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值