Redis简介和使用

Redis是NoSql数据库。

NoSql数据库:

为了解决高并发、高可用、高可扩展性,大数据存储等一系列问题而产生的数据库解决方案,即非关系型数据库。
不能替代关系型数据库,只能作为补充。

redis支持数据类型:

1、字符串(String)。二进制安全的(存入取出值一致),value最长512M。
2、哈希(hash)。
3、字符串列表(list),链表结构。
4、字符串集合(set)。
5、有序字符串集合Zset(sorted set)。

key值的定义:

1、长度不要超过1024字节,且含义要清晰规范。保证可读性。
2、具有统一的命名规范。如rel结尾代表角色关系表。

redis应用情景:

1、缓存(数据查询、短连接、新闻内容、商品内容等待)(应用最多)
2、分布式集群架构中的session分离。
3、聊天室的在线好友列表。
4、任务队列。(秒杀、抢购、12306等等)。
5、应用排行榜。
6、网站访问统计。
7、数据过期处理。(可以精确到毫秒)

Redis 安装(控制台操作):

1、将tar包传入linux。
2、安装gcc编译器,yum install gcc-c++
3、将redis3.0.0的tar包解压到/usr/local/中
4、进入/usr/local/redis3.0.0中,使用make指令编译 #make
5、当前目录中使用make PREFIX=/usr/local/redis install 指令安装redis到local目录下。
6、拷贝redis3.0.0中的redis.conf到redis的bin目录下。
7、使用 . /redis-server redis.conf进行后台启动。直接使用. /redis-server是普通启动。
8、bin目录下使用 . /redis-cli连接redis。即可访问里面的数据。

存储数据:

1、打开redis,执行 . /redis-server redis.conf。
2、连接redis,执行 . /redis-cli。
3、执行set key值 value值,写入数据;执行get key值,读取value数据。

开启与关闭:

控制台启动: 直接使用. /redis-server是普通启动
关闭:
强制关闭:ctrl+c
正常关闭:bin目录下使用 . /redis-cli shutdown

后台启动: . /redis-server redis.conf启动。
关闭:
强制关闭: 查看后台进程 ps -aux | grep redis,使用kill -9 进程号杀死进程。容易造成数据丢失,不会先进行持久化保存数据。
正常关闭:在bin目录使用 . /redis-cli shutdown,关闭redis。会先将数据先进行持久化操作,在关闭redis。

**远程访问linux中的redis:

开启端口远程访问:

第一步,修改防火墙:/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
第二步,永久保存生效:/etc/rc.d/init.d/iptables save

Web项目读写redis:

1、搭建项目,导入commons-pool2-2.3.jar包、jedis-2.7.0.jar包。
2、新建类,插件Jedis对象操作redis,通过构造函数指定目标host和port。

jedis连接池使用:

JedisPool类的使用:

JedisPool  pool  = new  JedisPool(poolConfig(池配置对象),地址host,端口号port);

JedisPoolConfig:

用于封装创建JedisPool对象时需要配置的信息。

JedisPoolConfig  poolConfig = new  JedisPoolConfig();

例:

public void test2(){
    //创建redis连接池配置封装对象
    JedisPoolConfig poolConfig = new JedisPoolConfig();
    poolConfig.setMinIdle(10);      //最小闲置个数
    poolConfig.setMaxIdle(30);      //最大闲置个数
    poolConfig.setMaxTotal(50);     //最大连接数

    //创建redis连接池
    JedisPool jedisPool = new JedisPool(poolConfig,"192.168.111.132",6379);

    //从连接池中获取redis的连接资源
    Jedis jedis = jedisPool.getResource();

    //操作数据库
    jedis.set("性别", "女");
    System.out.print("姓名:"+jedis.get("name")+",年龄:"+jedis.get("age")+",性别"+jedis.get("性别"));
    jedis.close();
    poolConfig.clone();
}

存取String类型:

jedis操作方法:

set:更改数据或新增数据。

get:获取value。

getset:先获取在修改。

del:删除。

incr:自增1。不存在的key时,会新建此key且自增1。

incrby  num  9。等于num+=9。

decr:自减1。

decrby  num  9。等于num-=9。

