1.什么是Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,
官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,
且Redis通过提供多种键值数据类型来适应不同场景下的存储需求。
2.redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)
聊天室的在线好友列表
任务队列。(秒杀、抢购、12306等等)
应用排行榜
网站访问统计
数据过期处理(可以精确到毫秒
分布式集群架构中的session分离
3.redis的数据结构:
存储
set username zhangsan
hset myhash username lisi
lpush myList a;rpush myList c
sadd myset a
zadd mysort 60 zhangsan
获取
get username
hget myhash username;hgetall myhash
lrange myList 0 -1
smembers myset
zrange mysort 0 -1;zrange mysort 0 -1 withscores
删除
del username
hdel myhash username
lpop key;rpop key
srem myset a
zrem mysort lisi
redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构:
value的数据结构:
1) 字符串类型 string
存储: set key value
set username zhangsan
获取: get key
get username
删除: del key
del username
2) 哈希类型 hash : map格式
存储: hset key field value
hset myhash username lisi
hset myhash password 123
获取:
获取指定的field对应的值:hget key field
hget myhash username
获取所有的field和value:hgetall key
hgetall myhash
删除: hdel key field
hdel myhash username
3) 列表类型 list : linkedlist格式。支持重复元素
可以添加一个元素到列表的头部(左边)或者尾部(右边)
添加:
将元素加入列表左表:lpush key value
lpush myList a
将元素加入列表右边:rpush key value
rpush myList c
获取:
范围获取:lrange key start end
lrange myList 0 -1
删除:
lpop key: 删除列表最左边的元素,并将元素返回
rpop key: 删除列表最右边的元素,并将元素返回
4) 集合类型 set : 不允许重复元素
存储:sadd key value
sadd myset a
获取:smembers key:获取set集合中所有元素
smembers myset
删除:srem key value:删除set集合中的某个元素
srem myset a
5) 有序集合类型 sortedset:
不允许重复元素,且元素有顺序
每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。
存储:zadd key score value
zadd mysort 60 zhangsan
获取:zrange key start end [withscores]
zrange mysort 0 -1
zrange mysort 0 -1 withscores
删除:zrem key value
zrem mysort lisi
4. 通用命令
1. keys * : 查询所有的键
2. type key : 获取键对应的value的类型
3. del key:删除指定的key value
5.Jedis
字符串类型 string
//存储
jedis.set("username","zhangsan");
//获取
String username = jedis.get("username");
//可以使用setex()方法存储可以指定过期时间的 key value
//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
jedis.setex("activecode",20,"hehe");
哈希类型 hash : map格式
// 存储hash
jedis.hset("user","name","lisi");
jedis.hset("user","age","23");
// 获取hash
String name = jedis.hget("user", "name");
// 获取hash的所有map中的数据
Map<String, String> user = jedis.hgetAll("user");
列表类型 list : linkedlist格式。支持重复元素
// list 存储
jedis.lpush("mylist","a","b","c");//从左边存
jedis.rpush("mylist","a","b","c");//从右边存
// list 范围获取
List<String> mylist = jedis.lrange("mylist", 0, -1);//是ArrayList
// list 弹出
String element1 = jedis.lpop("mylist");
String element2 = jedis.rpop("mylist");
集合类型 set : 不允许重复元素
// set 存储
jedis.sadd("myset","java","php","c++");
Set<String> myset = jedis.smembers("myset");
有序集合类型 sortedset:不允许重复元素,且元素有顺序
// sortedset 存储
jedis.zadd("mysortedset",3,"亚瑟");
jedis.zadd("mysortedset",30,"后裔");
jedis.zadd("mysortedset",55,"孙悟空");
// sortedset 获取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);