Redis:
1.介绍:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,现在很流行。
2.安装:
我安装的是windows版本,redis官网还没有windows版本,但是微软提供了windows版本,以下是地址:
github下载的redis链接
解压完之后运行服务端
然后在运行客户端
然后直接在客户端上敲就行了
3.使用
- 1.可以直接在客户端敲命令
- 在eclipse上用java写(我是这么做的)
在eclipse中用java操作需要在maven中添加依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
常用操作
- 操作string
package com.demo.redis_demo;
import redis.clients.jedis.Jedis;
public class StringDemo {
public static void main(String[] args) {
//链接本地redis服务
Jedis jedis=new Jedis("localhost");
System.out.println("链接成功");
//查看服务是否运行
System.out.println("服务正在运行"+jedis.ping());
//清空数据
jedis.flushDB();
//新增
jedis.set("key001","value001");
jedis.set("key002","value002");
jedis.set("key003","value003");
System.out.println("已新增的3个键值对如下:");
System.out.println(jedis.get("key001"));
System.out.println(jedis.get("key002"));
System.out.println(jedis.get("key003"));
//删除
jedis.del("key001");
System.out.println(jedis.exists("key001"));
//修改(直接覆盖原来的数据)
jedis.set("key002", "sfda");
System.out.println(jedis.get("key002"));
//批量赋值
jedis.mset("k1","v1","k2","v2","k3","v3");
//批量删除
jedis.del("k1","k2");
System.out.println("一次性获取k1,k2,k3的值"+jedis.mget("k1","k2","k3"));
//获取原值并设置新值
System.out.println(jedis.getSet("k3", "abcdefgh3"));
System.out.println(jedis.get("k3"));
//截取字符串
System.err.println(jedis.getrange("k3", 0, 1));
}
}
- 操作set
package com.demo.redis_demo;
import java.util.Iterator;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class SetDemo {
public static void main(String[] args) {
//链接本地redis服务
Jedis jedis=new Jedis("localhost");
System.out.println("链接成功");
//查看服务是否运行
System.out.println("服务正在运行"+jedis.ping());
//清空数据
jedis.flushDB();
System.out.println("======================set==========================");
//向set集合中新增元素
jedis.sadd("sets", "element001");
jedis.sadd("sets", "element002");
jedis.sadd("sets", "element003");
jedis.sadd("sets", "element004");
jedis.sadd("sets", "element005");
jedis.sadd("sets", "element006");
//输出set集合中的所有元素
System.out.println("sets集合中的所有元素"+jedis.smembers("sets"));
//删除集合中的元素
jedis.srem("sets", "element003");
System.out.println("删除后的元素"+jedis.smembers("sets"));
//判断element001是否还存在集合中
System.out.println(jedis.sismember("sets", "element001"));
//循环获取集合中的元素
Set<String> set= jedis.smembers("sets");
Iterator<String> iterator=set.iterator();
while (iterator.hasNext()) {
String setmember=iterator.next();
System.out.println(setmember);
}
//集合运算
System.out.println("sets1中添加元素element001:"+jedis.sadd("sets1", "element001"));
System.out.println("sets1中添加元素element002:"+jedis.sadd("sets1", "element002"));
System.out.println("sets1中添加元素element003:"+jedis.sadd("sets1", "element003"));
System.out.println("sets1中添加元素element002:"+jedis.sadd("sets2", "element002"));
System.out.println("sets1中添加元素element003:"+jedis.sadd("sets2", "element003"));
System.out.println("sets1中添加元素element004:"+jedis.sadd("sets2", "element004"));
//查看set1和set2的交集
System.out.println("set1和set2的交集"+jedis.sinter("sets1","sets2"));
//查看set1和set2的并集
System.out.println("set1和set2的并集"+jedis.sunion("sets1","sets2"));
//查看set1和set2的差集(sets1中有sets2中没有的元素)
System.out.println("set1和set2的差集"+jedis.sdiff("sets1","sets2"));
}
}
- 操作zset(不重复,有序)
package com.demo.redis_demo;
import redis.clients.jedis.Jedis;
public class SortedSetDemo {
public static void main(String[] args) {
//链接本地redis服务
Jedis jedis=new Jedis("localhost");
System.out.println("链接成功");
//查看服务是否运行
System.out.println("服务正在运行"+jedis.ping());
//清空数据
jedis.flushDB();
System.out.println("======================zset==========================");
//向zset中增加元素
jedis.zadd("zset", 7.0,"element001");
jedis.zadd("zset", 8.0,"element002");
jedis.zadd("zset", 2.0,"element003");
jedis.zadd("zset", 3.0,"element004");
//输出集合中的所有元素(按照权重排序)
System.out.println("zset集合中的所有元素:"+jedis.zrange("zset", 0, -1));
//删除集合中的元素
jedis.zrem("zset", "element002");
System.out.println("zset集合中的所有元素:"+jedis.zrange("zset", 0, -1));
//统计zset中元素的个数
System.out.println("zset中的元素个数:"+jedis.zcard("zset"));
//统计zset集合中权重在某个范围内的元素个数
System.out.println("zset集合中权重在1-5内的元素个数"+jedis.zcount("zset", 1, 5));
//查看某个元素的权重
System.out.println("查看element001的权重"+jedis.zscore("zset", "element001"));
//查看下标1到2范围内的元素值
System.out.println("查看下标1到2范围内的元素值"+jedis.zrange("zset", 1, 2));
}
}
- 操作hash
package com.demo.redis_demo;
import java.util.HashMap;
import java.util.Map;
import redis.clients.jedis.Jedis;
public class HashDemo {
public static void main(String[] args) {
//链接本地redis服务
Jedis jedis=new Jedis("localhost");
System.out.println("链接成功");
//查看服务是否运行
System.out.println("服务正在运行"+jedis.ping());
//清空数据
jedis.flushDB();
System.out.println("======================hash==========================");
//新增一个hash
jedis.hset("hashs", "k001", "value001");
jedis.hset("hashs", "k002", "value002");
jedis.hset("hashs", "k003", "value003");
jedis.hincrBy("hashs", "k004", 4l);
//一次增加多个
Map<String, String> map=new HashMap();
map.put("k005", "dfssa");
map.put("k006", "val6");
jedis.hmset("hashs", map);
System.out.println("hashs中所有的值:"+jedis.hvals("hashs"));
//删除
jedis.hdel("hashs", "k001");
System.out.println("hashs中所有的值:"+jedis.hvals("hashs"));
//修改
//给k004增加100
jedis.hincrBy("hashs", "k004", 100);
//直接覆盖原来的值
jedis.hset("hashs", "k003", "value0001");
System.out.println("hashs中所有的值:"+jedis.hvals("hashs"));
//查看
//判断某个元素是否存在
System.out.println("判断k001是否存在"+jedis.hexists("hashs", "k001"));
//获取k004对应的值
System.out.println("k004对应的值"+jedis.hget("hashs", "k004"));
//获取k003和k004对应的值
System.out.println("k003和k004对应的值"+jedis.hmget("hashs", "k003","k004"));
//获取hashs中所有的key
System.out.println("获取hashs中所有的key"+jedis.hkeys("hashs"));
//获取hashs中所有的value
System.out.println("获取hashs中所有的value"+jedis.hvals("hashs"));
}
}
- 操作list
package com.demo.redis_demo;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;
public class ListDemo {
public static void main(String[] args) {
//链接本地redis服务
Jedis jedis=new Jedis("localhost");
System.out.println("链接成功");
//查看服务是否运行
System.out.println("服务正在运行"+jedis.ping());
//清空数据
jedis.flushDB();
//增加一个集合
jedis.lpush("stringlist", "aa");
jedis.lpush("stringlist", "bb");
jedis.lpush("stringlist", "aa");
jedis.lpush("stringlist", "aa");
jedis.lpush("stringlist", "ee");
jedis.lpush("stringlist", "ff");
jedis.lpush("stringlist", "gg");
jedis.lpush("stringlist", "hh");
jedis.lpush("numberlist", "1");
jedis.lpush("numberlist", "2");
jedis.lpush("numberlist", "3");
jedis.lpush("numberlist", "4");
System.out.println("所有元素-stringlist:"+jedis.lrange("stringlist", 0,-1));
System.out.println("所有元素-numberlist:"+jedis.lrange("numberlist", 0,-1));
//删除列表中的值,jedis.lrem(key, count, value) key--键 count 删除的个个数(有重复的时候后add进去的先被删除,类似出栈)
//System.out.println("成功删除指定元素个数-stringlist:"+jedis.lrem("stringlist", 2, "aa"));
//删除区间以外的数据
//System.out.println("删除下标0-3以外的数据:"+jedis.ltrim("numberlist", 0, 1));
System.out.println("出栈元素"+jedis.lpop("stringlist"));
System.out.println("元素出栈后-stringlist:"+jedis.lrange("stringlist", 0, -1));
//修改列表中指定下标的值
//jedis.lset("numberlist", 0, "100");
//数组长度
System.out.println("stringlist的长度"+jedis.llen("stringlist"));
//数组排序
/**
* list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list"),
* 会出现"ERR One or more scores can't be converted into double"
*/
SortingParams sortingParams=new SortingParams();
sortingParams.alpha();
sortingParams.limit(0, 11);
//返回排序后的结果
System.out.println("返回排序后的结果-stringlist:"+jedis.sort("stringlist", sortingParams));
System.out.println("返回排序后的结果-stringlist:"+jedis.sort("numberlist", sortingParams));
// 子串: start为元素下标,end也为元素下标;-1代表倒数一个元素,-2代表倒数第二个元素
System.out.println("从第二个开始到结束:"+jedis.lrange("stringlist", 1, -2));
//获取指定元素下标的值
System.out.println("获取下标为2的元素:"+jedis.lindex("stringlist", 2));
}
}
常用命令
1)连接操作命令
quit:关闭连接(connection)
auth:简单密码认证
help cmd: 查看cmd帮助,例如:help quit
2)持久化
save:将数据同步保存到磁盘
bgsave:将数据异步保存到磁盘
lastsave:返回上次成功将数据保存到磁盘的Unix时戳
shundown:将数据同步保存到磁盘,然后关闭服务
3)远程服务控制
info:提供服务器的信息和统计
monitor:实时转储收到的请求
slaveof:改变复制策略设置
config:在运行时配置Redis服务器
4)对value操作的命令
exists(key):确认一个key是否存在
del(key):删除一个key
type(key):返回值的类型
keys(pattern):返回满足给定pattern的所有key
randomkey:随机返回key空间的一个
keyrename(oldname, newname):重命名key
dbsize:返回当前数据库中key的数目
expire:设定一个key的活动时间(s)
ttl:获得一个key的活动时间
select(index):按索引查询
move(key, dbindex):移动当前数据库中的key到dbindex数据库
flushdb:删除当前选择数据库中的所有key
flushall:删除所有数据库中的所有key
5)String
set(key, value):给数据库中名称为key的string赋予值value
get(key):返回数据库中名称为key的string的value
getset(key, value):给名称为key的string赋予上一次的value
mget(key1, key2,…, key N):返回库中多个string的value
setnx(key, value):添加string,名称为key,值为value
setex(key, time, value):向库中添加string,设定过期时间time
mset(key N, value N):批量设置多个string的值
msetnx(key N, value N):如果所有名称为key i的string都不存在
incr(key):名称为key的string增1操作
incrby(key, integer):名称为key的string增加integer
decr(key):名称为key的string减1操作
decrby(key, integer):名称为key的string减少integer
append(key, value):名称为key的string的值附加value
substr(key, start, end):返回名称为key的string的value的子串
6)List
rpush(key, value):在名称为key的list尾添加一个值为value的元素
lpush(key, value):在名称为key的list头添加一个值为value的 元素
llen(key):返回名称为key的list的长度
lrange(key, start, end):返回名称为key的list中start至end之间的元素
ltrim(key, start, end):截取名称为key的list
lindex(key, index):返回名称为key的list中index位置的元素
lset(key, index, value):给名称为key的list中index位置的元素赋值
lrem(key, count, value):删除count个key的list中值为value的元素
lpop(key):返回并删除名称为key的list中的首元素
rpop(key):返回并删除名称为key的list中的尾元素
blpop(key1, key2,… key N, timeout):lpop命令的block版本。
brpop(key1, key2,… key N, timeout):rpop的block版本。
rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,
并将该元素添加到名称为dstkey的list的头部
7)Set
sadd(key, member):向名称为key的set中添加元素member
srem(key, member) :删除名称为key的set中的元素member
spop(key) :随机返回并删除名称为key的set中一个元素
smove(srckey, dstkey, member) :移到集合元素
scard(key) :返回名称为key的set的基数
sismember(key, member) :member是否是名称为key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
sunion(key1, (keys)) :求并集
sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
sdiff(key1, (keys)) :求差集
sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
smembers(key) :返回名称为key的set的所有元素
srandmember(key) :随机返回名称为key的set的一个元素
8)Hash
hset(key, field, value):向名称为key的hash中添加元素field
hget(key, field):返回名称为key的hash中field对应的value
hmget(key, (fields)):返回名称为key的hash中field i对应的value
hmset(key, (fields)):向名称为key的hash中添加元素field
hincrby(key, field, integer):将名称为key的hash中field的value增加integer
hexists(key, field):名称为key的hash中是否存在键为field的域
hdel(key, field):删除名称为key的hash中键为field的域
hlen(key):返回名称为key的hash中元素个数
hkeys(key):返回名称为key的hash中所有键
hvals(key):返回名称为key的hash中所有键对应的value
hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value