redis

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

redis下载地址 https://github.com/MSOpenTech/redis/releases

具体的dos命令操作 欢迎下载文档 点击打开链接

服务器端常用命令

命令

描述

例子

ping

检查链接是否存活 

ping,返回pong,则存活

echo

在命令行打印内容

echo  context

info

获取服务器上的信息和统计

info

quit

退出客户端

quit

select

选择数据库

select   dbno

dbsize

返回当前数据库中key的数目

dbsize

flushdb

删除当前数据库中的所有key

flushdb

flushall

删除所有数据库中的所有key

flushall

一、String类型

         1、在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

命令

描述

例子

set

赋值

set key value

get

获取值

get key

append

追加字符串

append key value

incr

自增(+1

incr key

decr

自减(-1

decr key

incrby

自增,增加指定步长

incrby key increment

decrby

自减,减少指定步长

decrby key decrement

getset

先获取元素再赋值

getset key value

setex

赋值并指定key的存活时间

setex key second value

命令

描述

例子

setnx

key不存在就赋值,否则不做操作

setnx key value

strlen

返回key的值的长度

strlen key

setrange

字符串替换(包含start)

setrange key start value

getrange

获取指定位置字符串

getrange key start end

mset

同时设置多个key value

mset key value [key2 value2...]

mget

同时获取多个key的值

mget key [key2...]

msetnx

key不存在同时设置多个key value,否则不设置

msetnx key value [key2 value2]

setbit

设置二进制的值

setbit key offset value

getbit

获取二进制的值

getbit key offset

二、hash类型

1、hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。如下:


命令

描述

例子

hset

key中的filed字段赋值

hset key field value

hget 

获取可以中filed字段的值

hget key field

hexists

判断key中是否存在filed

hexists key field

hlen

获取keyfiled的数量

hlen key 

hdel

删除key中的filed字段

hdel key field [field2..]

hgetall

获取key中所有的fieldvalue

hgetall key

hmset

同时设置多个fieldvalue

hmset key field value [field2 value2..]

hmget

同时获取多个field的值

hmget key field [field2..]

hsetnx

如果field不存在赋值,否则不操作

hsetnx key field value

hincrby

field的值增加指定的步长

hincrby key  field increment

hkeys

获取所有的key

hkeys key

hvals

获取所有的value

hvals key

三、list类型

1、列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。

命令

描述

例子

lpush

list头部添加值

lpush key value [value2..]

rpush

list尾部添加值

rpush key value [value2..]

lrange

获取指定位置的数据

lrange key start end

lpop

从头部弹出key的值(删除)

lpop key

rpop

从尾部弹出key的值(删除)

rpop key

rpoplpush

从一个list的尾部弹出插入到另一个list的头部

rpoplpush source destnation

命令

描述

例子

llen

返回key的长度

llen key

lrem

删除前面几个值为value的元素

lrem key count value

lset

按下标赋值

lset key index value

lindex

返回下标的值

lindex key index

ltrim

截取list 指定位置的值

ltrim key start end

linsert

在某个元素的前面或后面插入值

linsert key before|after pivot value

lpushx

key存在头部添加,否则不做操作

lpushx key value

rpushx

key存在在尾部添加,否则不做操作

rpushx key value

四、set类型

1、set就是集合类型,集合中每个元素都不相同,且没有顺序。

命令

描述

例子

sadd

添加值

sadd key member [member2]

smembers

遍历集合

smembers key

scard

获取key的成员数量

scard key

srem

删除指定成员

srem key member [member2..]

sismember

判断成员是否存在

sismember key member

spop

随机弹出一个值(删除)

spop key

命令

描述

例子

srandmember

随机弹出一个成员(不删除)

srandmember key

smove

移动一个集合的成员到另一个集合

smove source destination member

sdiff

求集合的差集

sdiff key [key2..]

sdiffstore

求集合的差集并存到新集合中

sdiffstore destination key [key2..]

sinter

求集合交集

sinter key [key2..]

sinterstore

求集合交集并存到新集合中

sinterstore destination key [key2..]

sunion

求集合并集

suion key [key2..]

sunionstore

求集合并集并存到新集合中

suionstore destination key [key2..]

五、sorted set类型
1、在集合类型的基础上有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。 
2有序集合和list类型二者有着很大区别: 
1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后, 访问中间数据的速度会变慢。 
2)有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。 
3)列表中不能简单的调整某个元素的位置,但是有序集合可以 
4)有序集合要比列表类型更耗内存。

