1、
redis的五种数据类型:
string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
string(字符串):(string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB)
set 键 “值” get 键 DEL 键
hash (哈希):(用来存放键值对集合,每个 hash 可以存储 2的32次方 -1 键值对(40多亿))HMSET 名 键1 值1 键2 值2等 例如:
hmset runoob field1 “hello” field2 “world”
hget runoob field1
hget runoob field2
hkeys runoob ----获取所有字段和值
list(列表):(Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边))
lpush runoob redis1
lpush runoob redis2
lrange runoob 0 10
LINSERT key BEFORE|AFTER pivot value—将值value插入到列表key中,位于值pivot之前或者之后
比如:LINSERT mylist BEFORE “World” “There” 在world之前添加一个there
set(集合):(Redis 的 Set 是 string 类型的无序集合,集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1),集合内元素的唯一性,第二次插入的元素将被忽略)
sadd key member
smembers runoob
zset(有序集合):(Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序)
zadd key score member

类型简介特性场景String(字符串)二进制安全可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M—Hash(字典)键值对集合,即编程语言中的Map类型适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)存储、读取、修改用户属性List(列表)链表(双向链表)增删快,提供了操作某一段元素的API1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列Set(集合)哈希表实现,元素不重复1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐Sorted Set(有序集合)将Set中的元素增加一个权重参数score,元素按score有序排列数据插入集合时,已经进行天然排序1、排行榜 2、带权重的消息队列

2、
redis命令
redis-cli -h host -p port -a password (例如:redis-cli -h 127.0.0.1 -p 6379)
redis-cli --raw (可以避免中文乱码)
expire runoobkey 60 —设置缓存过期时间为1分钟
persist key_name -----移除key的过期时间,设置成功返回1
EXPIREAT runoobkey 1293840000-----Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用

3、
redis的发布订阅
实例演示了发布订阅是如何工作的,需要开启两个 redis-cli 客户
client1:SUBSCRIBE runoobChat ----订阅
client2:PUBLISH runoobChat “Redis PUBLISH test”----发布消息
PUBLISH runoobChat “Learn redis by runoob.com”----发布消息
于此同时,client1就能收到这两条消息

4、
redis事务
以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:
di’scard :取消事务,放弃执行事务内的所有命令
exec:标记一个事务块的开始
unwatch:取消watch命令对所有key的监视

redis 127.0.0.1:7000> multi
 OK
 redis 127.0.0.1:7000> set a aaa
 QUEUED
 redis 127.0.0.1:7000> set b bbb
 QUEUED
 redis 127.0.0.1:7000> set c ccc
 QUEUED
 redis 127.0.0.1:7000> exec1. OK
2. OK
3. OK

5、
redis客户端最大连接数
config get maxclients --查看最大连接数
redis-server --maxclients 100000 --修改最大连接数

6、
java使用Redis
1)下载驱动: jedis-2.9.0.jar
2)连接到redis服务
3)Redis Java String(字符串) 实例

import redis.clients.jedis.Jedis;
public class RedisJava {
 public static void main(String[] args) {
 //连接本地的 Redis 服务
 Jedis jedis = new Jedis(“localhost”);
 // 如果 Redis 服务设置了密码,需要下面这行,没有就不需要
 // jedis.auth(“123456”);
 System.out.println(“连接成功”);
 //查看服务是否运行
 System.out.println("服务正在运行: "+jedis.ping());
 //设置 redis 字符串数据
 jedis.set(“runoobkey”, “abc”);
 // 获取存储的数据并输出
 System.out.println("redis 存储的字符串为: "+ jedis.get(“runoobkey”));
 }
 }


3)Redis Java List(列表) 实例

import java.util.List;
 import redis.clients.jedis.Jedis;
 public class RedisListJava {
 public static void main(String[] args) {
 //连接本地的 Redis 服务
 Jedis jedis = new Jedis(“localhost”);
 System.out.println(“连接成功”);
 //存储数据到列表中
 jedis.lpush(“site-list”, “Runoob”);
 jedis.lpush(“site-list”, “Google”);
 jedis.lpush(“site-list”, “Taobao”);
 // 获取存储的数据并输出
 List list = jedis.lrange(“site-list”, 0 ,2);
 for(int i=0; i<list.size(); i++) {
 System.out.println("列表项为: "+list.get(i));
 }
 }
 }

4)Redis Java Keys 实例

import java.util.Iterator;
 import java.util.Set;
 import redis.clients.jedis.Jedis;public class RedisKeyJava {
 public static void main(String[] args) {
 //连接本地的 Redis 服务
 Jedis jedis = new Jedis(“localhost”);
 System.out.println(“连接成功”);// 获取数据并输出
    Set<String> keys = jedis.keys("*"); 
    Iterator<String> it=keys.iterator() ;   
    while(it.hasNext()){   
        String key = it.next();   
        System.out.println(key);   
    }
}

}

7、
**maxmemory
指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区
(swap 分区通常被称为交换分区,这是一块特殊的硬盘空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间)