1.redis的安装
1)安装redis编译的c环境,yuminstall gcc-c++
2)将redis-2.6.16.tar.gz上传到Linux系统中
3)解压到/usr/local下 tar -xvf redis-2.6.16.tar.gz -C /usr/local
4)进入redis-2.6.16目录 使用make命令编译redis
5)在redis-2.6.16目录中 使用makePREFIX=/usr/local/redis install命令安装 redis到/usr/local/redis中
6)拷贝redis-2.6.16中的redis.conf到安装目录redis中
7)启动redis 在bin下执行命令redis-serverredis.conf
8)如需远程连接redis,需配置redis端口6379在linux防火墙中开发
2.通过java程序访问redis
@Test
 public void test1() {
  //获得连接对象
  Jedis jedis=new Jedis("192.168.219.128",6379);//安装redis数据库的ip地址和对应端口
  
  //2.获得数据
  String username=jedis.get("username");
  System.out.println(username);
  
  //3.存储
  jedis.set("addr", "北京");
  System.out.println(jedis.get("addr"));
 }使用jeds直接访问
3.通过jeds的pool获得jedis连接对象
	@Test
	public void test2() {
		//1.创建连接池的配置对象
		JedisPoolConfig poolConfig=new JedisPoolConfig();
		poolConfig.setMaxIdle(30);//最大闲置个数
		poolConfig.setMinIdle(10);//最小闲置个数
		poolConfig.setMaxTotal(50);//最大连接数
		
		//2.创建redis连接池
		JedisPool pool=new JedisPool(poolConfig,"192.168.219.128",6379);
		
		//3.从连接池获取redis连接资源
		Jedis jedis=pool.getResource();
		
		//4.操作数据库
		jedis.set("age", "13");
		System.out.println(jedis.get("age"));
		
		//5.关闭资源
		jedis.close();
		pool.close();//实际开发中不会关掉
	}可以自己封装一个获取jedis的资源的工具,如下
public class JedisPoolUtil {
	private static JedisPool pool=null;
	
	static {
		//加载配置文件
		InputStream inputStream=JedisPoolUtil.class.getClassLoader().getResourceAsStream("redis.properties");
		Properties properties=new Properties();
		try {
			properties.load(inputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}
				
		//1.创建连接池的配置对象
		JedisPoolConfig poolConfig=new JedisPoolConfig();
		poolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("redis.maxIdle").toString()));//最大闲置个数
		poolConfig.setMinIdle(Integer.parseInt(properties.getProperty("redis.minIdle").toString()));//最小闲置个数
		poolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("redis.maxTotal").toString()));//最大连接数
		
		//2.创建redis连接池
		pool=new JedisPool(poolConfig,properties.getProperty("redis.url"),Integer.parseInt(properties.getProperty("redis.port").toString()));		
	}
	public static Jedis getJedis() {
		return pool.getResource();
		
	}
}配置文件如下
redis.maxIdle=30
redis.minIdle=10
redis.maxTotal=100
redis.url="192.168.219.128"
redis.port=63794.Redis的数据类型
redis是一种高级的key-value的存储系统
其中的key是字符串类型,尽可能满足如下几点:
1)key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低查找 效率
2)key不要太短,如果太短会降低key的可读性
3)在项目中,key最好有一个统一的命名规范(根据企业的需求)
其中value 支持五种数据类型:
1)字符串型 string
2)字符串列表 lists
3)字符串集合 sets
4)有序字符串集合 sorted sets
5)哈希类型 hashs
4.1存储String
set key value 增
get key 查
del key 删
incr key 数值增(必须是Integer)如果incr key1(key1在数据库不存在,则会自动创造一个出来),get key1 得value="1"
decr key 数值减(必须是Integer)如果incr key2(key2在数据库不存在,则会自动创造一个出来),get key2 得value="-1"
4.2存储Hash
Redis中的Hashes类型可以看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

hset key filed value 为指定的key设置filed/value值
hget key filed 取出指定的key/filed的值
hmset key filed value[] 一次指定多个filed/value值
hmget key filed valus[] 一次取出多个filed/value
hgetall key 取出所有filed/value
hdel key filed 删除指定的filed/value
del key 删除所有filed/value
hincrby key filed increment 数值增加increment,可以增加负数
4.3存储List
在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于数组中间,那将会是非常低效的。相信对于有良好数据结构基础的开发者而言,这一点并不难理解。
 
rpop 从尾部弹
llen key 获取长度
4.4存储Set
在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间是常量时间。Set可包含的最大元素数4294967295。和List类型不同的是,Set集合中不允许出现重复的元素。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销

sadd key value1、value2…:向set中添加数据,如果该key的值已有则不会重复添加
smembers key:获取set中所有的成员
scard key:获取set中成员的数量
sismember key member:判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在
srem key member1、member2…:删除set中指定的成员
srandmember key:随机返回set中的一个成员
sdiff sdiff key1 key2:返回key1与key2中相差的成员,而且与key的顺序有关。即返回差集。
sdiffstoredestination key1 key2:将key1、key2相差的成员存储在destination上
4.5存储sortedset
Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。
在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为 集合中成员数量的对数。由于Sorted-Sets中的成员在集合中的位置是有序的,因此,即便是访问位于集合中部的成员也仍然是非常高效的。
zadd key score member score2 member2 … :将所有成员以及该成员的分数存放到sorted-set中
zcountkey min max:获取分数在[min,max]之间的成员
zcardkey:获取集合中的成员数量
zincrby key incrementmember:设置指定成员的增加的分数。
zrange key start end[withscores]:获取集合中脚标为start-end的成员,[withscores]参数表明返回的成员包含其分数。
zrangebyscore key minmax [withscores] [limit offset count]:返回分数在[min,max]的成员并按照分数从低到高排序。[withscores]:显示分数;[limit offset count]:offset,表明从脚标为offset的元素开始并返回count个成员。
5.redis的keys通用操作
keys pattern:获取所有与pattern相匹配的key
del key[]:删除多个key
exist 可以:查询是否存在key
rename key newkey:重命名
expire key time(秒) 设置过期时间
ttl key:返回过期时间,若果没有设置,返回-1;若果已经过期返回-2
type key: 获取指定key的类型
6.消息订阅与发布
subscribe channel:订阅频道
psubscribe channel:批量订阅
publish channnel content:在指定的频道中发布消息
7.redis事务
multi:开启事务用于标记事务的开始,其后执行的命令都将被存入命令序列,知道执行exec时,这些命令才会被原子的执行,类似于关系型数据库中的:begin transcation
exec:提交事务,类似于关系型数据库中的:commit
discard:事务回滚,类似于关系型数据库中的:rollback
8.持久化
Redis的高性能是由于其将所有的数据都存储在内存中,为了使Redis再重启后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
Redis支持两种方式持久化,一种是RDB,一种是AOF。可以单独使用一种或配合使用。
1.RDB持久化(默认支持,无需配置)
该机制是指在指定时间间隔内江内存中的数据集跨爱找写入磁盘。。
2.AOF持久化
3.无持久化
可以通过配置的方式禁用Redis服务器的持久化功能,这样我们可以将Redis视为一个功能加强的的memcached了。
 
                   
                   
                   
                   
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   341
					341
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            