redis学习笔记

一、在linux上安装redis

1)安装redis编译的c环境,yum install gcc-c++

2)redis-3.0.0.tar.gz上传到Linux系统中

3)解压到/usr/local下  tar -xvf redis-3.0.0.tar.gz -C /usr/local

4)进入redis-3.0.0目录 使用make命令编译redis

5)redis-3.0.0目录中 使用make PREFIX=/usr/local/redis install命令安装 redis到/usr/local/redis中

6)拷贝redis-3.0.0中的redis.conf到安装目录redis中

7)启动redis 在bin下执行命令redis-server redis.conf

8)如需远程连接redis,需配置redis端口6379在linux防火墙中开发

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

/etc/rc.d/init.d/iptables save

注意:启动后看到欢迎界面,但是窗口不能关闭,且不能进行其他操作。解决方案是将redis.conf中的daemonize从false修改成true表示后台启动

使用命令查看6379端口是否启动ps -ef | grep redis

二、在Java中使用Jedis操作redis

	public void test2() {
		//1、创建jedis的连接池需要先创建jedis的配置对象
		JedisPoolConfig config = new JedisPoolConfig();
		//对jedisPool进行配置
		config.setMaxIdle(30);//设置最大闲置个数
		config.setMinIdle(10);//设置最小闲置个数
		config.setMaxTotal(50);//设置最大连接数
		//创建redis的连接池对象
		JedisPool pool = new JedisPool(config,"192.168.190.128",6379);
		//2、获取jedis连接对象
		Jedis jedis = pool.getResource();
		//3、存储数据
		jedis.set("xxx", "yyyyy");
		System.out.println(jedis.get("xxx"));
		//4、关闭连接
		jedis.close();
		pool.close();
	}

三、redis的常用命令

      存储字符串类型

1、get key:获取值

2、set key value:设置值

3、getset key value:先获取值,再设置一个新值

4、incr key:自动增加(类似于++运算,只能是数值。如果该key没有值,那么自动创建一个值为0的key,incr后变为1)

5、decr key:自动减少

6、incrby key increment:自动增加(类似于+=运算)

7、decrby key decrement:自动减少(类似于-=运算)

8、append key value:如果该key存在,则在原有的value后追加该值;如果该 key不存在,则重新创建一个key/value  。返回该字符串的长度

9、del key:删除该键值对

     存储hash类型

1、hset key field value:存储key的一个field值

2、hget key field:获取key下hash键为field的值

3、hmset key field value field value... : 存储key的多个field值

4、hmget key field field... : 获取key的多个field值

5、hgetall key :获取key下面的所有field和value

6、hdel key field : 删除该key下面的field和对应的value

7、del key:删除该key及下面所有value

8、hincrby key field increment:自动增加相应的值

9、hdecrby key field decrement:自动减少相应的值

10、hexists key field:判断指定的key中field是否存在

11、hlen key:获取key所包含的field数量

12、hkeys key:获取key所有的field

13、hvalues key:获取key所有的value

      存储list类型

这里的list类型底层用的是linked链式存储,增删快,查询慢。类似LinkedList,可在首尾进行操作。

1、lpush key values:从左边向key中存放多个value的值,底层使用堆栈的方式进行压栈,后进先出

2、rpush key values:从右边向key中存放多个value的值,底层使用堆栈的方式进行压栈,后进先出

3、lrange key start end:获取链表从start到end位置的值,start和end可为负数,-1表示最后一个,-2表示倒数第二个依次类推

4、lpop key:从该key下的左边弹出一个value值

5、rpop key:从该key下的右边弹出一个value值

6、llen key :返回该key的长度

7、lpushx key value:从左边向key中存放多个value的值,如果没有这个key,则不进行压栈操作。一次只能压一个数

8、lpushx key value:从右边向key中存放多个value的值,如果没有这个key,则不进行压栈操作。一次只能压一个数

9、lrem key count value:从左边删除count个值为value的元素如果count大于0,从头向尾遍历并删除count个值为value的元素,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素。

10、lset key index value:设置链表中的index的脚标的元素值,0代表链表的头元素,-1代表链表的尾元素。相当于替换功能。

11、linsert key before|after pivot value:在pivot元素前或者后插入value这个 元素。

12、rpoplpush resource destination:将resource链表的尾部弹出一个元素压入destination链表的首部

    存储set类型

这里的set类型底层使用与集合set相同,不能有重复数据,且没有顺序。Set类 型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。

1、sadd key value1、value2…:向set中添加数据,如果该key的值已有则不会   重复添加

2、smembers key:显示该key对应的set下的所有value