命令

描述

例子

zadd

添加成员

zadd key score member [score member..]

zcard

获取成员数量

zcard key

zcount

获取指定分数之间的成员数量

zcount key min max

zincrby

给成员增加指定分数

zincrby key increment member

zrange

遍历指定下标之间的成员[及分数](分数从小到大排列)

zrange key start end [withscores]

zrangebyscore

遍历指定分数之间的成员(及分数)

zrangebyscore key min max [withscores]

zrank

返回成员的下标(分数从小到大排列)

zrank key member

zrem

删除指定成员

zrem key member [member2..]

zrevrange

遍历指定成员[及分数](分数从大到小排列)

zrevrange key start end [withscores]

命令

描述

例子

zrevrank

返回成员下标(分数从大到小)

zrevrank key member

zscore

获取指定成员的分数

zscore key member

zrevrangebyscore

获取在指定分数之间的成员[及分数](分数从高到低)

zrevrangebyscore key max min [withscores]

zremrangebyrank

删除下标之间的成员

zremrangebyrank key start end

zremrangebyscore

删除指定分数之间的成员

zremrangebyscore key min max

六、key命令

命令

描述

例子

keys

获取所有的key

keys  pattern

del

删除指定key

del key [key2..]

exists

判断key是否存在

exists key

move

移动一个key到另一个库中

move key db

rename

key重新命名

rename key newkey

renamenx

key重新命名,当newkey存在是不操作

renamenx key newkey

persist

key持久化

persist key

命令

描述

例子

expire

设置key的存活时间

expire key sexonds

expireat

设置key的存活时间(年月日}时间戳

expireat key timestamp

ttl

实时查看key的剩余存活时间

ttl key

pttl

查看key的剩余存活时间(毫秒)

pttl key

randomkey

随机返回一个key

randomkey

type

返回key中的value的类型

type key

select





一个缓存的小案例    记得添加redis的jar包

对象和字节的相互转换工具类

package cn.et;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ObjectUtils {
	/**
	 * 将对象转换为字节数组
	 * @param obj
	 * @return
	 * @throws IOException 
	 */
	public static byte[] objectToByte(Object obj) throws IOException{
		ByteArrayOutputStream boas=new ByteArrayOutputStream();
		ObjectOutputStream oops=new ObjectOutputStream(boas);
		oops.writeObject(obj);
		oops.close();
		return boas.toByteArray();
	}
	
	/**
	 * 将字节数组转换为对象
	 * @param obj
	 * @return
	 * @throws IOException 
	 */
	public static Object byteToObject(byte[] src) throws Exception{
		ByteArrayInputStream boas=new ByteArrayInputStream(src,0,src.length);
		ObjectInputStream ois=new ObjectInputStream(boas);
		return ois.readObject();
	}
}


往redis添加数据

package cn.et;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import redis.clients.jedis.Jedis;

public class Client {
	public static List<Map> list=new ArrayList<Map>();
	/**
	 * 模拟有多个用户 发送的订单请求  模拟2个 淘宝 
	 */
	static{
		Map map=new HashMap();
		map.put("cid", 1);
		map.put("count", 2);
		map.put("price", 200);
		list.add(map);
		Map map1=new HashMap();
		map1.put("cid", 2);
		map1.put("count", 1);
		map1.put("price", 10);
		list.add(map1);
	}
    static Jedis jedis=new Jedis();
    final static String ORDER_KEY="orderList";
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		for(int i=0;i<list.size();i++){
			final Map map=list.get(i); 
			//往list尾部添加值     并以字节存储到redis中
			jedis.rpush(ORDER_KEY.getBytes(),ObjectUtils.objectToByte(map)); 
		}
	}
}


从redis缓存中读取数据

package cn.et;

import java.util.Map;

import redis.clients.jedis.Jedis;

public class Order {
	static Jedis jedis = new Jedis();
	final static String ORDER_KEY = "orderList";

	public static void main(String[] args) throws Exception {
		byte[] srcByte = jedis.lpop(ORDER_KEY.getBytes());
		Map map = (Map) ObjectUtils.byteToObject(srcByte);
		System.out.println(map.get("cid"));
	}
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值