NOSql解决三高:
高并发
大数据:海量数据查询一条数据
高可靠和高扩展
Jedis介绍
redis不仅可以通过命令行来操作,现在主流的语言(Java,C#…)基本都有客户端的支持.所以我们要通过java来操作Redis.
企业里用的最多的是Jedis.
Jedis:只是java操作Redis的客户端,相当于jdbc
Jedis使用步骤:
需要用到第三方jar包(两个)来操作:Jedis
步骤:
1)导入jar包
2)创建jedis对象
new Jedis(“主机名,字符串类型”,端口号整型)
int port = 6379;
String host = “localhost”;
new Jedis(host,port);
3)操作redis数据库(set、get、del)
4)释放资源
jedis.close();
@Test
public void test01(){
Jedis jedis = new Jedis("192.168.139.128", 6379);
//jedis.set("akey", "aaa");
String string = jedis.get("akey");
System.out.println(string);
jedis.close();
}
Jedis工具类的抽取,用连接池
1)创建jedis连接词
1.1创建池子的配置对象
new JedisPool(poolConfig , host , port);
2)获得jedis
jedisPool.getResource();
3)操作redis(set、get、del)
JedisUtils:
public class JedisUtils {
//配置
private static JedisPoolConfig config;
//连接池
private static JedisPool pool;
static{
config = new JedisPoolConfig();
config.setMaxTotal(10);
config.setMaxIdle(5);
String host = "192.168.139.128";
int port = 6379;
pool = new JedisPool(config, host, port);
}
/**
* @Title: JedisUtils.java
* @Description: TODO(获得jedis对象)
* @return
* @author jjizh
* @date 2017年7月14日 下午8:57:04
* @version V1.0
*/
public static Jedis getJedis(){
return pool.getResource();
}
/**
* @Title: JedisUtils.java
* @Description: TODO(关闭jedis对象,关闭资源)
* @param jedis
* @author jjizh
* @date 2017年7月14日 下午9:01:33
* @version V1.0
*/
public static void close(Jedis jedis){
if(jedis != null){
jedis.close();
}
}
}
redis中的数据结构
redis中存储的数据是以key-value的形式存在的.其中value支持5种数据类型
* 字符串(String)
* 哈希(hash)
* 字符串列表(list)
* 字符串集合(set)
* 有序的字符串集合(sorted-set或者叫zset)
1)key不要太长(不能大于1024个字节)
也不要太短,描述性不好
一般的统一写法:项目名_子模块名_key名称
(一)存储字符串(重点)
String是redis最基本的类型,一个key对应一个value
String类型是二进制安全的,一个键最大能够存储512MB
常见命令:
扩展命令
* - getset key value:先获取再设置
* - incrby key count:指定增加数量
* - decrby key count:指定减少数量
* - append key value:追加(若有指定的key 则追加,若无,则设置一个),相当于拼接字符串
存储哈希 hash(重点)
Redis中的hash是一个键值对集合
Redis hash 是一个String类型的field和value的映射表,hash特别适合用于存储对象
可以看成是String key和String value的map容器,也就是说把值看成map集合
把第一个key当成是redis中的key,把value里面的key当成是字段
常见命令:
扩展命令
hlen key 获取哈希表中字段的数量
hincrby key filed increment:给指定的子键增加指定的值
hkeys key:获取所有哈希表中的字段
hvals key:获得所有的value
HEXISTS key field:查看哈希表 key 中,指定的字段是否存在。
存储list
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边),一个列表最多可以包含 232 次方- 1 个元素 (4294967295, 每个列表超过40亿个元素)。
单项链表:查询满,增加和删除快
双向列表:查询慢,删除和增加快,特别是在两头
redis列表是简单的字符串列表,按照插入顺序排序,也是一种双向列表。
特点:有序
存储set
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
特点:无序,唯一
集合成员是无序唯一的
存储sortedset (zset)
不重复、有序的。
Redis 有序集合(sortedset)和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
通用的操作
keys *: 查询所有的key
- exists key:判断是否有指定的key 若有返回1,否则返回0
- expire key 秒数:设置这个key在缓存中的存活时间
- ttl key:展示指定key的剩余时间
若返回值为 -1:永不过期
若返回值为 -2:已过期或者不存在
- del key:删除指定key
- rename key 新key:重命名
- type key:判断一个key的类型
Redis的特性:
1.多数据库性
redis默认是16个数据库, 编号是从0~15.
- select index:切换库
- move key index: 把key移动到几号库(index是库的编号)
- flushdb:清空当前数据库
- flushall:清空当前实例下所有的数据库
2.服务器命令(自学)
- ping :测试连接是否存活
- echo str: 打印内容
- quit: 退出连接
- dbsize:返回当前数据库key的数目
- info:获取服务器信息
3.订阅发布
- subscibe channel: 订阅频道
- psubscribe *: 批量订阅频道
- publish channel content:在指定的频道发布内容