3、srem key value:移除该set下的value

4、sismember key value:判断该set下是否存在value

5、sdiff key1 key2:返回key1与key2中相差的成员,相当于key1比key2多哪些值。这个值与命令中key的前后顺序有关系。

6、sinter keys:返回多个set的交集

7、sunion keys:返回多个set的并集

8、scard key:返回该set的长度

9、srandmember key:返回该key对应set的随机一个元素。

10、sinterstore destination key1 key2:取key1与key2的交集并存放到destination中

11、sunionstore destination key1 key2:返回key1与key2的并集并存放到destination中

12、sdiffstore destination key1 key2:将key1、key2相差的成员存储在   destination上

    存储sortedset类型

存储有顺序的set根据权重进行排序(默认从小到大)。用于游戏排名,微博热点话题等。

1、zadd key score member score2 member2 ...:将所有成员以及该成员的分数(权重)存放到sorted-set中(从小到大的顺序)

2、zcard key:获取key中成员的数量(不包括权重)

3、zrange key start end [withscores]:显示集合中的成员,可选项为是否同时显示权重。从小到大

4、zscore key member:返回指定成员的权重

5、zrem key members:移除该key下面的成员,可以多个。

6、zrevrange mysortset start end [withscores]:显示集合中的成员,可选项为是否同时显示权重,顺序是从大到小

7、zremrangebyrank key start end:从小到大删除start到end角标的元素

8、zremrangebyscore key min max:通过权重的范围进行元素的删除。

9、zrangebyscore key min max [withscores] [limit offset count]:返回分数在[min,max]的成员并按照分数从低到高排序。[withscores]:显示分数;[limit offset count]:offset,表明从脚标为offset的元素开始并返回count个成员。

10、zcount key min max:统计权重在min到max范围内的元素

11、zrank key member:返回成员在集合中的排名,从小到大

12、zrevrank key member:返回成员在集合中的排名,从大到小

13、zincrby key increment member:设置指定成员增加权重,返回值是更改后的权重。

      keys的通用操作

1、keys pattern:获取所有域pattern匹配的key,*表示任意多个字符,?表示任意一个字符。

2、del key1 key2:删除指定的key,可以一次性删除多个

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

4、rename key newkey:给当前key重命名

5、expire key:设置过期时间。单位:秒

6、ttl key:获取该key所剩的超时时间,如果没有设置超时,返回-1,如果返回-2,表示超时,即不存在

7、type key:获取key的类型。以字符串的格式返回。返回的字符串为list、set、hash和zset。如果不存在返回none


redis是多数据库的,有16个,下标从0到15,默认在第0个。可以使用select num 命令进入其他数据库。使用move key 1:将当前库的key移植到1号库

*  flush:删除当前数据库的所有key

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

* dbsize:返回当前数据库的key的数目

* info:获取服务器的信息和统计


订阅:被订阅者发布信息时可以接收到。

** subscribe channel:订阅频道

** psubscribe channel*:批量订阅频道

** publish channel content:在指定的频道channel发送消息content


事物:事物中所有的命令都会被串行化的顺序执行,事物执行期间,redis不会再为其他客户端的请求提供任何服务。相当于批量处理,开启事物后可以多条一起执行或者一起回滚。不同于关系型数据库的是,这里某一条命令执行出错对其他命令没有丝毫影响。而关系型数据库中出错后都会进行回滚。

** multi:开启事物,直到执行exec时,才会去执行这些命令。类型关系型数据库中的begin transaction

** exec:提交事物,相当于关系型数据库中的commit

** discard:事物回滚,类似关系型数据库中的rollback


     redis持久化

redis的高性能是由于其将所有的数据都存储在了内存中,为了使redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。

redis支持两种持久化,一种是RDB方式,一种是AOF方式,可以单独使用一种,也可以结合使用。


* RDB持久化(默认支持,无序配置)

  该机制是指在指定的时间间隔内将内存中的数据集写入磁盘。redis下的dump.rdb

  优势是非常简单,性能最大化,而且因为是快照,注重的是结果,如果数据很大,相比AOF机制,RDB的启动效率会更高。

  劣势是可能会丢失数据,因为快照会在某个时间点 进行存储。两个快照之间存在时间间隔,快照完成之后宕机,那么快照之后的数据就不存在了。

* AOF持久化

  AOF是将所有操作记录到日志文件中。重新加载某个数据时,需要按照当时操作一步一步来。

  优势是非常安全,数据是实时的。劣势是如果某个数据操作次数过多,会造成redis卡慢。默认是关闭的。在redis.conf中配置。











发布了40 篇原创文章 · 获赞 22 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章