首页 > 代码库 > 初识redis

初识redis

redis是个存储服务,能够支持k-v等结构,数据能落地(memcache的数据是内存数据,无法落地)

下面进入redis的世界来一探究竟。

命令行进入redis:

用ps aux | grep redis看下redis-server是否开启,对应的端口号是多少。

/usr/local/redis26/redis-server /usr/local/redis26/6007.conf

redis命令行连6007端口进入redis

/usr/local/redis26/redis-cli -h localhost -p 6007

常用的几个命令:get(拿key获取value),set(设置key-value对),ttl(查看该key-value的过期时间),keys(查看符合查询条件的key list)

可能会用到的:mget(多个key获取value),hset-hget,incr,decr

某些场景:带排序的SortedSet(这些见参考文件1)

keys:通过查询条件查看key列表,支持*正则,其它正则表示不确定是否支持

redis localhost:6007> keys ST:client:*
1) "ST:client:soft:1"
2) "ST:client:edition:100092983"
3) "ST:client:soft:3"
4) "ST:client:edition:100093524"

keys-2:不存在

redis localhost:6007> keys test(empty list or set)

set-get:

redis localhost:6007> set test testOKredis localhost:6007> get test"test"

del:删除某个key,特别注意如果某个key不存在,用命令行get时会返回nil

redis localhost:6007> del test(integer) 1redis localhost:6007> get test(nil)

ttl:查看某个key的过期时间。可以看到如果key不存在,则ttl返回-1(与版本有关,2.8之前返回-1,2.8之后返回-2);如果key存在并且永不过期,则ttl返回-1;如果key存在并且设置了过期,则返回key的剩余存活时间

redis localhost:6007> get test(nil)redis localhost:6007> ttl test(integer) -1redis localhost:6007> set test testOKredis localhost:6007> ttl test(integer) -1redis localhost:6007> get test"test"

expire:设置key的过期时间

redis localhost:6007> expire test 100(integer) 1redis localhost:6007> ttl test(integer) 98

mget:获取多个key对应的value

redis localhost:6007> mget test test11) "test"2) "test1"

decr:自减1

redis localhost:6007> decr test(error) ERR value is not an integer or out of rangeredis localhost:6007> set test 3OKredis localhost:6007> decr test(integer) 2

incr:自增1

redis localhost:6007> incr test(integer) 3redis localhost:6007> get test"3"

append:字符串追加

redis localhost:6007> append test test(integer) 5redis localhost:6007> get test"3test"

 上面所有的可归结于字符串操作,可以看到redis支持string类型,以及set,list,zset,hash类型

value类型:string,list,set,zset,hash
list:列表,一维数组,元素可重复
set:无序集合,一维数组,元素不可重复
zset:排序集合,一维数组,有顺序
hash:哈希,关联数组

list操作:数组,下表为0,1,2,3....

redis localhost:6007> lset list 0 list0(error) ERR no such keyredis localhost:6007> lpush list list0(integer) 1redis localhost:6007> lget list(error) ERR unknown command lgetredis localhost:6007> lrange list 0 11) "list0"
解释:
lset:直接用lset是错误的,因为list必须存在才能使用该命令
lpush:往list中添加元素,如果list不存在则创建list并添加元素
lget:没有这个命令
lrange:列出list的指定条目
用法:LRANGE key start stop,start表示起始下标从0开始,stop表示终止下标从0开始,stop不是条目数,而是结尾处的下标值
redis localhost:6007> lrange list 0 01) "list0"redis localhost:6007> lpush list list1(integer) 2redis localhost:6007> lrange list 0 11) "list1"2) "list0"

redis localhost:6007> lset list 0 ‘list-new0‘
OK
redis localhost:6007> lrange list 0 1
1) "list-new0"
2) "list0"

 解释:

lrange之前解释过了。

lpush添加元素到list

lset:lset key index value,修改list的某个下标内的值。复杂度为O(1),可见数据结构不是链表

 

reference:

1,http://redis.readthedocs.org/en/latest/

2,关于ttl:http://redis.readthedocs.org/en/latest/key/ttl.html

3,http://redis.io/topics/data-types
4,http://blog.csdn.net/terryzero/article/details/5719924