1:字符串string
2:哈希hash
3:字符串列表list
4:字符串集合set 不重复,无序
5:有序集合sortedset ,不重复,有序
6:HyperLogLog结构(redis2.8.9版本之后才有,用来做基数统计的算法。)
redis 官网
www.redis.io
redis中文官网
www.redis.cn下载redis安装包,3.0才开始支持redis分布式
安装redis,解压后再redis目录下执行:
1.makedaemonize yes
日志目录
logfile "/usr/local/redis-3.0.0/logs"redis客户端也可以设置,
连接哪台机器哪个端口的redis,如果不设置ip和端口,默认启动本机6379的redisredis有多个数据库
flushall清空redis所有数据库实例中的数据
通用命令
获取所有的key
redis-cli keys "*"
获取以name开头的所有key
redis-cli del `redis-cli keys "name*"`
获取 crxy的类型
type crxy
判断某个key是否存在
exists key
redis不区分大小写
redis班助命令
help @String 所有String类型的操作帮助
help @Sorted_set
获取set命令使用方法
help set
help s+Tab 自动补全s开头的目录
1.value为String类型
set是操作string数据类型的命令
设置一个值
set crxy www.crxy.cn
设置多个值
mset crxy1 aaa crxy2 bbbb
获取1个值
get crxy
获取多个值
mget crxy crxy2
如果建存在,则插入不成功,如果建不存在,则插入成功
setnx crxy 221222
值递增加1,值必须可以转换为数字
incr crxy
递减,值必须可以转换为数字
decr crxy
设置步长,每次递增加3
incrby crxy 3
incrbyfloat crxy 2.1
incrbyfloat crxy -2.1
没有decrbyfloat
拼接字符串
append crxy aaa
返回长度
strlen crxy
2.hash(相对于hashmap)
key ->value(这个value是hashmap类型的数据,这个hashmap的key和value 都是字符串)
value存储的是hashmap的字段,value的key和值都只能是字符串
适用于存储对象
比如user
user->{id:1,name:xiaoli,age:1}
动态增加删除列
id name age gender
增加一个
user:100是key
hset user:100 name zs
hset user:100 age 18
获取key为user:100的name属性的值
hget user:100 name
增加多个
hmset user:100 name xiaolii gender 0
如果建存在则不操作,如果不存在则插入
hsetnx user:100 name wangsi
判断建中是否存在某个属性
hexists user:100 city
hmget user:100 age gender
删除某个字段
hdel user:100 city
获取所有value
hvals user:100
获取所有key
hkeys user:100
长度
hlen user:100
3.value类型是list
从左边插入
lpush list a
lpush list a b c d e f
从右侧插入
rpush list b
从左侧弹出一个元素
lpost list
从右侧弹出一个元素
rpost list
获取长度
llen list
rlem list 2 a
lrem(lrem key count value)count分为三种情况
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
角标区间,-1倒数第一个,-2倒数第二个,(角标并不存在-1,-2,只是命令做了转换)
lrange list 0 -1
元素:a b c d
角标 :0 1 2 3
修改0号角标的元素为a
lset list 0 a
4.value类型是Set
添加元素
sadd set a
sadd set b
删除元素
srem set a b
集合set中是否存在元素a
sismembers set a
集合中的所有元素
smembers set
返回差值,返回set中有而set1中没有的元素
sdiff set set1
求连个set的交集
sinter set set1
并集,两个元素中
sunion set set1
将set和set1的并集存储在aaa中
sunionstore aaa set set1
type aaa
smembers aaa
返回元素个数
scard aaaa
随机取数据,取完就删了
spop set
随机取几个元素(个数是正数,返回小于等于集合长度的元素,如果个数是负数,返回负数绝对值个的元素,不保证元素不重复)
srandmember set 2
5.value的类型是sortedSet
10是分值
zadd zset 10 a
获取元素分值
zscore zset a
获取某个区间元素
zrange zset 0 -1
zrange zset 0 1
反序返回所有元素
zrevrange zset 0 -1
通过分值获取元素,默认是闭区间[10,20]
zrangebyscore zset 10 20
加小括号就是开区间 (10,20)
zrangebyscore zset (10 (20
递增
zincrby zset a 1
返回元素个数
zcard zset
指分数定区间元素个数(闭区间)
zcount zset 10 20
zcount zset (10 20
移除指定元素
zrem zset a
通过角标删除元素
zremrangebyrank zset 0 1
通过分数删除元素
zremrangebyscore zset 10 20
开区间
zremrangebyscore zset (10 (20
正无穷
zadd zset +inf x
负无穷
zadd zset -inf y
如果两个元素的分值相同,则按照元素的自然顺序排序
例子:学生id和成绩
key score:1 value:90
set score:1 90
set score:2 100
set score:3 80
set score:4 70
排序
根据学生的成绩排序:
*是通配符
sort list by score:*
4
3
1
2
根据成绩排序
sort list by score:* desc 降序排序
2
1
3
4
get # 表示获取元素本身
sort list by score:* get # get score:* desc
2
100
1
90
3
80
4
70
sort list 对hashset排序
hset stu:1 id 1
hset stu:1 name name1
hset stu:1 score 60
hset stu:2 id 2
hset stu:2 name name2
hset stu:2 score 50
hset stu:3 id 3
hset stu:3 name name3
hset stu:3 score 80
hset stu:4 id 4
hset stu:4 name name4
如果分数相同,则按照id排序,stu:1 表示id为1的学生
set命令权限很大,set本来是String类型的操作命令,如果操作其他类型的数据,其他数据都会转换为String类型
Jedis编程
添加Jedis的maven依赖
测试
Jedis jedis = new Jedis(host, port);
生产
private static JedisPool jedisPool=null;
public Jedis getJedis(){
if(JedisPool==null){
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(100);//总连接数
poolConfig.setMaxIdle(10);//空闲链接数
poolConfig.setMaxWaitMillis(3000);//创建连接的超时时间
poolConfig.setTestOnBorrow(true);//在创建连接的时候是否会测试,保证创建的连接一定是可用的
JedisPool jedisPool = new JedisPool(poolConfig, host, port);
}|
Jedis jedis = jedisPool.getResource();
return jedis;
}
public void returnJedis(Jedis jedis){
jedisPool.returnResourceObject(jedis);
}
@Test
public void test1(){
Jedis jedis=getJedis();
String string = jedis.get("crxy");
System.out.println(string);
}
redis每个操作都是原子操作,保证线程安全
事务: