redis进阶

redis介绍

redis的功能特性

  1. 高速读写

  2. 数据类型丰富

  3. 支持持久化

  4. 多种内存分配以及回收策略

  5. 支持事务

  6. 消息队列, redis用的多的还是发布-订阅模式

  7. 支持高可用

  8. 支持分布式分片集群

Linux操作系统是怎么分配内存的?

  linux系统将内存分为三大块

    RSS

    page cache

    anno page: 程序之间进行交互的时候

  linux系统以page进行分配内存, page大小默认4kb

  slab allocator 内存页的划分

  buddy system LRU最近最少使用的原则

怎么保证使用连续的内存 :

  slab allocator

redis优势 :

  1. redis在单用户(单线程)多并发读写的性能高

  2. 在多用户(多线程)少读写时memache更优

  3. redis是一个单核的管理机制, 生产中一般是, 单级多实例的框架


redis的使用

redis的数据类型 :

  1. 字符串(strings)

  2. 散列/哈希(hashes)

  3. 列表(list)

  4. 集合(sets)

  5. 有序集合(sorted sets)

1. strings方法

  1. set     设置key

  2. get     获取key

  3. append   追加string

  4. mset  设置多个键值对

  5. mget   获取多个键值对

  6. del    删除key

  7. incr      递增+1

  8. decr     递减-1

127.0.0.1:6379> set name 'xx'        #设置key
OK
127.0.0.1:6379> get name           #获取value
"xx"
127.0.0.1:6379> set name 'fang'   #覆盖key
OK
127.0.0.1:6379> get name           #获取value
"fang"
127.0.0.1:6379> append name ' dsb'   #追加key的string
(integer) 10
127.0.0.1:6379> get name              #获取value
"fang dsb"
127.0.0.1:6379> mset user1 'a' user2 'xiao'    #设置多个键值对
OK
127.0.0.1:6379> get user1    #获取value
"a"
127.0.0.1:6379> get user2    #获取value
"xiao"
127.0.0.1:6379> keys *      #找到所有key
1) "user2"
2) "name"
3) "user1"

127.0.0.1:6379> mget user1 user2 name   #获取多个value
1) "a"
2) "xiao"
3) "fang dsb"
127.0.0.1:6379> del name        #删除key
(integer) 1
127.0.0.1:6379> get name        #获取不存在的value,为nil
(nil)
127.0.0.1:6379> set num 10    #string类型实际上不仅仅包括字符串类型,还包括整型,浮点型。redis可对整个字符串或字符串一部分进行操作,而对于整型/浮点型可进行自增、自减操作。
OK    
127.0.0.1:6379> get num
"10"
127.0.0.1:6379> incr num      #给num string 加一 INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,可以用作计数器
(integer) 11
127.0.0.1:6379> get num  
"11"

127.0.0.1:6379> decr num      #递减1  
(integer) 10
127.0.0.1:6379> decr num        #递减1
(integer) 9
127.0.0.1:6379> get num
"9"

2. list类型

  1. lpush    从列表左边插入数据

  2. rpush    从列表右边插入数据

  3. lrange      获取一定长度的元素(lrange key start stop)

  4. ltrim       截取一定长度列表

  5. lpop       删除最左边一个元素

  6. rpop       删除最右边一个元素

  7. lpushx/rpushx   key存在则添加值, 不存在不处理

lpush duilie 'a' 'p' 'r'  #新建一个duilie,从左边放入三个元素

llen duilie  #查看duilie长度

lrange duilie 0 -1  #查看duilie所有元素

rpush duilie 'c'   #从右边插入chaoge

lpushx duilie2  'dsb'  #key存在则添加 dsb元素,key不存在则不作处理

ltrim duilie 0 2  #截取队列的值,从索引0取到2,删除其余的元素

lpop #删除左边的第一个
rpop #删除右边的第一个

3. sets集合类型

  redis的集合, 是一种无须的集合, 集合中的元素没有先后顺序

  集合相关的操作也很丰富, 如添加新元素, 删除已有元素, 取交集, 取并集, 取差集等

    1. sadd/srem   添加/删除 元素

    2. sismember  判断是否为set的一个元素

    3. smembers   返回集合所有的成员

    4. sdiff        返回一个集合和其他集合的差异

    5. sinter      返回几个集合的交集

    6. sunion    返回几个集合的并集

sadd zoo  w y  #添加集合,有三个元素,不加引号就当做字符串处理

smembers zoo  #查看集合zoo成员

srem zoo  w #删除zoo里面的alex

sismember zoo w  #返回改是否是zoo的成员信息,不存在返回0,存在返回1

sadd zoo w   #再把wupeiqi加入zoo

smembers zoo  #查看zoo成员

sadd zoo2 w mjj #添加新集合zoo2

sdiff zoo zoo2 #找出集合zoo中有的,而zoo2中没有的元素

sdiff zoo2  zoo  #找出zoo2中有,而zoo没有的元素

sinter zoo zoo1   #找出zoo和zoo1的交集,都有的元素

sunion  zoo zoo1  #找出zoo和zoo1的并集,所有的不重复的元素

4. 哈希数据结构

  hashes即哈希. 哈希是从redis-2.0.0版本之后才有的数据结构

  hashes存的是字符串和字符串值之间的映射, 比如一个用户要存储其全名, 姓氏, 年龄等, 就使用用哈希

    1. hset  设置散列值

    2. hget  获取散列值

    3. hmset  设置多对散列值

    4. hmget  获取多对散列值

    5. hsetnx    如果散列已经存在, 则不设置(防止覆盖key)

    6. hkeys     返回所有的keys

    7. hvals  返回所有values

    8. hlen   返回散列包含域(field)的数量

    9. hdel   删除散列指定的域(field)

    10. hexists  判断是否存在

redis hash是一个string类型的field和value的映射表

语法  hset key field value  

hset news:1   title "first news title" #设置第一条新闻 news的id为1,添加数据title的值是"first news title"

hset news:1 content "news content"    #添加一个conntent内容

hget news:1 title   #获取news:1的标题

hget news:1  content  #获取news的内容

hmget news:1  title content   #获取多对news:1的 值

hmset news:2 title "second news title" content "second Contents2"   #设置第二条新闻news:2 多个field

hmget news:2 title  content #获取news:2的多个值

hkeys news:1   #获取新闻news:1的所有key

hvals news:1   #获取新闻news:1的所有值

hlen news:1    #获取新闻news:1的长度

hdel news:1 title   #删除新闻news:1的title

hlen news:1     #看下新闻news:1的长度

hexists news:1 title    #判断新闻1中是否有title,不存在返回0,存在返回1
原文地址:https://www.cnblogs.com/dong-/p/10004279.html