append  num  xxx。拼接num值和xxx。

存取Hash:

Hash类型可以看做是Map。适合存取对象信息。每一个Hash可以存储4294967295个键值对。

hset操作方法:
      hset  myhash  name  tom :设置或添加name属性。

      hget  myhash  name:获取myhash的name属性值。

      hgetall  myhash:获取myhash的所有value值。


hmset操作方法:
      hmset  myhash  name tom  age  25  addr  gaungzhou:设置多个

      hmget  myhash  name  age  addr:获取myhash指定key的value值。

del:
      hdel  myhash  name:删除myhash例的name属性。
    
      del  myhash:删除myhash所有内容。

 	  hincrby  myhash  age 1 :myhash的age自增1。

	  hdecrby  myhash age  1:myhash的age自减1。


	  hexists  myhash  age  :myhash中是否有属性age。

	  hlen  myhash :myhash里的field个数。

	  hkeys  myhash  :获取myhash所有的key。
	
	  hvals  myhash  :获取myhash的所有value。

存取List:(链表结构)

 lpush  mylist  a  b  c  d:从名为mylist的list头部开始插入元素a,b,c,d。
    
 lrange  mylist  0  -1:查询名为mylist的list从头到尾的元素内容。(d,c,b,a)。

 rpush  mylist  e  f  g:从名为mylist的list尾部开始插入e,f,g。(d,c,b,a,e,f,g)

 lpop  mylist :删除名为mylist的list第一个元素,并返回此元素值。

 rpop  mylist :删除名为mylist的list最后一个元素,并返回此元素值。

 llen  mylist :查询mylist的元素个数。

 lpushx  mylist  d:当mylist中没有d是,从头部插入d。已存在d,则不操作。(先查后插)。
  
 rpushx:同上,从尾部操作。

 lrem  mylist  2  a:从左到右删除mylist两个值为a的元素。当数字为0是,则从右到左删除所有值为a的元素。正数为从左到右,负数则从右到左。

 lset   mylist  2  pp:从左到右替换位置下标值为2的的元素的值为pp。

 linsert   mylist  after  a  yyy:在元素值为a的元素后面插入yyy元素。

 rpoplpush  mylist1  mylist2:从mylist1的尾部取出一个元素(删除),放到mylist2的头部。(可以实现遍历mylist1内容,筛选放置到不同的集合中,可以通过代码修改目标表)

存储Set集合:不允许重复数据,无序。

 sadd  myset  a  b  c:向myset添加a,b,c

 smembers  myset:查询myset的全部元素。

 srem  myset  b:删除b元素。

 sismember  myset  a :查询myset当中是否存在a,存在返回1,不存在返回0。

 del  myset:删除全部

 scard  myset1:求出myset1的元素个数。

 srandmember  myset:随机获取myset中的一个元素。

集合运算:

	求差集:sdiff  myset1  myset2,求出myset1比myset2多出的。
           sdiff   myset2  myset1,求出myset2比myset1多出的。
           sdiffstore  destination  myset1  myset2:求出差集存放到destination集合中。

    求交集:sinter  myset1  myset2,求出双方都有的。
           sinterstore  destination  myset1  myset2:求出交集存放到destination集合中。

    求并集:sunion  myset1  myset2,求出双方的和,不重复。
           sunionstore  destination  myset1  myset2:求出并集存放到destination集合中。

存储(Zset)sorted set:有顺序的set,通过权重(score分数)排序。

 zadd  mysortset  score  member  score2  member2:插入分数为scor的元素member。
    例:zadd  70  member  80  member2

 zrange  mysortset  0  -1:查询全部元素,无序。
 zrange  mysortset  0  -1  withscores : 查询全部元素,有序,从小到大。
 zrevrange  mysortset  0  -1  withscores: 查询全部元素,有序,从大到小。
 zrangebyscore  mysortset  0 100  limit  0  3: 从小到大查询score值0到100的元素,并从第0个开始取前三个。

 zcard   mysortset  

 zscore  member2:返回member2的score值。

 zrem  mysortset  member2:删除元素member2.

 zremrangebyrank  mysortset  0  2 :按照从小到大删除前三个元素(第0,1,2)。

 zremrangebyscore  mysortset  withscores  30  50:删除score在30到50之间的元素(包括)。

 zincrby  mysortset  increment  member:增加member的权重score,增加量为increment。

 zcount  mysortset  30  100:统计权重在30到100之间的元素个数。

 zrank  mysortset  f:查询f元素在mysortset里面的权重排名(从小到大)。

 zrevrank  mysortset  f:查询f元素在mysortset里面的权重排名(从大到小)。

