my redis

NOsql概述

   为什么要用nosql:用户的个人信息,社交网络,地理位置,用户自己产生的数据,用户日志等等爆发式增长!

什么是nosql

  not only sql(不仅仅是sql),泛指非关系型数据库

NOSQL特点

     1、方便扩展(数据之间没有关系,很好扩展)

     2、大数据量高性能(1s写8万次,读取11万)

     3、数据类型多样性(不需要事先设计数据库)

Redis入门    (http://www.redis.cn/

  Remote Dictionary Server  远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

   redis默认端口6379, window下直接双击redis-server.exe和redis-cli.exe

   my redis 连接成功

Reids Linux安装

 1、官网下载

  2、移动 mv xxx.jar /opt 解压tar -zxvf xxx.tar.gz  

  3、客户端连接:redis-cli.exe -h xxx -p 6379

       服务器启动:redis-server redis.conf

Redis性能测试   (redis-beanchmark)

my redis

Redis基础知识

  redis默认有16个数据库: databases 16,默认使用第0个,使用select 3切换数据库,dbsize查看数据库大小

  keyss * 查看数据库所有key

  flushall   清空全库 /  flushdb 清空当前库

Redis是单线程的

  快,基于内存操作,cpu不是性能瓶颈,是机器内存和网络宽带。

  为什么单线程还这么快?将所有数据全部放在内存,多线程(cpu上下文会切换:耗时的操作),对于内存系统来说,如果没有上下文切换效率就是最高的。

五大数据类型   (做数据库、缓存、消息中间件MQ)

   exists key        返回 存在(INTEGER)1   不存在(INTEGER)0

   move key 1     将key移动到1库

   expire key 10  设置本key的过期时间10秒

   ttl  key             查看当前key的剩余时间

   type key          查看当前key的类型

   如何查看命令:

my redis

 string (字符串。redis不区分大小写操作,加不加“”无所谓,会自动识别成字符串)

     append key "hello"     往本key追加字符串,如果不存在当前key,就相当于set

     strlen   key                 返回字符串长度

     incr  /decr  key           自增自减 ,加1减1,浏览量   返回(integer)4,非数字会报错

     incrby/decrby key 10  设置步长

     getrange  key  0(start)   10(end)   截取字符串,end=-1就是全部,闭区间 【0,3】 

     setrange key 0(start)  xxx(value)  替换指定位置开始的字符串

     setex  key  seconds  value            设置过期时间

     setnx  key  value                           不存在再设置(在分布式锁中常常使用),如果使用set命令,key存在了会覆盖值,

                                                            存在就返回(integer)0

     mset k1 v1 k2 v2 k3 v3                  批量设值

     mget k1 k2 k3

     msetnx   k1 v1 k4 v4                       原子性操作,要么全部成功,要么全部失败,返回(INTEGER)0

     set user:1  {name:han,age:11}        设置对象de巧妙设计。 或者 mset user:1:name han user:1:age 11

     getset k1 v1                                     如果不存在值,返回nil,如果存在值,获取原来的值,并设置新值

List (列表。所有的命令都是l开头,实际是一个链表,既可作队列,又可做栈,值可以重复)

    在redis里面,可以吧list玩成栈、队列、堵塞队列

    lpush  list  a1 a2  a3 a4 a5           插入,返回 (integer)5   。将一个或多个值放到列表的头部(左)

    rpush  list  a6 a7 a8                      将一个或多个值放到列表的尾部(右)

    lrange list 0  -1                              取,-1返回全部,获取顺序a5 a4 a3 a2 a1,(感觉像栈啊。。)没有rrange,闭区间

    lpop  list                                        移除list的第一个元素,返回 a5

    rpop  list                                        移除list最后一个元素   返回a8

    lrem  list 1 one                              移除list集合中指定个数的值

    ltrim  list 1(start) 2(end)                通过下表截取指定的长度,这个list已经被改变了,只剩下截取的元素

    lindex list  1                                   通过下标获得list中的某一个值 返回a2

    llen list                                           返回列表的长度 (integer)3

    rpoplpush list otherlist                   移除列表的最后一个元素,将他移动到新的列表中

   lset list 0 item                                 将列表中指定下标的值替换为另外一个值,相当于更新操作,首先exists list判断列表存不存                                                            在,如果不存在使用lset报错(error)no such key,如果指定下表不存在(无值),报错

   linsert list before/after world hello  将某个具体的value插入到列表中某个元素的前面或者后面 返回(integer)4

set(集合。值不能重复)

   sadd  myset  a1..(可多个)    set集合中添加元素

   smembers myset                       查看指定set的所有值

   sismember myset a1                 判断某一个值是不是在set集合中

   scard myset                              获取set集合中内容元素的个数

   scrm myset a1..(可以多个)        移除set集合中的指定元素

   srandmember myset   n(可填)   随机抽选出一个元素(n:指定个数)

   spop myset                                随机删除set集合中的元素

   smov myset myset2 a1              将一个指定的值,移动到另外一个set集合

   sdiff key1 key2                           差集  (以key1位参照,查看key1里面在key2中不存在的)            

   sinter key1 key2                        交集 b站共同好友

   sunion key1 key2                      并集