redis入门学习

NOSQL

  为什么需要NOSQL?
  1.高并发读写。
  2.海量数据的高效率的存储和访问。
  3.高可扩展和高可用性。
  什么是NOSQL?
  NOSQL是not only sql。非关系数据库。
  NOSQL数据库的四大分类。
  键值存储:redis.
  列存储:HBASE,
  文档数据库:MONGDB.
  图形数据库:Neo4j,

aaa

Redis概述

  高性能的键值对数据库,也是内存数据库很快,支持很多键值数据类型:
  字符串类型。
  列表类型。
  有序集合类型。
  散列类型。
  集合类型。
  Redis主要用于场景。
  缓存。 任务队列。网站访问统计等。

Redis安装

  工具:CentOS,虚拟机VM,FileZilla,SecureCRT,官网下载的redis压缩包这5个工具。
  1,打开虚拟机,用ifconfig查看网络地址,然后打开SecureCRT连接到这个虚拟机,然后进行操作.
  2.打开FileZilla,连上虚拟机,然后找到找到文件传送到虚拟机里面的centos里面。
  3.安装Gcc环境:yum install gcc c++,在线安装gcc。
  4,解压这个redis压缩包。命令如下: tar -zxvf redis-4.0.8.tar.gz。然后进入到解压的包里面,编译这个redis.m命令是: make,好了之后就是安装了,命令如下所示:make PREFIX=/usr/local/redis install,中间的是我的安装路径。然后进入到解压路径,找到redis.conf这个文件,复制到安装路径。命令如下:cp redis.conf /usr/local/redis。然后进入到安装路径下,找到这个文件打开编辑这个文件,将 daemonize no,改成yes。再然后启动redis,进入到安装目录的redis包下命令如下: ./bin/redis-server ./redis.conf。然后用这个命令:ps -ef | grep -i redis查看redis是否成功启动。,进入到redis的操作界面命令如下: redis.cli进行交互。至此,安装完毕

jedis介绍

  Jedis是redis的基本连接java操作接口。是redis官网首选的java客户端开发包。
代码演示下

public class JunitTest {
    @Test
    public void demo1() {
        //System.out.println("111");
        Jedis jedis = new Jedis("192.168.1.106", 6379);
        jedis.set("name1", "dh");
        System.out.println(jedis.get("name1"));
        jedis.close();
    }

}
    @Test    public void demo2() {        // System.out.println("111");        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();        // 最大数        jedisPoolConfig.setMaxTotal(20);        // 最大空闲数        jedisPoolConfig.setMaxIdle(10);        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "192.168.1.106", 6379);        Jedis jedis = null;        try {            jedis = jedisPool.getResource();            jedis.set("name1", "dh");            System.out.println(jedis.get("name1"));        } catch (Exception e) {        } finally {            jedis.close();            jedisPool.close();        }    }

  相关的maven1依赖自己加。这里我要说的是以下几点,第一。直接运行会报错的,很多原因,CentOs方案如下:
  1.开启防火墙:systemctl start firewalld.service
  2.开启端口firewall-cmd --zone=public --add-port=80/tcp --permanent
  命令含义:
  --zone #作用域
  --add-port=80/tcp #添加端口,格式为:端口/通讯协议
  --permanent #永久生效,没有此参数重启后失效
  3.重启防火墙:firewall-cmd --reload
  4.修改上面redis包下的redis.conf文件1>注释掉bind
为#bind 127.0.0.1
  2>默认不是守护进程方式运行,这里可以修改
  daemonize no
  3>禁用保护模式
  protected-mode no
  5.若是SecureCRT无法连接虚拟机,输入:systemctl restart sshd.service
  然后在运行,搞定。

redis基本数据结构

  五大基本数据类型:字符串(String),字符串列表(list),有序字符创集合(sorted set),哈希(hash),字符串集合(set)
  key定义的注意点:1,key值不要太长,不要超过1024字节。2,不要太短,可读性太差,3命名规范

字符串String

  存入redis是2进制操作的,最大是512M.
  基本命令:赋值:set company yonyou,取值 get company,取值并且赋值getset company baidu "mmm",删除 del company.加值操作: incr num,若num不存在,那么创建值为0,且加一,若是存在那么加一,若是无法转为整形,报错。同样还有decr num是减一操作。incrby num 5,这是一次加5,其余的和incr一样,decrby num 5,这是和incryby相反的。append compay dh,是在company这个key的value的值后面添加一个字符串。返回值为字符串长度。若是不存在,那么直接创建这个值。

存储Hash

  String key 和String Value的map容器,每个Hash可以存很多键值对。相当于java里面的HashMap.
  赋值:hest myhash username dh,多个赋值,hmset myhash username dh age 21.取值:hget myhash username,一次取多个值hget myhash username age.全部取出来 hgetall myhash.
  删除:单个删除:hdel myhash user age,del myhash是删除整个集合。同一样可以加值操作, hincrby myhash age 5,也有删除操作hdecrby myhash age 5,判断hash中是否存在某个key:hexists myhash username,成功返回1,不成功返回0.判断hash中多少属性key:hlen myhash.获得所有的key:hkeys myhash,获取所有value:hvalue myhash

list

  按照插入顺序的链表。可以从头部和尾部插入,没有key时创建这个key,数据没了删除这个key,链表的操作特征,大家都懂的。

  这些方式来存储数据ArrayList,linklist双向链表
  左边插入数据Ipush mylist a,b,c,建立一个list,并且把数据插进去,就像栈一样,返回值是链表的个数。
  右侧插入rpush mylist a b,c
  查看链表 lrange mylist 0 5,查看链表0-5的元素。0代表第一个元素,-1代表最后一个元素。那么查看索引信息的
  左侧弹出元素 lpop mylist
  右侧弹出元素 rpop mylist
  获取元素个数 llen mylist
  lpushx,rpushx这个和lpush差不多一样,但是没有这个key的时候是不会创建这个链表的。
  lrem mylist count 1,当cout>0,那么从头开始删除数目为count的1,当count<0,从尾部开始删除绝对值为count的1,如果count=0,那么删除所有的1,。
  lset mylist 3 mmm,效果是吧第四个元素替换为mmm,
  linsert mylist before b 11,在这个mylist的这个list里面的这个b元素前边插入11
  linsert mylist after b 11,在这个mylist的这个list里面的这个b元素后边插入11。
   rpoplpush mylist mylist1 将list1结尾的元素放到list2首部,这个主要用于消息队列。

存储set。

  和java的set集合类似。也类似于集合。
  sadd myset a b c,添加元素
  srem myset a删除元素
  smembers myset 返回集合的所有元素。
  sismember myset a,判断集合是否存在a,返回值为1表示存在,返回值为0表示不存在。
  sdiff myset myset1,返回myset1中没有,但是myset有的值。
  sinter myset myset1 返回这2个都有的值,也就是交集。
  sunion myset myset1 ,这个就是求着2个集合的并集。
  scard myset 返回集合的数目
  srandmember myset 返回随机一个集合的元素
  sdiffstore my1 myset myset1,就是将myset,myset1按这个顺序做一个差集,再把这个差集添加到my1这个集合里面去。
  sinterstore my1 myset myset1,就是将myset,myset1做一个交集,再把这个交集添加到my1这个集合里面去。
  sunionstore my1 myset myset1,就是将myset,myset1做一个并集,再把这个并集添加到my1这个集合里面去。
  

Sorted-set

  和Set差不多属性,就是多了个排序的能力。
  zadd mysort 70 cs 80 ls 90 ss,增加3个元素,前面的是分数,代表其在sorted-set中的顺序,如果在添加zadd mysort 100 cs,这个value已经有了,那么就会用新的分数代替旧的分数。
  zscore mysort cs 获取cs这个value对应的分数。
  zcard mysort 返回这个sorted-set里面多少元素。
  zrem mysort tom ww,删除tom,ww这个2个值。
  zrange mysort 0 -1,和list的操作一样。这个只是返回值。
  zrange mysqrt 0 -1 withscores,多返回了分数,从小到大的顺序出来。
  zrevrange mysort 0 -1 withscores 从大到小排序。
  zremrangebyrank mysort 0 4,范围删除。
  zremrangebyscore mysort 80 100,按照分数范围删除。
  zrangebyscore mysort 0 100,分数从0到100的value
  zrangebyscore mysort 0 100 withscores 和上面一样就是多了分数。
  zrangebyscore mysort 0 100 withscores limit 0 2,选取前面2个数据
  zincrby mysort 3 ls,给ls这个元素的分数加3.
  zcount mysort 80 90,分数80到90的个数。

keys操作

  keys * 查看所有的keys
  keys my? 以my开头的keys.
  del my1,my2,删除这些keys.
  exists mykeys判断这个key是否存在。
  rename company newname,给这个key重命名
  expire newname 1000.1000秒就过期。ke
  ttl newname 所剩超时时间
  type newname返回类型

Redis特性

多数据库

  一个Redis可以包含多个数据库。一个Redis最多16个数据库,客户端默认连接的是0号数据库。类似于mysql可以创建多个数据库。
  select 1,选择一号数据库
  move myset 1,这个就是把当前数据库的这个key移到1号数据库里面。

事务

  multi exec discard
  事务会让命令串行化执行,同时也不会向其他客户端提供服务。从而保证事务。
  用multi来开启事务,用exec来提交事务。用discard来进行回滚。
  当你用multi时,后续的命令都会被加到命令队列里面。直到遇见exec来提交。

Redis持久化

  就是把redis的数据同步到硬盘上,redis快是由于其运行在内存里面的。
  2种方式实现持久化。
  RDB,AOF这2个方式。
  RDB,就是指定时间内就把数据写入硬盘。
  配置:
  打开我们的redis的配置文件redis.conf,
save 900 1
save 300 10
save 60 10000
  就是每900秒若是有一个key变化就写入文件。第二个就是每300秒有10个key变化时就写入文件,第三个就是每60秒有10000key变化时就写入文件。
  dbfilename dump.rdb
  文件名字。
  dir ./当前路径。
  aof,将以日志记录每个数据操作,启动时,重新加载。
  配置:打开redis.conf这个文件找到这个appendonly no,这个是配置这个redis是否发开的方式。将之改为yes就是启动这个aof配置。
  3个同步方案;
  appendsync always ,每次操作都同步
  appendfsync everysec,每一秒都同步
  appendfsync no ,不同步
  RDB+AOF,同时使用。

总结

  花了我足足4个夜晚的时间,捂脸,还是太菜哦

猜你喜欢

转载自www.cnblogs.com/donghang/p/9233756.html