redis 基本命令,6种基本value类型

 

Redis是一种面向“ 键/值”对数据类型的 内存数据库,可以满足我们对海量数据的读写需求。
redis的 只能是 字符串
redis的 支持多种数据类型:

 

  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.make


2.make install  src目录下会把一些可执行文件copy到/usr/local/bin目录下


启动redis
redis-server


修改redis.conf

默认后台 方式启动redis

daemonize yes

日志目录

logfile "/usr/local/redis-3.0.0/logs"


启动可以选择配置文件
redis-server /etc/redis.conf






ps -ef |grep redis


redis-cli客户端

 

redis客户端也可以设置,

连接哪台机器哪个端口的redis,如果不设置ip和端口,默认启动本机6379的redis
端口也可以在配置文件里改


redis-cli -h 127.0.0.0 -p 6379


停止redis
redis-cli  下执行 shutdown命令
redis-cli shutdown

 

 

redis有多个数据库


默认进入0号数据库
 
redis默认有16个数据库(0-15)
进入15号数据库
select 15


redis.conf可以配置数据库个数
databases 16


redis数据库名称就是数字,不支持自定义数据库名字




数据库的操作是隔离的,一个命令除外:flushall

 

 

 

flushall清空redis所有数据库实例中的数据




通用命令


获取所有的key
redis-cli keys "*"


获取以name开头的所有key
redis-cli del `redis-cli keys "name*"`

连接指定host port  password的redis并删除相应的key

redis-cli -a password -h host -p port  keys 'all*' | xargs ./redis-cli -a password -h host -p port del


获取 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

 

 

 

sort list by stu.*->score
4
2
1
3
 
因为stu:4没有score这个参考键,默认是0

 

同时查询出姓名

 

sort list by stu:*->score get #  get stu:*->name

 

如果分数相同,则按照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每个操作都是原子操作,保证线程安全

 

 

事务:

 

redis中的事务是一组命令的集合。事务同命令一样都是redis的最小执行单元。一组事务中的命令要么都执行,要么都不执行。(例如:转账)
原理:先将属于一个事务的命令发送给redis进行缓存,最后再让redis依次执行这些命令。
应用场景
一组命令必须同时都执行,或者都不执行。
我们想要保证一组命令在执行的过程之中不被其它命令插入。
命令
multi  事务开始
.....
exec  事务结束,开始执行事务中的命令
discard  放弃事务
错误处理
1:语法错误:致命的错误,事务中的所有命令都不会执行
2:运行错误:不会影响事务中其他命令的执行
Redis 不支持回滚(roll back)
正因为redis不支持回滚功能,才使得redis在事务上可以保持简洁和快速。
java代码手工实现incr递增命令
watch命令
作用:监控一个或者多个键,当被监控的键值被修改后阻止之后的一个事务的执行。
但是不能保证其它客户端不修改这一键值,所以我们需要在事务执行失败后重新执行事务中的命令。
注意: 执行完事务的exec命令之后,watch就会取消对所有键值的监控
unwatch:取消监控

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值