通用key操作:

 keys  *:查询所有key。

 keys  my*:查询所有以my开头的key。

 del  num:删除key为num的元素。

 exists  num:判断key是否存在,1代表存在,0代表不存在。

 rename  num  newkey :为key为num的重命名。

 expire  num  1000 :设置过期时间,设置为1000秒,单位秒。默认为-1;-2表示设了超时,且已超时。

 ttl  key : 取得key的过期时间。

 type  num:查询key为num的数据类型。

**redis特性:

多数据库:**

redis最多提供16个数据库,下标从0到15。

使用select语句选择连接数据库。例:select  2,连接到2号库。

move  num  2:移动当前库中的num数据到2号库中。

flushall:删除所有数据库的所有key。

消息订阅与发布:

subscribe channel:订阅频道。
    例:subscribe  cctv:订阅了cctv。

publish  channel  message:频道channel发布信息message。
    例:publish  cctv  hi:通过cctv发布消息hi,此时订阅cctv的都会接受到hi信息。

redis事务:(不会回滚,相当于批处理)

multi:开启事务。
exec:提交事务。
discard:回滚事务。

redis持久化:

RDB模式:默认的持久化方式,快照写入磁盘,redis的bin目录下。启动时会加载。
AOF模式:日志的形式,操作命令记录,启动时会读取并重新构建数据库。
可以同时使用RDB和AOF模式。

RDB优势:
数据量大时更好,重新启动读取更高效。

劣势:
两次定时持久化之间,宕机的话,这个时间段的数据将丢失。

RDB的持久化存储配置:

    在redis的bin目录下的redis . conf中配置。
     save  900  1  : 900s内修改key1次,就会存一次快照。
     save  300  10   :300s内修改key10次,就会存一次快照。
     save   60   1000 :60秒内修改key1000次,就会存一次快照。

持久化文件名:通过修改 dbfilename 属性配置。
持久化文件保存路径:通过修改 dir 属性配置。

AOF的持久化存储配置:

AOF的优势:保存及时。
AOF的劣势:每次重启都执行日志中保存的操作记录,重建数据库。资源消耗大。
开启方式:配置redis . conf中的appendonly参数值。

always值:每次有数据修改发生都会写入AOF文件。多人操作时,较频繁。
everysec值:每秒钟同步一次,该策略为AOF的缺省策略。少人操作时,较频繁。
no值:从不同步。高效但是数据不会被持久化。

redis主从复制:

用途,避免单点故障。从机用作备份,可读无写权限。
主机:
无须配置。

从机:
配置redis . conf例的slaveof参数。
例: slaveof 192.168.111.133(从机ip) 6379(从机redis服务端口号)

清除从机中redis的持久化文件。

主从机之间,保证ip地址不一样或者端口号不一样。

注意,主机一旦发生操作,主机会把数据同步到从机中。
从机不能写。

*主从切换,可上网查看。

redis集群

1、所有的redis主机彼此互联,通过(PING-PONG机制),使用二进制协议优化传输速率和带宽。相当于Redis扩充。建议奇数个主机。
2、节点的fail是通过集群中超过半数的节点检测失效时才生效。
3、客户端与redis节点直连,不需要中间proxy层,客户端不需要连接所有节点,连接其一即可。
4、redis-cluster把所有的物理节点映射到 [ 0 - 16383 ] slot上,cluster负责维护 node<-> slot <-> value。
redis集群中内置了16384个哈希槽,redis会对key使用crc16算法算出一个结果,然后把结果对16384取余,得出一个值(即哈希槽的值),那么每个key都会有一个对应的key,再将要存的值放到该槽中。

。。。详见<集群原理及搭建>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值